hen*_*que 3 c# system.reflection
我一直在试图让新的代码工作.我已经能够通过if语句以更简单但更广泛的方式完成此操作.但是,由于这将是应用程序的第2版,我想让代码更清洁,更高效.
我想要做的是有条件地实例化一个类.它会是这样的:
int Airplane = 195;
if (Airplane == 190)
_E190 Aircraft = new _E190();
else if (Airplane == 195)
_E195 Aircraft = new _E195();
Run Code Online (Sandbox Code Playgroud)
我有两个类,但我想使用关键字"Aircraft",所以我不必为每个类创建多个代码部分.我还发现在C#中没有多重继承(在我看来,它会做到这一点),我对这种语言相对较新.
到目前为止,我已经完成了以我想要的方式实例化类,但我似乎无法使用每个类中声明的变量.我这样做了:
int Airplane = 195;
var Aircraft = Activator.CreateInstance( (Airplane == 195) ? typeof(_E195) : typeof(_E190));
MessageBox.Show(Aircraft.GetType().ToString());
Run Code Online (Sandbox Code Playgroud)
MessageBox正确显示了类型,但同样,我无法使用"Aircraft"对象访问类本身.我确信有更多的方法可以做到这一点,但其中任何一个对我都没问题.
谢谢!
Ry-*_*Ry- 12
我认为它们都是从其他东西继承而来的,这就是为什么你需要多重继承?
创建一个接口(IAircraft)并让它们都实现它.
interface IAircraft {
/* Common methods here */
}
class _E190 : TheParentClass, IAircraft {
/* Your code */
}
class _E195 : TheOtherParentClass, IAircraft {
/* Your code */
}
/* ... */
int Airplane = 195;
IAircraft Aircraft;
if (Airplane == 190)
Aircraft = new _E190();
else if (Airplane == 195)
Aircraft = new _E195();
Run Code Online (Sandbox Code Playgroud)
你无法使用以前的方法访问类的原因是因为要做到这一点,编译器需要知道它是什么类型的类.要做到这一点,你需要将它转换为适当的类型......但这会让你回到同样的问题.您可以使用反射方法继续使用它,但使用继承或实现会更有效和干净.