假设我有三个类A,B和C通过.NET框架的发射/反射功能生成,并以下列方式发送对象:
class A
{
B someField1;
C someField2;
}
我需要在创建对象后初始化someField1和someField2:
A someObject;
怎么做? someObject类型是object,但我不知道如何将它转换为动态创建的类型并输入字段并初始化它。提前感谢您的帮助。
答案 0 :(得分:4)
您无法在代码中强制转换为动态创建的类型,因为编译器无法知道该类型。
您可以通过以下几种方式完成所需的工作:
// 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;
答案 1 :(得分:0)
只是保罗的后续行动......
如果someField1和someField2在编译时是已知的(看起来就是这种情况),那么建议在动态创建的类实现的接口中声明它们。这样你就可以简单地将someObj称为接口类型。
interface IObjectWithFields
{
B someField;
C someField;
}
object a = CreateA();
((IObjectWIthFields)a).someField1 = CreateB();