在以前学习中知道有一个类的属性和方法,但是学习了c#之后还有一个叫字段的,刚开始我以为字段和属性是同一回事,可是到我学习了Property之后才知道,这是不同的,那么他们的不同点是什么?
    请高手指教一下。

解决方案 »

  1.   

    字段可以有静态的,但是属性必须是实例的
    其实有些属性能实现的功能,字段也能实现,但是不鼓励用字段来实现,因为OOP和编程的一个原则就是数据封装,意味着我们不应该将字段的类型以公开的方式提供给外界。
    还有一些原因,例如我们可能希望访问一个字段的同时执行一些额外的操作,或者缓存某个数值,或者延迟创建某个内部对象。
    我们也可能希望对字段的访问是线程安全的。或者字段可能只是一个逻辑表示,其真正的值并不是以字节的形式存放在内存中,而是通过某种算法计算得来的
    所以建议将所有的字段访问限制为私有
      

  2.   

       private int id;//字段    public int ID//属性
        {
            get { return id; }
            set { id = value; }
        }
      

  3.   

    属性和字段可以访问对象中包含的数据。这个对象数据可以用于区分不同的对象,因为同一类的不同对象在属性和字段中存储了不同的值。下面介绍另一个术语。包含在对象中的不同数据统称为对象的状态。假定一个对象类表示一杯咖啡,叫做CupOfCoffee。在实例化这个类(即创建这个类的对象)时,必须提供对类有意义的状态。此时可以使用属性和字段,让代码能够通过该对象设置要使用的咖啡品牌,咖啡中是否加牛奶或方糖,咖啡是否即溶等。给定的咖啡杯对象也有一个指定的状态,例如Columbian filter coffee with milk and two sugars。
    字段和属性都可以输入,所以可以把信息存储在字段和属性中,作为string变量、int变量等。但是,属性与字段是不同的,因为属性不能直接访问数据。对象能让用户不考虑数据和细节,不需要在属性中用一对一的方式表示。如果在CupOfCoffee实例中使用一个字段表示方糖的数量,用户就可以在该字段中放置自己喜欢的值,其取值范围仅由存储信息的类型来限制。例如,如果使用int来存储这个数据,用户就可以使用-2147483648~2147483647之间的任意值,显然,并不是所有的值都是有意义,尤其是负值,一些较大的正值将需要非常大的对象。但如果使用一个属性来表示,就可以限制这个值,例如为0~2之间的一个数字。一般情况下,在访问状态时最好提供属性,而不是字段,因为这样可以更好地控制整个过程,这个选择不会影响使用对象实例的代码,因为使用属性和字段的语法是相同的。