如何从 属性 值中反映出 class?
How to reflect a class from its property value?
假设,我们有这三种类型:
class class1{ public static int serial=1};
class class2{ public static int serial=2};
class class3{ public static int serial=3};
序列号可以是静态字段或 属性 如:
class class1{ public override byte serial {get{return 0x01; }}};
在我的应用程序中,我从某处接收到序列值,需要反映适当的 class。是否可以使用该项目的序列字段来反映这些类型中的任何一种?我是否必须在序列号和 class 名称之间创建映射 table 才能找到相关的 class 名称进行反射?或者 System.Reflection 允许我直接从其 字段或 属性 值 中找到 class?我认为这是更好的方法,因为我们不需要为新类型编辑 table。
感谢您的帮助。
是的,你可以通过字段的值来获取类型:
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(x => x.GetField("serial") != null &&
(int)x.GetField("serial").GetValue(null) == 2)
如果类型是在另一个程序集中而不是当前正在执行的程序集中定义的,那么您需要首先使用 Assembly
class 中的方法获取该程序集(如 Load
、LoadFrom
, LoadFile
).
而且字段应该是 static
才能工作,否则你需要一个实例来获取字段值并将其传递给 GetValue
方法而不是 null.
假设,我们有这三种类型:
class class1{ public static int serial=1};
class class2{ public static int serial=2};
class class3{ public static int serial=3};
序列号可以是静态字段或 属性 如:
class class1{ public override byte serial {get{return 0x01; }}};
在我的应用程序中,我从某处接收到序列值,需要反映适当的 class。是否可以使用该项目的序列字段来反映这些类型中的任何一种?我是否必须在序列号和 class 名称之间创建映射 table 才能找到相关的 class 名称进行反射?或者 System.Reflection 允许我直接从其 字段或 属性 值 中找到 class?我认为这是更好的方法,因为我们不需要为新类型编辑 table。
感谢您的帮助。
是的,你可以通过字段的值来获取类型:
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(x => x.GetField("serial") != null &&
(int)x.GetField("serial").GetValue(null) == 2)
如果类型是在另一个程序集中而不是当前正在执行的程序集中定义的,那么您需要首先使用 Assembly
class 中的方法获取该程序集(如 Load
、LoadFrom
, LoadFile
).
而且字段应该是 static
才能工作,否则你需要一个实例来获取字段值并将其传递给 GetValue
方法而不是 null.