【问题标题】:Are private class-level variables inherited?私有类级变量是否继承?
【发布时间】:2011-03-23 08:44:55
【问题描述】:

只是想知道私有类级变量是否继承?在 C# 中

【问题讨论】:

标签: c# .net


【解决方案1】:

是的,但它们是不可访问的,所以看它你可以诚实地说它们不是继承的。但是是的,他们确实是

【讨论】:

    【解决方案2】:

    这取决于语言,但一般来说,不可以 - 它们只能在定义它们的类中访问。

    【讨论】:

    • 但它们通常是实例的一部分(即使语言阻止访问)。
    【解决方案3】:

    它们是继承的,但关键字“private”意味着只有声明它们的类才能访问它们。这不包括子类。但是,因为子类的实例包含它自己的超类,所以它们仍然存在。您只是无法直接看到它们。

    如果要查找只有声明类及其子类可以看到的字段,您可以使用关键字“protected”而不是“private”,这应该提供您正在寻找的功能。

    【讨论】:

      【解决方案4】:

      它们是,尽管它们不能直接访问。

      public class BaseClass
      {
          private const int _aNumber = 5;
          public int ReturnANumber() { return _aNumber; }
      }
      
      public class DClass : BaseClass
      {
          public void SomeMethod()
          {
              // This is indirectly accessing a private implemented in the class
              // this derives from, but existing inside this class.
              int numbery = this.ReturnANumber();
          }
      }
      
      public class Whatever
      {
          public void AMethod(DClass someDClass)
          {
              int thisIsNumberFive = someDClass.ReturnANumber();
          }
      }
      

      【讨论】:

        【解决方案5】:

        它们在某种意义上是遗传的。为它们分配了内存空间,它们“存在”在子类实例中。但是,子类不能访问变量本身。 (如果希望子类访问基类变量,请使用protected 而不是private。)

        这是必需的 - 基类中的方法需要能够设置私有变量(否则将没有用处)。这些方法也可用于子类的实例——事实上,子类实例应该能够被视为基类的实例(需要满足Liskov substitution principle)。如果私有变量没有被继承,基类方法的行为将会改变或中断。

        【讨论】:

          【解决方案6】:

          是的,它们是继承的,但编译器禁止访问它们。唉,你仍然可以通过反射或你的 AMethod() 技巧来获得它们——不推荐。

          【讨论】:

            【解决方案7】:

            它们被继承但不可访问,或者只能在声明它们的类中访问。您可以通过两种方式在子类中访问它们

            1. 声明它们是受保护的而不是私有的

            2. 编写一个返回私有变量值的公共方法

              但是没有办法直接访问子类中的私有变量。

            【讨论】:

              猜你喜欢
              • 2012-05-16
              • 2014-11-17
              • 2014-04-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-09-19
              • 2012-12-03
              • 2012-12-25
              相关资源
              最近更新 更多