1

次のクラスを検討してください

class A<T> where T:new()
{
  public static T Instance = new T();
  A()
  {
  }
}

2つの質問があります

  1. InstanceReflection付きのオブジェクトが必要です。私はフォローしてみました

    var type = typeof(A<int>);  
    // var type = typeof(A<>).MakeGenericType(typeof(int)); // Also tried this
    
    var instanceMember1 = type.GetMember("Instance",  BindingFlags.Static );  // returns null
    var instanceMember2 = type.GetField("Instance",  BindingFlags.Static ); // returns null
    

    Instanceまた、プロパティに変更して呼び出しようGetPropertyとしましたが、成功しませんでした。

  2. new()制約を削除してconstructorプライベートにした後、リフレクションを介してプライベート(パラメーターなし)コンストラクターを呼び出す方法。

4

1 に答える 1

1

のフラグに追加BindingFlags.PublicしますGetField

var instanceMember1 = type.GetField("Instance", BindingFlags.Static |
    BindingFlags.Public);

プライベートコンストラクターを呼び出すには:

var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, 
    null, Type.EmptyTypes, new ParameterModifier[0]);
var instance = ctor.Invoke(null) as A<int>;
于 2013-01-11T03:58:31.910 に答える