在C++中,Struct与class是等价的,唯一区别是struct默认为public成员,class默认为private成员。但是到了C#中,它们却有很大的不同:struct对象是值类型、class对象是引用类型。
public class RefType
{
public int Var;
}
public struct ValueType
{
public int Var;
}
private void TextValueRef()
{
RefType reft = new RefType();
ValueType valuet = new ValueType();
reft.Var = 100;
valuet.Var = 100;
RefType reftOther = reft;
ValueType valuetOther = valuet;
reftOther.Var = 1000;
valuetOther.Var = 1000;
Response.Write("RefType:Var=" + reft.Var.ToString() + "<br>");
Response.Write("ReftTypeOther:Var=" + reftOther.Var.ToString() + "<br>");
Response.Write("ValueType.Var=" + valuet.Var.ToString() + "<br>");
Response.Write("ValueTypeOther:Var=" + valuetOther.Var.ToString() + "<br>");
}
对reftOther的赋值影响了reft,而对valuetOther的赋值不影响valuet。
我不知道C#这样做是为了什么,但是有一点可以肯定:“类名 对象名A=对象名B”这样的语句,对于两种对象来说是不一样的结果。而且,这两种结果与C++都不一样(C++里是调用拷贝构造函数或operator =函数)。
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
