码迷,mamicode.com
首页 > 编程语言 > 详细

C#语言中字段和属性相关知识剖析

时间:2019-03-31 12:18:13      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:允许   空间   调用函数   方法   href   限制   code   int   lse   

针对C#中的字段和属性,很多初学者无法区分这两者之间的区别。

字段与属性比较

字段;是一种“成员变量”,一般在类的内部做数据交互使用,占用内存空间。

属性: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技术小趣屋

C#语言中字段和属性相关知识剖析

标签:允许   空间   调用函数   方法   href   限制   code   int   lse   

原文地址:https://blog.51cto.com/6455350/2371912

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!