FROM MSDN:
如果数据类型在它自己分配的内存中存的是具体数据,则该数据类型就是“值类型”;如果存储的是指向一个地址的指针,那么该数据类型是“引用类型”。
值类型
值类型包括:
-
所有数字数据类型
-
Boolean、Char 和 Date
-
所有结构,即使其成员是引用类型
-
枚举,因为其基础类型总是 SByte、Short、Integer、Long、Byte、UShort、UInteger 或 ULong
引用类型
引用类型包括:
-
String
-
所有数组,即使其元素是值类型
-
类类型,如 Form
-
委托
public string get()
{
mypost op = new mypost();
mypost opp = op;
op.subject = "I am right!";
string s = "Iamright_str";
set(op,ref s);
return op.subject + "" + s + "" + opp.subject;
}
public void set(mypost op ,ref string str)
{
mypost o = op;
op.subject = "I am wrong!";
str = "Iamwrong_str!";
}
调用GET() 输出:I am wrong!Iamwrong_str!I am wrong!
因为OP,OPP都是引用类型,所以当类的实例OP作为参数传递给SET时,传递的是一个地址,如果实际储存的值(实例)改变,他会跟着改变。OPP存储的地址与OP一致。如图:
但是注意这里,string参数需要加上ref才是传递地址,否则会像值类型一样不改变内容。
这是因为s