这是什么意思? [C#]

时间:2010-04-17 12:51:21

标签: c# oop public protected getter

如果我们将属性定义为public属性,并且在此属性中我们有一个protected getter。这是什么意思?如果属性是公共的,为此定义受保护的getter是什么意思? 请看下面的代码:

    public ISessionFactory SessionFactory
    {
        protected get { return sessionFactory; }
        set { sessionFactory = value; }
    }

4 个答案:

答案 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本身具有此功能(不包括使用反射)。

这有两个好处:

  1. 通过添加自动属性(无需变量分配get和set值),这允许私有设置属性变量(它是在编译时为您创建的),这样就可以完成,而不必显式创建变量。如果没有这个,你就不能使用自动属性,除非你总是希望get和set函数都是公共的,都是私有的。

  2. 它允许一定程度的抽象,使所有方法无论是公共的,私有的还是以其他方式通过属性而不是直接访问私有变量。有关详细信息,请参阅此question

  3. 在您的实例中,其他对象可以设置会话工厂值,但只有从其继承的类可以检索它。大多数情况下,如果一个对象可以设置该值,它也可以检索它,但有些情况下不允许它是有益的。这是允许的,因为set事件不允许比为整个属性定义的访问量更多的访问量。

    我能想到的最好的例子是,如果在set事件中,set对象被修改了。例如,如果set事件正在设置连接对象,并且在设置事件上,则添加了连接字符串并打开了与数据库的连接(在我的示例中,我可能会重构代码而不是以这种方式操作,但可能出现类似的事情。)

答案 2 :(得分:0)

protected关键字是成员访问修饰符。受保护的成员可以在声明它的类中访问,也可以从派生自声明该成员的类派生的任何类中访问。

http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx

答案 3 :(得分:0)

protected get意味着只能从此类的继承类访问此属性的getter。该集合被公开,因此可以公开设置此属性。