Ben*_*Ben 2 c# polymorphism inheritance
我有一个简单的继承heirarchy MyType2继承自MyType1.
我有一个实例MyType1,arg作为方法的参数传入.如果arg是一个实例MyType2,那么我想执行一些逻辑,转换实例.我的代码看起来像下面的代码.
必须创建一个新的局部变量b感觉不够优雅 - 有没有一种方法可以实现相同的行为,而无需额外的局部变量?
public MyType1 MyMethod(MyType1 arg)
{
if(arg is MyType2)
{
MyType2 b = arg as MyType2;
//use b (which modifies "arg" as "b" is a reference to it)...
}
return arg;
}
Run Code Online (Sandbox Code Playgroud)
注意"是"和"as"是重复测试; 要么使用is然后(一旦你知道)只是演员 - 或者as首先使用并测试null.
你的问题; 如果你只想做一件事 - 然后施放:
if(arg is MyType2)
{
((MyType2)arg).SomeSpecialMethod();
}
Run Code Online (Sandbox Code Playgroud)
否则 - 也许是一个virtual方法(在基类型上),或者只是将逻辑重构为另一个方法,所以你有:
if(arg is MyType2)
{
StuffThatTakesType2((MyType2)arg);
}
Run Code Online (Sandbox Code Playgroud)
但是persoanlly,我只是使用额外的变量:
MyType2 whatever = arg as MyType2;
if(whatever != null) {
whatever.Foo = 123;
whatever.Bar();
}
Run Code Online (Sandbox Code Playgroud)