如果我们将属性定义为public
属性,并且在此属性中我们有一个protected
getter。这是什么意思?如果属性是公共的,为此定义受保护的getter是什么意思?
请看下面的代码:
public ISessionFactory SessionFactory
{
protected get { return sessionFactory; }
set { sessionFactory = value; }
}
答案 0 :(得分:11)
这意味着,getter只能由子类调用。在getter之前的'protected'可以说覆盖了属性的getter部分的'public'。
答案 1 :(得分:2)
在C#中,您可以使getters and setters的访问级别(请参阅access modifiers)与整体属性不同。这是最常见的模式
public class FooObject
{
public String Foo
{
get;
private set;
}
}
这允许实例化FooObject的对象检索Foo的值但不设置它的值。 setter上的private修饰符表示只有FooObject本身具有此功能(不包括使用反射)。
这有两个好处:
通过添加自动属性(无需变量分配get和set值),这允许私有设置属性变量(它是在编译时为您创建的),这样就可以完成,而不必显式创建变量。如果没有这个,你就不能使用自动属性,除非你总是希望get和set函数都是公共的,都是私有的。
它允许一定程度的抽象,使所有方法无论是公共的,私有的还是以其他方式通过属性而不是直接访问私有变量。有关详细信息,请参阅此question。
在您的实例中,其他对象可以设置会话工厂值,但只有从其继承的类可以检索它。大多数情况下,如果一个对象可以设置该值,它也可以检索它,但有些情况下不允许它是有益的。这是允许的,因为set事件不允许比为整个属性定义的访问量更多的访问量。
我能想到的最好的例子是,如果在set事件中,set对象被修改了。例如,如果set事件正在设置连接对象,并且在设置事件上,则添加了连接字符串并打开了与数据库的连接(在我的示例中,我可能会重构代码而不是以这种方式操作,但可能出现类似的事情。)
答案 2 :(得分:0)
protected关键字是成员访问修饰符。受保护的成员可以在声明它的类中访问,也可以从派生自声明该成员的类派生的任何类中访问。
http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx
答案 3 :(得分:0)
protected get意味着只能从此类的继承类访问此属性的getter。该集合被公开,因此可以公开设置此属性。