• c#中的属性和字段


    首先

    property和field分别是什么:

        class Person
        {
            private string name;  // the name field
    
            public string Name    // the Name property
            {
    
                get
                {
    
                    return name;
    
                }
                set
                {
                    name = value;
                }
    
            }
        }

    根据Effective c#的第一条原则:Always use properties instead of accessible data members

    出于以下几点原因,请在设计类时,尽可能的使用属性,而不是成员。
    1、.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计时说明等很多数据成员不被支持的内容。看看.net里的属性面板,你会明白的。
    2、数据安全性检测;
    属性本质上是两个函数,只是因为C#的特殊语法,但我们可以像访问成员一样的访问它。因此我们可以在属性设计上添加更多更灵活的内容,对属性进行管理。其中对属性数据的检测是其中之一。

    3、线程同步
    对实例的属性可以进行线程同步,而与访问者无关。例如:
    public string Name{
    set{
    lock(this){
    //…
    }
    }
    }
    当然,你完全可以在类的外面进行线程同步,但那样的工作量远比上面的方法大得多。推荐你使用上面的方法进行线程同步,如果要对静态成员同步,请用lock(typeof(MyClass))方法。

    4、属性可以是抽象的,而数据成员不能是抽象的,这为我们设计出兼容性更强,扩展性更强的类提供了好的解决方案。
    5、属性可以以接口的形式表现。接口里不能定义数据成员,这在一定程度上限制我们的设计。请用属性来解决这个问题吧。
    6、基于属性的索引。索引器是C#语法的特殊内容,而索引器正是通过属性来完成的,如果你想为你的类添加一个索引器,除了用属性你还能用什么呢?
    7、最后一点,也是比较重要的。不要直接把公共成员转化成属性。MSIL相关。

    最后一点,根据自己的需要决定当前声明的为property或是field

        public class ConcreteObserver : Observer
        {
            private string name;
            private string observerState;
            private ConcreteSubject subject;
            public ConcreteSubject Subject
            {
                get { return subject; }
                set { subject = value; }
            }
            public ConcreteObserver(ConcreteSubject subject, string name)
            {
                this.subject = subject;
                this.name = name;
            }
        }
  • 相关阅读:
    利用if else判断几点是什么时间段
    【UML】活动图介绍
    【UML】类图介绍
    jQuery Ajax跨域问题简易解决方案
    ASP.NET MVC @Html.Label的问题
    Mysql Show ProcessList命令
    【ASP.NET MVC 学习笔记】- 20 ASP.NET Web API
    【ASP.NET MVC 学习笔记】- 19 REST和RESTful Web API
    【ASP.NET MVC 学习笔记】- 18 Bundle(捆绑)
    【ASP.NET MVC 学习笔记】- 17 Model验证
  • 原文地址:https://www.cnblogs.com/nygfcn1234/p/3410053.html
Copyright © 2020-2023  润新知