只是想知道私有类级变量是否继承?在C#
答案 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)
它们是继承的但不可访问,或者只能在声明它们的类中访问它们。您可以通过两种方式在子类中访问它们
编写一个返回该私有变量值的公共方法
但是你无法直接访问子类中的私有变量。