这是什么意思? [C#]

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

    public ISessionFactory SessionFactory
    {
        protected get { return sessionFactory; }
        set { sessionFactory = value; }
    }
最佳答案
在C#中,您可以拥有与整体属性不同的访问级别(参见access modifiers)的getters and setters.这是最常见的模式

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

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

这有两个好处:

>通过添加自动属性(无需变量分配get和set值),这允许私有设置属性变量(它是在编译时为您创建的),这样就可以完成,而无需显式创建变量.如果没有这个,你就不能使用自动属性,除非你总是希望get和set函数都是公共的,所有私有的等等.
>它允许一定程度的抽象,使所有方法无论是公共的,私有的还是以其他方式通过属性而不是直接访问私有变量.有关更多信息,请参见question.

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

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

转载注明原文:这是什么意思? [C#] - 代码日志