C# 通过发射/反射初始化类字段
假设我有三个类A、B和C,它们是通过.NET framework的发射/反射功能生成的,并以以下方式发射对象:C# 通过发射/反射初始化类字段,c#,.net,reflection,initialization,C#,.net,Reflection,Initialization,假设我有三个类A、B和C,它们是通过.NET framework的发射/反射功能生成的,并以以下方式发射对象: class A { B someField1; C someField2; } 创建对象后,我需要初始化someField1和someField2: A someObject; 如何做到这一点?someObject类型是object,但我不知道如何将其转换为动态创建的类型,并输入字段并初始化它。提前感谢您的帮助。您不能在代码中强制转换为动态创建的类型,因为编译器无法知道
class A
{
B someField1;
C someField2;
}
创建对象后,我需要初始化someField1和someField2:
A someObject;
如何做到这一点?someObject类型是object,但我不知道如何将其转换为动态创建的类型,并输入字段并初始化它。提前感谢您的帮助。您不能在代码中强制转换为动态创建的类型,因为编译器无法知道该类型 您可以通过以下两种方式满足您的需求:
// 1 - using reflection
// these will actually be your dynamically created objects...
object a = CreateA();
object b = CreateB();
System.Reflection.FieldInfo someField1 = a.GetType().GetField(
"someField1",
BindingFlags.Instance | BindingFlags.NonPublic);
someField1.SetValue(a, b);
或
只是保罗的后续行动 如果someField1和someField2在编译时是已知的(似乎是这样),那么建议在动态创建的类实现的接口中声明它们。这样,您就可以简单地将someObj的大小写为接口类型
interface IObjectWithFields
{
B someField;
C someField;
}
object a = CreateA();
((IObjectWIthFields)a).someField1 = CreateB();
谢谢,我不知道动态关键字。
interface IObjectWithFields
{
B someField;
C someField;
}
object a = CreateA();
((IObjectWIthFields)a).someField1 = CreateB();