为什么不能用Ienumerator这样的返回类型重载函数?
这种类型的处理方式与允许函数重载的其他类型的处理方式不同吗?
答案 0 :(得分:1)
解决重载方法时不考虑返回类型。 IEnumerator
没有什么特别之处。整个类型系统都是一样的。如果要从一个方法返回不同的类型,则需要声明基类或接口并返回该类型的实例。之后,您可以检查对象的实际类型,转换它并执行特定操作。
public interface IFoo
{
}
public class Bar : IFoo
{
public void BarMethod() {}
}
public class Biz : IFoo
{
public void BizMethod() {}
}
在其他地方,您可以声明这样的方法:
public class C
{
public IFoo M(int i)
{
return (i == 0) ? new Bar() : new Biz();
}
}
用法:
C c = new C();
var foo = c.M(1);
var barFoo = foo as Bar;
if (barFoo != null)
{
barFoo.BarMethod();
}
else
{
var bizFoo = foo as Biz;
if (bizFoo != null)
{
bizFoo.BizMethod();
}
}
答案 1 :(得分:-1)
为什么它没有意义的简单例子。
var class Demo
{
public int GetValue()
{
return 3;
}
public string GetValue()
{
return "3";
}
}
和用法
void Main(){
var demo = new Demo();
var thing = demo.GetValue();
}
编译器不知道你想要哪个GetValue()。
即使你说它的类型如
void Main(){
var demo = new Demo();
string thing = demo.GetValue();
}
这不是一个好的编码实践,会使你使用“var”无效。 暗示具有相同名称的方法可以返回两种不同的类型,这意味着代码的意图不明确。
即。在一个例子中它是“this”而另一个是它的“那个”。