teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

回答社さんからの指摘箇所を修正(誤記でした)

2020/03/18 20:43

投稿

smpik
smpik

スコア12

title CHANGED
File without changes
body CHANGED
@@ -45,7 +45,7 @@
45
45
  .GetField("s", BindingFlags.Instance, BindingFlags.NonPublic)
46
46
  .GetValue(classInstance);
47
47
  var inputForTest = structInstance.GetType()
48
- .GetField("member1", BindingFlags.Instance, BindingFlags.NonPublic)
48
+ .GetField("member1", BindingFlags.Instance, BindingFlags.Public)
49
49
  inputForTest.SetValue(structInstance,true);
50
50
 
51
51
  var targetMethod = typeof(testTargetScript)

1

コードを追記しました。

2020/03/18 20:43

投稿

smpik
smpik

スコア12

title CHANGED
File without changes
body CHANGED
@@ -6,6 +6,7 @@
6
6
  privateな構造体のメンバへの方法がわかりません。教えてください。。
7
7
 
8
8
  ### 該当のソースコード
9
+ ```c#
9
10
  // testTargetScript.cs(テストしたい関数をもってるスクリプト)
10
11
  public class testTargetScript
11
12
  {
@@ -27,20 +28,39 @@
27
28
 
28
29
  ~略~
29
30
 
31
+ s.member = false;
30
32
  }
31
33
  }
32
34
  }
35
+ ```
33
36
 
37
+ ```c#
34
38
  // testCode.cs
35
39
  public class testCode
36
40
  {
37
41
  public testTestTargetMethod()
38
42
  {
43
+ var classInstance = new testTargetScript();
44
+ var structInstance = typeof(testTargetScript)
45
+ .GetField("s", BindingFlags.Instance, BindingFlags.NonPublic)
46
+ .GetValue(classInstance);
47
+ var inputForTest = structInstance.GetType()
48
+ .GetField("member1", BindingFlags.Instance, BindingFlags.NonPublic)
49
+ inputForTest.SetValue(structInstance,true);
50
+
51
+ var targetMethod = typeof(testTargetScript)
52
+ .GetMethod("testTargetMethod", BindingFlags, BindingFlags.NonPublic)
53
+ .Invoke(classInstance,null);
39
- //ここでtestTargetScript内のs.member1へアクセスしたいです。
54
+ //このメソッドコールによってs.memberがfalseに書き換わるはず!
55
+
56
+ bool result = (bool)inputForTest.GetValue(structInstance);
57
+ //↑このresultに格納される値がfalseにならない。。。
40
58
  }
41
59
  }
60
+ ```
42
61
 
43
62
 
63
+
44
64
  ### 試したこと
45
65
  privateな変数にアクセスする際は下記のように行いました。
46
66
  System.Type typeOfTargetClass = typeof(testTargetScript);//アクセスしたいメソッドを持つクラスの型を取得