【发布时间】:2011-03-23 08:44:55
【问题描述】:
只是想知道私有类级变量是否继承?在 C# 中
【问题讨论】:
只是想知道私有类级变量是否继承?在 C# 中
【问题讨论】:
是的,但它们是不可访问的,所以看它你可以诚实地说它们不是继承的。但是是的,他们确实是
【讨论】:
这取决于语言,但一般来说,不可以 - 它们只能在定义它们的类中访问。
【讨论】:
它们是继承的,但关键字“private”意味着只有声明它们的类才能访问它们。这不包括子类。但是,因为子类的实例包含它自己的超类,所以它们仍然存在。您只是无法直接看到它们。
如果要查找只有声明类及其子类可以看到的字段,您可以使用关键字“protected”而不是“private”,这应该提供您正在寻找的功能。
【讨论】:
它们是,尽管它们不能直接访问。
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();
}
}
【讨论】:
它们在某种意义上是遗传的。为它们分配了内存空间,它们“存在”在子类实例中。但是,子类不能访问变量本身。 (如果希望子类访问基类变量,请使用protected 而不是private。)
这是必需的 - 基类中的方法需要能够设置私有变量(否则将没有用处)。这些方法也可用于子类的实例——事实上,子类实例应该能够被视为基类的实例(需要满足Liskov substitution principle)。如果私有变量没有被继承,基类方法的行为将会改变或中断。
【讨论】:
是的,它们是继承的,但编译器禁止访问它们。唉,你仍然可以通过反射或你的 AMethod() 技巧来获得它们——不推荐。
【讨论】:
它们被继承但不可访问,或者只能在声明它们的类中访问。您可以通过两种方式在子类中访问它们
声明它们是受保护的而不是私有的
编写一个返回私有变量值的公共方法
但是没有办法直接访问子类中的私有变量。
【讨论】: