我的问题很简单,就是使用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方法来访问它.
是的,由于多种原因,成员通常不应在良好的设计中公开宣布.想想稍后继承该类的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和直接字段访问一样高效.
是.数据成员应该是私有的,自动属性允许它并以正确的方式提供公共访问.
但你应该小心.理解上下文非常重要.在线程应用程序中,更新一个属性跟随另一个相关属性可能会对一致性有害.在这种情况下,以适当方式更新两个私有数据成员的setter方法更有意义.