【ハルシオンブログ】リフレクションを使って別クラスのprivate変数にアクセスする。
こんにちは。
大坂です。
ちょっとしたテストをしたいときなんかにprivate変数の値を変更したいときがあったりします。
ブレークポイント設定したり、TestRunner使ったりでもできるとは思いますが、
今回はリフレクションを使用して変更してみました。
変更したいprivate変数を持つクラス
private変数を変更するクラス
結果


ちゃんと値が設定されてますね。
毎回止めてやるのと面倒な時があるので、こんな方法でもできますよという紹介でした。
ではまたノシ
大坂です。
ちょっとしたテストをしたいときなんかにprivate変数の値を変更したいときがあったりします。
ブレークポイント設定したり、TestRunner使ったりでもできるとは思いますが、
今回はリフレクションを使用して変更してみました。
変更したいprivate変数を持つクラス
public class Test_1 : MonoBehaviour
{
private int test;
}
private変数を変更するクラス
public class Test_2 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Test_1 test_1 = FindObjectOfType<Test_1>();
// タイプの取得
Type t = test_1.GetType();
// private変数へのアクセス用
FieldInfo f = t.GetField(
"test",
BindingFlags.NonPublic |
BindingFlags.Instance |
BindingFlags.GetField |
BindingFlags.FlattenHierarchy |
BindingFlags.SetField
);
// private変数に値の設定
f.SetValue(test_1, 10);
Debug.Log(f.GetValue(test_1));
}
}
結果


ちゃんと値が設定されてますね。
毎回止めてやるのと面倒な時があるので、こんな方法でもできますよという紹介でした。
ではまたノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】Dictionaryからデータを取り出す時はこうやって取り出すといいらしいよ? | 【ハルシオンブログ】Enumからランダムで1つを選択する方法。 »
コメント
| h o m e |