如果我们继承一个类,私有变量也会继承吗?

时间:2012-05-29 12:04:04

标签: c# oop

如果我们继承一个类,私有变量也会被继承吗?

我知道“是的,变量是继承的,但不能通过类接口直接访问。

我想知道的是如何从子类中访问私有变量/方法

我想说的是私人成员也是继承的。但是如何在不对其进行保护的情况下访问它们。

5 个答案:

答案 0 :(得分:10)

  

我知道“是的,变量是继承的,但不能通过类接口直接访问。”

所以你知道答案。

  

我想知道的是我们如何从子类

访问私有变量/方法

你不能,这就是为什么他们private(而不是protected)。制作private的整个意图使您无法从任何地方访问它们,特别是包括子类。

明确地破坏这种封装几乎总是设计破坏的标志,不应该成为正常代码流的一部分。但是,在某些情况下,您需要推理 about 某些代码,在这些情况下,甚至可能需要检查私有值。反射库允许这样做。以下是使用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)}");
    }
}

答案 1 :(得分:5)

让它们受到保护。对于变量,创建一个子类然后使用的受保护属性。

答案 2 :(得分:4)

您只能使用reflection从派生类访问私有变量/方法。你无法以“自然”的方式访问它们,因为制作它们private的全部意义是将它们隐藏在其他类(包括派生类)中。

答案 3 :(得分:2)

将其设为protected,而不是private成员。

答案 4 :(得分:1)

  

我想知道的是我们如何从子类访问私有变量/方法   .........   但是如何在不对它们进行保护的情况下访问它们。

您可能想尝试使用reflection
这是一个similar question / answer,解释了如何做到这一点。