Hello to everyone, I am trying to get to know C++/CLI and I have some questions. Just to let you know I have VB.Net background and I also have taken some C++ classes some years before. I hope someone can shade a light on my questions. Here it goes:

First, what is exactly the deference between the reference class and the value class? I mean why we need to declare the “ref” or “value” classes if we pass the arguments as ref or value in VB.Net. It is a little bit confusing for me to have a type as referenced and value.

Second, what is this [int main(array<System::String ^> ^args)] line representing? My guess is that the argument is a string array and it may contain the command line for this app passed when the app starts. Is this right?
Also I have a question about “^”. What I read from MSDN the symbol “^” directs the compiler to create handle for the object in the managed garbagecollecter heap so that it can be cleaned when there are no references to this object. Is this right? And also why they are two on that line? I mean one is not enough having it in front of “args”? Is it because the string data type is an array of chars in C++ and it its self should have a handle in the heap? Is this correct?

The questions may be very simple but I tried to get the answers on MSDN and still they are confusing for me. I would appreciate for any help.
Thanks in advance,
VBDT