1

クラスで次のように宣言すると:

private int? MyID = null;

そして、リフレクションを介してアクセスしようとしても、見つけることができません。つまり、以下は gProp を null に設定します。

gType = refObj.GetType();
gProp = gType.GetProperty(PropertyName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

ただし、代わりに次のように宣言すると、正常に機能します。

private int? MyID { get; set; }

私はこれが事実であることをすでに知っていたので、これは私にとってまったく驚くべきことではありません。ただし、確認したかったのです。最初の宣言をリフレクションで機能させる方法はありますか、またはリフレクションが機能するためにゲッター/セッターを提供する必要がありますか?

ありがとう!

4

5 に答える 5

9

これはプロパティではなくフィールドであるため、 によって返されませんGetProperty。メソッドを使用する必要がありますGetField

于 2012-09-18T13:31:40.380 に答える
5

フィールドGetFieldには ( の代わりに) メソッドが必要です。GetProperty

Type.GetFields メソッド 指定されたバインド制約を使用して、指定されたフィールドを検索します。

サンプル

// your instance
MyObject instance = new MyObject();
// get type information
Type myType = typeof(MyObject);
// get field information
FieldInfo fieldInfo = myType.GetField("MyID");
// set some value
fieldInfo.SetValue(instance, 123);
// get field value
var value = fieldInfo.GetValue(instance);
// value is 123

詳しくは

于 2012-09-18T13:32:21.107 に答える
1

違いがあります

private int? MyID = null;

private int? MyID { get; set; } 

1 つ目はフィールドで、2 つ目はプロパティです。

Type.GetField()リフレクションを介してフィールドを見つけようとするときは、このメソッドを使用する必要があります。

于 2012-09-18T13:34:54.600 に答える
0

クラス内の変数にアクセスするためのプロパティを作成する必要があります。したがって、次のようなプロパティを手動で作成します

private int? MyID { get { return _myID;} }

以下のコードは、C# の Auto プロパティであるため機能します。

private int? MyID { get; set; }

http://msdn.microsoft.com/en-us/library/bb384054.aspxを参照してください

于 2012-09-18T13:33:19.063 に答える
0

私のロジックは、最初は単純な変数であり、2 番目は get/set があるためプロパティであるため、「GetProperty」が機能するにはプロパティである必要があると述べています。変数が必要な場合は、GetField が必要です

于 2012-09-18T13:36:52.057 に答える