c#不支持根据返回值重载? 日,散100

buyaowen 2007-02-06 05:06:09
编译器错误 CS0111

类“class”已经定义了一个具有相同参数类型的名为“member”的成员

类包含两个相同的成员声明。

下面的示例生成 CS0111:

// CS0111.cs
namespace x
{
abstract public class clx
{
public abstract void f();
}

public class cly : clx
{
public void f()
{
}
override public void f() // CS0111, duplicate declaration
{
}
public static int Main()
{
return 0;
}
}
}
...全文
441 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengxiaorong 2008-08-31
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 bbbbbb888888 的回复:]
Ivony(授人以鱼不如授人以渔,上海谋生)
顶!
[/Quote]

顶··
zyug 2007-08-24
  • 打赏
  • 举报
回复
我也很郁闷,老是报警告
songle912 2007-08-24
  • 打赏
  • 举报
回复
accept and up
bbbbbb888888 2007-08-24
  • 打赏
  • 举报
回复
Ivony(授人以鱼不如授人以渔,上海谋生)
顶!
lisbates27 2007-08-24
  • 打赏
  • 举报
回复
up
sendling 2007-08-24
  • 打赏
  • 举报
回复
jf up
diablo8848 2007-08-24
  • 打赏
  • 举报
回复
接分走人
zxd0035 2007-08-24
  • 打赏
  • 举报
回复
jf
xray2005 2007-08-24
  • 打赏
  • 举报
回复
学习
绝代坏坏 2007-08-24
  • 打赏
  • 举报
回复
楼上正解
ralpha08 2007-03-19
  • 打赏
  • 举报
回复
只有一种语言支持返回值类型不同得重载
IL
Ivony 2007-03-19
  • 打赏
  • 举报
回复

当然不可能根据返回值重载.

因为方法调用不一定必须使用返回值.

比如你声明int f()

代码中你可以直接调用f();而不是必须写成 int i=f();

如果你两个方法仅仅返回值不同,那么当你直接使用f();编译器根本不知道到底该调用哪个方法.

至少我不知道有哪个语言支持返回值不同重载.




不止是这个原因,你要写object o = f();编译器也无法判断,具有继承关系的返回值也无法判断,还有很多情况都无法判断,所以,还没有支持返回值重载的程序设计语言。
amandag 2007-03-19
  • 打赏
  • 举报
回复
据说CLR支持
sunrobust 2007-03-19
  • 打赏
  • 举报
回复
CLR支持,C#不支持,问题太严重.
netfx 2007-03-19
  • 打赏
  • 举报
回复
没看懂lz的代码,迷糊中
haiwangstar 2007-03-19
  • 打赏
  • 举报
回复
照楼主的语气,似乎某种语言支持所谓返回值重载是的。。呵呵。。期待楼主创造出这种新语言
ylqmf 2007-03-19
  • 打赏
  • 举报
回复

那种语言都不支持。


要是按 楼主 的意愿 ....

那么 编译的 东西 肯定是 混乱的...
--------------------------------------
up
lxwin01 2007-03-19
  • 打赏
  • 举报
回复
。。。
例:自己体会
public class A
{
public A(){}

public virtual void f()
{
System.Console.WriteLine("A.f()");
}
}

public class B:A
{
public B(){}

public override void f()
{
System.Console.WriteLine("B.f()");
}
}
public class C:B
{
public C(){}

public new string f()
{
System.Console.WriteLine("New.f()");
return "f";
}
}

class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
A a=new A();
B b=new B();
C c=new C();
a.f();
b.f();
c.f();
B bb=(B)c;
bb.f();
string d=c.f();
Console.WriteLine("d="+d);
Console.ReadLine();
}
}
看看结果,思考下为什么。
wjsyby 2007-03-19
  • 打赏
  • 举报
回复
接分接分
Moonbeam409 2007-03-19
  • 打赏
  • 举报
回复
走!
加载更多回复(14)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧