如果我们继承一个类,私有变量也会被继承吗?
我知道“是的,变量是继承的,但不能通过类接口直接访问。 ”
我想知道的是我们如何从子类访问私有变量/方法
我想说的是私有成员也是继承的。但是如何在不保护它们的情况下访问它们。
我知道“是的,变量是继承的,但类接口不能直接访问”。
那么你就知道答案了。
我想知道的是我们如何从子类访问私有变量/方法
你不能,这就是为什么他们是private
(而不是说,protected
)。制作它们的全部目的private
是让您无法从任何地方访问它们,特别是包括子类。
明确打破这种封装几乎总是设计损坏的标志,不应该成为正常代码流的一部分。但是,在某些情况下,您需要对某些代码进行推理,在这些情况下,甚至可能需要检查私有值。反射库允许这样做。System.Reflection
这是一个使用这些功能的简单示例:
class Widget {
private readonly string identifier;
public Widget(string identifier) {
this.identifier = identifier;
}
}
class MainClass {
public static void Main(string[] args) {
var widget = new Widget("my_test_widget");
var type = widget.GetType();
var field = type.GetField("identifier",
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic);
Console.WriteLine($"{field} = {field.GetValue(widget)}");
}
}
让他们受到保护。对于变量,创建一个子类然后使用的受保护属性。
您只能使用反射从派生类访问私有变量/方法。您不能以“自然”的方式访问它们,因为制作它们的全部private
目的是对其他类(包括派生类)隐藏它们。
使其成为protected
财产而不是private
成员。