您的位置:首页 > 其它

结构struct(值类型)在实际应用要注意的二点:

2009-03-14 19:08 369 查看
.Net中的数据类型大致可以分为二类:一类是值类型,一类是引用类型;结构(struct)是值类型,从性能上考虑值类型更有优势(关于值类型与引用类型的详细讨论不在本文范围内,大家可以去查阅相关资料).对于一些特定场合:比如仅需要存储数据,不需要体现具体方法的时候,建议大家用struct来代替class,但在使用过程中,有几个容易被忽视的细节.

1.使用struct存储数据做为数据源,与数据显示控件绑定时:

代码如下:

public class MyClass
{
// Fields
[CompilerGenerated]
private string <Name>k__BackingField;
[CompilerGenerated]
private string <Value>k__BackingField;

// Methods
public MyClass(string pName, string pValue)
{
base..ctor();
this.Name =
pName;
this.Value =
pValue;
return;
}

// Properties
public string Name
{
[CompilerGenerated]
get
{
string str;
str = this.<Name>k__BackingField;
Label_0009:
return str;
}
[CompilerGenerated]
set
{
this.<Name>k__BackingField = value;
return;
}
}

public string Value
{
[CompilerGenerated]
get
{
string str;
str = this.<Value>k__BackingField;
Label_0009:
return str;
}
[CompilerGenerated]
set
{
this.<Value>k__BackingField = value;
return;
}
}
}

观察一下构造函数,变成了
...
base..ctor();
this.Name = pName;
...

关键就在这里:对于类来讲,并不要求在访问类的实例之前对所有成员赋值,所以这里引用this是合法的;而值类型要求在使用前必须对所有成员赋值,所以值类型如果在构造函数中直接给自动属性赋值,这里this代表的就是结构本身,而在此之前自动生成的二个私有成员private string <Name>k__BackingField和private string <Value>k__BackingField还没赋值,因此报错也就是合情合理了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: