该变量只能是一种或另一种类型 - 否则编译器如何知道之后允许哪些成员访问?
如果有一些通用的基类型(基类或接口)声明function
,那应该是变量的类型:
BaseType obj;
if (a == b)
{
obj = new Type1();
}
else
{
obj = new Type2();
}
obj.Function(); // Name fixed to follow conventions
这会更简单:
BaseType obj = a == b ? (BaseType) new Type1() : new Type2();
obj.Function();
如果它们真的是不同的类型,那么您实际上是在调用完全独立的方法,那么您需要在每个块中声明变量并在那里调用该方法,或者如果您使用的是 C# 4 或更高版本,您可以使用动态类型:
dynamic obj = a == b ? (dynamic) new Type1() : new Type2();
obj.Function();
您真的应该尝试考虑这是否是一个真正常见的函数,在这种情况下它应该在基类型中声明,或者您有两个同名的函数是否只是巧合,在这种情况下试图以同样的方式对待他们是一个坏主意。(假设您重构一种类型以更改方法名称,例如...)