Question: I know that struct is a value type , that means it defined on stack .

But I can do A a = new A(); (A my struct of course). and it defined on heap , and only the reference variable is on stack.

Can you explain me this one please .

Answer: 
Your code (A a = new A();) creates and initializes the struct. If it is a local variable, it is initialized on the stack. If it is a member variable, it is initialized on the heap as part of the object. Using "new" doesn't necessarily mean a heap allocation in C#/.NET. It depends on the context.
> 
> But I can do A a = new A(); (A my struct of course). and it defined on heap , and only the reference variable is on stack.
> 
> 
> 

If `A` is a value type as you say, and `a` is a method local, it will be allocated on the stack. *Unless* `a` is used in a closure -- then it will be allocated as part of a heap-allocated object of a compiler-generated class.

If you want further analysis, you will have to post the definition of the `A` type as well as the entire method where you define this variable.