如何用反射调用泛型类型的属性/字段
本文关键字:属性 字段 泛型类型 何用 反射 调用 | 更新日期: 2023-09-27 17:51:22
考虑以下类
class A<T> where T:new()
{
public static T Instance = new T();
A()
{
}
}
我有两个问题
我需要
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
,但没有成功。解除
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>;