假设我有三个类A、B和C,它们是通过.NET框架的发射/反射能力生成的,并以以下方式发射对象:
class A
{
B someField1;
C someField2;
}
创建对象后,我需要初始化someField1和someField2:
A someObject;
如何做到这一点?someObject类型是对象,但我不知道如何将其强制转换为动态创建的A类型,并输入字段并初始化它。提前感谢s的帮助。
假设我有三个类A、B和C,它们是通过.NET框架的发射/反射能力生成的,并以以下方式发射对象:
class A
{
B someField1;
C someField2;
}
创建对象后,我需要初始化someField1和someField2:
A someObject;
如何做到这一点?someObject类型是对象,但我不知道如何将其强制转换为动态创建的A类型,并输入字段并初始化它。提前感谢s的帮助。
不能在代码中强制转换为动态创建的类型,因为编译器无法知道该类型。
您可以通过以下几种方式来满足您的需求:
// 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;
只是保罗的后续行动。。。
如果someField1和someField2在编译时是已知的(事实似乎是这样),那么建议在动态创建的类实现的接口中声明它们。这样,您就可以简单地将someObj大小写为接口类型。
interface IObjectWithFields
{
B someField;
C someField;
}
object a = CreateA();
((IObjectWIthFields)a).someField1 = CreateB();
What is the use of default keyword in C#? Is it introduced in C# 3.0 ?
I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...
I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...
I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...
I have two EF entities. One has a property called HouseNumber. The other has two properties, one called StartHouseNumber and one called EndHouseNumber. I want to create a many to many association ...
How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...
Since I cannot order my dictionary, what is the best way of going about taking key value pairs and also maintaing an index?
Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...