0

クラスを継承すると、プライベート変数も継承されますか?

はい、変数は継承されますが、クラス インターフェイスから直接アクセスすることはできません。

私が知りたいのは、子クラスからプライベート変数/メソッドにアクセスする方法です

私が言おうとしているのは、プライベートメンバーも継承されているということです.しかし、それらを保護せずに同じメンバーにアクセスする方法.

4

5 に答える 5

10

「はい、変数は継承されていますが、クラス インターフェイスから直接アクセスすることはできません」ということはわかっています。

それで答えがわかります。

私が知りたいのは、子クラスからプライベート変数/メソッドにアクセスする方法です

あなたはできませprivateprotected。それらを作成する全体的な意図は、特に子クラスを含め、どこ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)}");
    }
}
于 2012-05-29T12:05:26.563 に答える
5

それらを保護してください。変数については、子クラスが使用する保護されたプロパティを作成します。

于 2012-05-29T12:06:02.967 に答える
4

リフレクションを使用して、派生クラスからのみプライベート変数/メソッドにアクセスできます。privateそれらを作成する全体のポイントは、他のクラス (派生クラスを含む) からそれらを隠すことであるため、「自然な」方法でそれらにアクセスすることはできません。

于 2012-05-29T12:07:28.013 に答える
2

メンバーでprotectedはなくプロパティにします。private

于 2012-05-29T12:05:27.393 に答える
1

私が知りたいのは、子クラスからプライベート変数/メソッドにアクセスする方法........しかし、それらを保護せずに同じものにアクセスする方法です。

リフレクションの使用を試してみてください。これを行う方法を説明する
同様の質問/回答があります。

于 2012-05-29T12:07:46.583 に答える