扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
针对C#中的字段和属性,很多初学者无法区分这两者之间的区别。
目前创新互联已为上1000+的企业提供了网站建设、域名、网页空间、网站托管、企业网站设计、安陆网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。字段与属性比较
字段;是一种“成员变量”,一般在类的内部做数据交互使用,占用内存空间。
属性:a.是一种逻辑变量,一般跟字段一起结合起来使用,是字段的扩展,并不占用实际的内存。
b.属性其实就是外界访问私有字段的入口,属性本身不保存任何数据。在面向对象设计中主要使用属性描述对象的静态特征。
c.属性设置过程中一般会用到get和set两个方法。可以在方法里加入逻辑处理数据,灵活拓展使用。
标注:因为属性不占用实际内存,所以属性不能用于方法的ref类型参数
下面举个栗子,如下所示
public Class Student
{
private DateTime _Birthday;
private string _Name;
public string Name
{
get{return _Name;}
set {this._Name=value;}
}
public int Age
{
get {return DateTime.Now.Year-this._Birthday.Year}
}
}
在这个例子中,_Name是字段,而Name为属性,Name属性的get方法为返回学生的姓名,Set方法则是对_Name字段进行赋值。
Age也是类中的一个属性,只不过这个属性是只读属性,get方法返回格式化之后的年龄数据,这就是使用属性很好的控制了返回数据的格式,不然还得专门写个方法去格式化数据。
同时,属性也可以通过相应的条件对字段赋值进行相应的限制,比如我们要限定Student的名字长度最长不能超过5个字,超过5个字的,我们就只截取前面5个字符即可。
为了实现这种效果,我们可以在set方法内做逻辑规则运算,即可轻松实现想要的效果,如下所示,设置Name属性为:
Public string Name
{
get {return _Name}
set
{
if(value.Length>5)
this._Name=value.Substring(0,5);
else
this._Name=value;
}
}
直接对字段赋值是无法达到上述效果,你需要在每次给字段赋值的时候,调用函数获取理想值。使用属性可以完美避免非法数据。
使用属性的情况:
要求字段只能读或者只能写;
需要限制字段的取值范围;
在改变一个字段的值的时候希望改变对象的其它一些状态;
使用字段的情况:
允许自由读写;
取值范围只受数据类型约束而无其他任何特定限制;
值的变动不需要引发类中其它任何成员的相应变化。
最后,附上我的ASP.NET学习群,欢迎各位同行入群指导交流。技术群:【.NET技术社区】872894940
备注:此原创文章最早发表于博主个人站点:IT技术小趣屋。
博主个人技术交流群:960640092,博主微信公众号如下:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流