私有类级变量是否继承?

时间:2010-07-30 16:47:42

标签: c# .net

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

7 个答案:

答案 0 :(得分:15)

是的,但是它们无法访问,所以看着它你可以诚实地说它们不是遗传的。但是,他们确实是

答案 1 :(得分:12)

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

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:4)

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

答案 4 :(得分: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 :(得分:3)

是的,它们是继承的,但编译器禁止访问它们。 Aalas,你仍然可以通过反思或通过你漂亮的AMethod()技巧得到它们 - 不推荐 -

答案 6 :(得分:3)

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

  1. 声明他们受保护而不是私人
  2. 编写一个返回该私有变量值的公共方法

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