领域和财产之间有什么区别?

在C#中,什么使字段与属性不同,以及何时应该使用字段而不是属性?


属性公开字段。 字段应该(几乎总是)对类保持私有,并通过get和set属性进行访问。 属性提供了一个抽象级别,允许你改变字段,而不影响它们被使用你的类的东西访问的外部方式。

public class MyClass
{
    // this is a field.  It is private to your class and stores the actual data.
    private string _myField;

    // this is a property. When accessed it uses the underlying field,
    // but only exposes the contract, which will not be affected by the underlying field
    public string MyProperty
    {
        get
        {
            return _myField;
        }
        set
        {
            _myField = value;
        }
    }

    // This is an AutoProperty (C# 3.0 and higher) - which is a shorthand syntax
    // used to generate a private field for you
    public int AnotherProperty{get;set;} 
}

@Kent指出,属性不需要封装字段,他们可以在其他字段上进行计算,或用于其他目的。

@GSS指出,当访问属性时,您还可以执行其他逻辑,例如验证,这是另一个有用的功能。


面向对象的编程原则说,一个类的内部运作应该从外部世界隐藏起来。 如果你公开一个字段,你实际上暴露了该类的内部实现。 因此,我们使用Properties(或Java中的方法)包装字段,使我们能够更改实现而不会根据我们破坏代码。 看到我们可以在属性中放置逻辑,还可以让我们在需要时执行验证逻辑等。 C#3有可能令人困惑的autoproperties的概念。 这允许我们简单地定义属性,C#3编译器将为我们生成私有字段。

public class Person
{
   private string _name;

   public string Name
   {
      get
      {
         return _name;
      }
      set
      {
         _name = value;
      }
   }
   public int Age{get;set;} //AutoProperty generates private field for us
}

一个重要的区别是接口可以有属性而不是字段。 对我来说,这强调了应该使用属性来定义类的公共接口,而字段应该用在类的私有内部工作中。 通常我很少创建公共领域,同样我也很少创建非公有财产。

链接地址: http://www.djcxy.com/p/3909.html

上一篇: What is the difference between a field and a property?

下一篇: CSS '>' selector; what is it?