使用C#的get set属性被认为是好习惯吗?

Ale*_*lex 10 .net c#

我的问题很简单,就是使用C#的get set属性被认为是好的,甚至比编写getter和setter方法更好?使用这些属性时,是否必须将类数据成员声明为公共?我问这是因为我的教授说数据成员永远不应该被公开,因为它被认为是不好的做法.

这个....

class GetSetExample
{
    public int someInt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

vs 这......

class NonGetSetExample
{
    private int someInt;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

感谢大家!你的所有答案都帮助了我,我适当地向你投了你的答案.

Nat*_*C-K 15

这个:

class GetSetExample
{
    public int someInt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

真的是这样的:

class GetSetExample
{
    private int _someInt;
    public int someInt {
        get { return _someInt; }
        set { _someInt = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

get; set;语法是只为这一个方便的速记时getter和setter没有做什么特别的,你可以使用.

因此,您没有公开公共成员,您正在定义私有成员并提供get/set方法来访问它.


Zac*_*ing 7

是的,由于多种原因,成员通常不应在良好的设计中公开宣布.想想稍后继承该类的OOP.有点难以覆盖一个字段.:-)它还可以防止你直接访问内部.

简单化得到; 组; 设计是在C#2.0中引入的.它与支持它的私有成员声明所有内容基本相同(在Reflector等工具中反编译它).

public int someInt{get;set;} 
Run Code Online (Sandbox Code Playgroud)

直接等于

private int m_someInt;
public int someInt{
  get { return m_someInt; }
  set { m_someInt = value; }
} 
Run Code Online (Sandbox Code Playgroud)

关于使用简化的getter/setter的重要一点是,当你想稍后用更多的内容填充实现时,你不会破坏ABI的兼容性.

不要担心getter/setter会通过间接方式降低代码的速度.JIT有一个称为内联的东西,使用getter/setter和直接字段访问一样高效.


Man*_*ero 7

是.数据成员应该是私有的,自动属性允许它并以正确的方式提供公共访问.

但你应该小心.理解上下文非常重要.在线程应用程序中,更新一个属性跟随另一个相关属性可能会对一致性有害.在这种情况下,以适当方式更新两个私有数据成员的setter方法更有意义.