クラスを継承すると、プライベート変数も継承されますか?
「はい、変数は継承されますが、クラス インターフェイスから直接アクセスすることはできません。」
私が知りたいのは、子クラスからプライベート変数/メソッドにアクセスする方法です
私が言おうとしているのは、プライベートメンバーも継承されているということです.しかし、それらを保護せずに同じメンバーにアクセスする方法.
「はい、変数は継承されていますが、クラス インターフェイスから直接アクセスすることはできません」ということはわかっています。
それで答えがわかります。
私が知りたいのは、子クラスからプライベート変数/メソッドにアクセスする方法です
あなたはできませ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