1

考虑跟班

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

我有 2 个问题

  1. 我需要Instance带有反射的对象。我试过以下

    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 回答