前提,実現したいこと
C#, Unity初心者です.
Unity上で使いまわしたいメソッドを持った以下のような基底クラスを作成しました.
C#
1public class BaseClass { 2 public void SetField(string field_name, dynamic value) { 3 this.GetType().GetField(field_name).SetValue(this, value); 4 } 5}
リフレクションを介してfieldにアクセスするmethodを持ちますが,
このBaseClass自身はfieldを持ちません.
そして,このクラスを継承した派生クラスを以下のように作成しました.
C#
1public class DerivedClass : BaseClass { 2 public int public_value; 3 private int private_value; 4 protected int protected_value; 5 public readonly int readonly_value; 6}
fieldをいくつか持ち,変数からfieldにアクセスすることを想定してBaseClassを継承しています.
そして次の例のようにDerivedClassを使っていこうとしたのですが,
基底クラスから派生クラスの隠蔽されたfieldにはアクセスできませんでした.
C#
1 var instance = new DerivedClass(); 2 instance.SetField("public_value", 10); // ok 3 instance.SetField("private_value", 10); // error 4 instance.SetField("protected_value", 10); // error 5 instance.SetField("readonly_value", 10); // error 6 7 instance.public_value = 100000000000; // public_valueを持ちたくない 8 9 // 実際の運用の際にはfield_nameは動的に指定します.
先述の通りBaseClassを使いまわしたい,
DerivedClass2,DerivedClass3を実装予定ですので,
DerivedClassにSetFieldを記述したくありません.
かといってDerivedClassのfieldをpublicにしたくはありません.
基底クラスからアクセスできるが,基底クラスと自身以外には見えないfieldの実装方法や,
それに似た運用をできる方法をそ教授いただきたいです.
よろしくお願いします.
バージョン
- Unity: 2020.3.13f1
- .NET: 4.x
回答1件
あなたの回答
tips
プレビュー