4

如果我们将一个属性定义为public属性,并且在这个属性中我们有一个protectedgetter。这是什么意思?如果财产是公共的,那么为此定义受保护的吸气剂意味着什么?请看下面的代码:

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

4 回答 4

11

这意味着,getter 只能由子类调用。可以说,getter 之前的“protected”覆盖了属性的 getter 部分的“public”。

于 2010-04-17T12:53:08.247 回答
2

在 C# 中,您可以拥有与整体属性不同的访问级别(请参阅访问修饰符)的getter 和 setter 。这是最常见的模式

public class FooObject
{
    public String Foo 
    {
      get;
      private set;
    }
}

这允许实例化 FooObject 的对象检索 Foo 的值但不设置它的值。setter 上的 private 修饰符表示只有 FooObject 本身具有此能力(不包括使用反射)。

这样做有两个好处:

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

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

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

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

于 2010-04-17T13:43:46.907 回答
0

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

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

于 2010-04-17T12:54:16.833 回答
0

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

于 2010-04-17T12:54:35.563 回答