【发布时间】:2011-02-09 03:30:12
【问题描述】:
如果我们将一个属性定义为public 属性并且在这个属性中我们有一个protected getter。这是什么意思?如果财产是公共的,那么为此定义受保护的吸气剂意味着什么?
请看下面的代码:
public ISessionFactory SessionFactory
{
protected get { return sessionFactory; }
set { sessionFactory = value; }
}
【问题讨论】:
-
这是允许的,虽然 getter 的可见性低于 setter 也是非常奇怪和出乎意料的。
-
我不明白为什么会奇怪或出乎意料。如果公开 getter 并没有增加任何价值,那为什么要这样做呢?但是,该类可能需要外部输入,在这种情况下,拥有一个公共设置器非常有意义。将其视为方法参数。您可以设置参数,但除非该方法实际返回它们,否则您无法取回它们。当然,获取它们是没有意义的,如果您是调用者,您已经可以访问它们。如果您不是来电者,则可能有充分的理由您无权访问。封装是好的OOP。
-
@macke,在这种情况下,我更喜欢 Set 或 Initialize 方法,因为属性的语义意味着可观察性。如果我可以设置 Instance.X = value,我希望能够在之后立即 Assert(Instance.X == value)(如果没有异常执行设置)。
-
很公平。除了约定之外,是否有任何实际原因为什么应该使用 set 方法来支持只写属性,因为唯一可辨别的区别是语法(当然还有接口)?如果需要设置多个属性,则使用方法当然会更有意义,但我认为这是完全不同的情况。
标签: c# oop public protected getter