代码之家  ›  专栏  ›  技术社区  ›  masoud ramezani

这意味着什么?〔C〕

  •  4
  • masoud ramezani  · 技术社区  · 16 年前

    如果我们将一个属性定义为 public 在这片土地上我们有 protected 吸气剂。这意味着什么?如果属性是公共的,那么为其定义受保护getter意味着什么? 请参见以下代码:

        public ISessionFactory SessionFactory
        {
            protected get { return sessionFactory; }
            set { sessionFactory = value; }
        }
    
    4 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    在C中,你可以 getters and setters 具有访问级别(请参见 access modifiers )不同于整体属性。这是最常见的模式

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

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

    这有两个好处:

    1. 通过添加自动属性(不需要变量来分配get和set值),这允许在不必显式创建变量的情况下对属性变量进行私有设置(它是在编译时为您创建的)。如果没有这个,您就不能使用自动属性,除非您总是希望get-and-set函数是所有公共的、所有私有的等等。

    2. 它允许一个抽象级别,这样所有方法(无论是公共的、私有的还是其他的)都可以通过属性,而不是直接访问私有变量。看到这个 question 更多信息。

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

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

        2
  •  11
  •   Danvil    16 年前

    这意味着getter只能由子类调用。例如,getter前面的“protected”覆盖属性getter部分的“public”。

        3
  •  0
  •   Johnno Nolan    16 年前

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

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

        4
  •  0
  •   Jhonny D. Cano -Leftware-    16 年前

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