【发布时间】:2011-10-22 19:54:30
【问题描述】:
这是我已经有一段时间的问题了:
像这样公开公开字段什么时候有意义?
public class SomeClass()
{
public int backing;
}
这样做的缺点(除了激怒 OOP 精英之外)是,如果您需要在此数据之上添加任何逻辑,则必须对 API 进行重大更改。我想这就是精英们所谈论的。
长期以来,Java 和 C# 的最佳实践是使用 getter/setter 或属性来访问字段。
public class SomeClass()
{
private int backing;
public int getBacking()
{
return backing;
}
public void setBacking(int v)
{
backing = v;
}
}
C# 已将其演变为具有自动属性的非常简单的语法:
public class SomeClass()
{
public int Backing { get; set; }
}
懒惰的我仍然觉得这太长了,因为我发现自己做了很多事情。更重要的是,我不确定我知道公共领域在哪里更有意义。
为什么不将公开声明的字段视为幕后的属性(或方法)?这样就不可能激怒脱钩之神,也不会少打字。
public class SomeClass()
{
public int backing; // The same as public int backing { get; set; }
}
对于只包装底层字段的属性,我很确定 JIT 优化了方法调用,因此性能可能不是问题。有什么想法吗? (除了字段名称的正确大小写约定)
编辑:感谢所有回复。我觉得也许不是每个人都理解我的问题。什么时候公共领域比财产更好?为什么是更好的选择?如果唯一的原因是方便(更少的打字和混乱),那么每当遇到公共字段时让编译器生成一个“幕后”属性会有什么缺点。基本上,创建一个真正的公共字段是不可能的(因为它们都是属性)。那会有什么问题呢?谢谢。
【问题讨论】:
-
如果您不想输入整个属性声明,您可以使用属性 sn-p ("prop")
-
如果您使用的是 Visual Studio,请将光标放在您想要属性的位置并键入“prop”,然后按两次 TAB。将生成一个属性模板并突出显示该类型。输入属性的类型,然后按 Tab。输入属性的名称,然后按 Enter。完毕! msdn.microsoft.com/en-us/library/f7d3wz0k(v=VS.90).aspx
标签: c# java oop design-patterns