轩辕kuku
论坛版主
论坛版主
  • UID14
  • 粉丝6
  • 关注1
  • 发帖数78
  • 社区居民
  • 原创写手
阅读:887回复:0

C#基础开发——变量和属性定义(2)

楼主#
更多 发布于:2016-05-14 20:20
上一篇谈到变量数据类型,数据分为值类型和引用类型,介绍了两者的区别,这篇将主要说一下变量和属性的区别。刚开始做Unity开发是并没有注意到类
里面属性和变量之间的区别,反正public之后都能够在外面调用。

概念:属性和变量都提供数据存储,变量是字段,属性则还会提供Get和Set访问器。一般把所有的字段都设置为私有字段,如果要暴露它们,则把它们封装成属性,这也是微软推荐的方式。具体使用区别可以参考:http://www.cnblogs.com/netlyf/archive/2010/12/20/1910977.html

如果满足下面几个条件,那么我们便可以大胆地使用公共字段:1. 允许自由读写;
                                                                                                  2. 取值范围只受数据类型约束而无其他任何特定限制;
                                                                                                  3. 值的变动不需要引发类中其它任何成员的相应变化;
属性的使用条件则恰好跟变量相反,只要满足下面任何一个条件,就应该使用属性:
1. 要求字段只能读或者只能写;
如:
private string _name = string.Empty;
public string Name{
    get{
             return _name;//只读,不可写入
       }
}
或者
public string Name
{
set{
       _name =value;//之可以写入,不可获取
   }
}

2. 需要限制字段的取值范围;如:
private int _number = 0;
public int Number
{
      set {
                 if(value>0&&value<6)
                      _number = value;
                else
                     Debug.Log("请输入大于0且小于6的数");
              }
     get
           {
                   return _number;
           }
}


3. 在改变一个字段的值的时候希望改变对象的其它一些状态;
如当你被鞭子抽到,你就会叫一声,有没有被抽到用一个bool类型的属性。
class People
{
     private bool _isWhip =false;  //是否被抽打
     public bool IsWhip
     {
       set {
                 _isWhip =value;
                 if(_isWhip )
                        Scream();//尖叫函数
             }
     }
    
        private void Scream()
        {
        }
}

看完第三个好处,有没有发现这个功能和C#里面的委托事件有点像。
public delegate  void ScreamDelegate();
public  event ScreamDelegate ScreamEvent;

总结:虽然在实际项目的开发过程中,公共字段和属性在合适的条件下都可以使用,但是我们应该尽可能的使用属性(property),而不是数据成员(field),这样方便自己类的封装和安全性。

图片:68_6_5c30f250d2c870a.jpg

欢迎分享

游客

返回顶部