【发布时间】:2009-02-25 13:31:57
【问题描述】:
重复:Function overloading by return type?
也许这是一个非常愚蠢的问题,但我不明白为什么当它们具有不同的返回类型时,我不能声明具有相同签名的两个方法。
public class MyClass
{
private double d = 0;
public double MyMethod()
{
return d;
}
public string MyMethod()
{
return d.ToString();
}
}
我收到一个编译错误,指出该类已经定义了具有相同参数类型的成员。
(显然我在代码中使用它的方式并不像我的示例代码那么简单......但我认为它可以理解这个想法。)
我是否遗漏了一些关于 OO 设计的东西,这使得我正在尝试做一个 OOP 反模式?只要我明确告诉它我想要哪个,编译器当然应该能够确定我正在尝试使用哪种方法。
鉴于MyClass myClass = new MyClass(); 我希望以下代码可以工作:
double d = myClass.MyMethod();
string s = myClass.MyMethod();
我预计以下代码会有问题:
var v = myClass.MyMethod();
但即使是var,它也会导致编译错误。
谁能看到我在这里做错了什么?我很高兴得到纠正。 :-)
【问题讨论】:
-
谢谢格雷格!我不知道这是一个重复的问题。我在询问之前进行了搜索......但我想我没有使用正确的术语。
-
不用担心,我链接到的问题有一些非常好的答案。 (我的只是平庸。:)
-
是的,我通读了他们,他们肯定回答了我的问题。我不介意这个问题是否被关闭......但如果它没有被删除会很好,这样如果下一个有这个问题的人不知道它导致的“返回类型的函数重载”他们可以仍然找到答案。
-
那是“被称为”而不是“导致”的......我希望在这种情况下我可以编辑我的 cmets......
-
@mezoid,我倾向于将旧评论剪切并粘贴到新评论中,并在提交前修复它。那么只要30秒内没有人评论原评论(即新评论乱序),我就删除旧评论,否则我删除新评论。
标签: c# method-signature