如何用反射调用泛型类型的属性/字段



考虑以下类

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

我有两个问题

  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私有后,如何通过反射调用私有(无参数)构造函数

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>;

相关内容

  • 没有找到相关文章

最新更新