通过“发射/反射”初始化类字段

| 假设我具有通过.NET框架的发射/反射功能生成的三个A,B和C类,并以以下方式发射对象:
class A
{
   B someField1;
   C someField2;
}
创建对象后,我需要初始化someField1和someField2:
A someObject;
这该怎么做? someObject类型是对象,但我不知道如何将其转换为动态创建的A类型并输入字段并对其进行初始化。预先感谢您的帮助。     
已邀请:
        您不能在代码中强制转换为动态创建的类型,因为编译器无法知道该类型。 您可以通过以下两种方式完成所需的操作:
// 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);
要么
// 2 - using dynamic (C# 4)
dynamic a = CreateA();
dynamic b = CreateB();
a.someField1 = b;
    
        只是Paolo的后续活动... 如果someField1和someField2在编译时是已知的(情况似乎如此),建议在动态创建的类实现的接口中声明它们。这样,您可以简单地将someObj设置为接口类型。
interface IObjectWithFields
{
    B someField;
    C someField;
}

object a = CreateA();
((IObjectWIthFields)a).someField1 = CreateB();
    

要回复问题请先登录注册