类的继承重载问题,出错:no suitable method found to override

lizhengqin 2008-01-02 10:25:54
在网上找了半天,也没有解决问题

C#2.0


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public class employee
{


public employee()
{

}

public void MethodA()
{
System.Web.HttpContext.Current.Response.Write("employee.MethodA");
}

public virtual void MethodC()
{
System.Web.HttpContext.Current.Response.Write("employee.MethodC");
}

public virtual void MethodD()
{
System.Web.HttpContext.Current.Response.Write("employee.MethodD");
}


}

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public class overrideClass : employee
{
public overrideClass()
{

}

public void test()
{
System.Web.HttpContext.Current.Response.Write("overrideClass.test");
}
public override void MethodD(int a)//这里出错:overrideClass.MethodD(int)': no suitable method found to override
{
System.Web.HttpContext.Current.Response.Write("这是重载:" + "overrideClass.MethodD");
}
}



哪位帮忙改一下,谢谢!
...全文
4771 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LikeCode 2008-01-02
  • 打赏
  • 举报
回复
TO 10#
我猜到可能是
1: 书有误.
2: 你看错了.


方法签名是指方法的方法名与方法参数,还有返回值类型(这个我不太确定,我翻翻书才行)
lizhengqin 2008-01-02
  • 打赏
  • 举报
回复
如果把参数去掉,不就是重写,不是重载吧,我基础差,可能理解不正确

顺便问一下,方法签名要一样,这里的"签名"是啥意思,是方法名称的意思?

书上的重载的源代码:

using System;
namespace Donis.CsharpBook
{
public class Starter
{
public static void Main()
{
Yclass obj = new Yclass();
obj.MethodA();
obj.MethodA(0);

}
}

public class Zclass
{
public virtual void MethodA()
{
System.Web.HttpContext.Current.Response("Zclass.MethodA");
}
}

public class Yclass : Zclass
{
public override void MethodA(int a)
{
System.Web.HttpContext.Current.Response("Yclass.MethodA");
}
}
}
LikeCode 2008-01-02
  • 打赏
  • 举报
回复
class   C1
{
public F()
{
//...
}

public F(int p1)
//这个方法与上面一个方法 F()同名,但签名不一样,即我现在这个方法传递一个参数 int,签名不一样.
//象这样在同个类,同名方法,但签名不一样,叫方法重载
{
//...
}

public virtual G(bool isTrue)
//virtual 表示这是一个虚方法,可以在继承类里重写,即override
{
//...
}
}
//end of C1

class C2 : C1
{
public override G(bool isTrue)
//该类继承自C1类,但我这里又有一个基类存在的方法 G(),但我是重写(override),合法,前提是方法签名一样,都是G(bool isTrue)
{
//
}
}
LikeCode 2008-01-02
  • 打赏
  • 举报
回复 1
QUOTE:我尝试着把上面的2个类的代码放在一个类中
----------------------
刚才不说,你将重载与虚方法重写两个概念混淆了.

[code=C#]
class C1
{
public F()
{
//...
}

public F(int p1)
//这个方法与上面一个方法 F()同名,但签名不一样,即我现在这个方法传递一个参数 int,签名不一样.
//象这样在同个类,同名方法,但签名不一样,叫方法重载
{
//...
}

public virtual G(bool isTrue)
//virtual 表示这是一个虚方法,可以在继承类里重写,即override
{
//...
}
}
//end of C1

class C2 : C1
{
public override G(bool isTrue)
//该类继承自C1类,但我这里又有一个基类存在的方法 G(),但我是重写(override),合法,前提是方法签名一样,都是G(bool isTrue)
{
//
}
}
dojoin 2008-01-02
  • 打赏
  • 举报
回复 1
MethodD()

MethodD(int a)
两个方法参数就不一样。
把override去掉或者把参数去掉。
方法签名要一样。

public void MethodD(int a)//这里出错:overrideClass.MethodD(int)': no suitable method found to override
{
System.Web.HttpContext.Current.Response.Write("这是重载:" + "overrideClass.MethodD");
}

public override void MethodD()
{
System.Web.HttpContext.Current.Response.Write("这是重载:" + "overrideClass.MethodD");
}
lizhengqin 2008-01-02
  • 打赏
  • 举报
回复
我尝试着把上面的2个类的代码放在一个类中,编译器提示还是报这个错误:no suitable method found to override

哪位老大能否出手,根据上面的2个类,写一个重载的例子让我学习,谢谢!
LikeCode 2008-01-02
  • 打赏
  • 举报
回复
QUOTE:是不是我上面的代码是用了2个类,所以不能重载,重载只能只在一个类里面?
---------------
差不多是这个意思吧,你将重载与虚方法的重写混淆了.
changjiangzhibin 2008-01-02
  • 打赏
  • 举报
回复
LZ看看虚方法和抽象方法的定义就能OK
lizhengqin 2008-01-02
  • 打赏
  • 举报
回复
是不是我上面的代码是用了2个类,所以不能重载,重载只能只在一个类里面?
LikeCode 2008-01-02
  • 打赏
  • 举报
回复
重载是指同个类里同方法名不同的方法,区别是签名不一样,如参数不一样.
而你写的代码是重写方法.重写方法是指在继承的类里将原方法体重写.被生的方法的签名是与原方法一致.

明白?!
lizhengqin 2008-01-02
  • 打赏
  • 举报
回复
我基本上是按照书上源代码抄下来,不知道怎么会报错
赵凯~ 2008-01-02
  • 打赏
  • 举报
回复
public override void MethodD(int a)//这里出错:overrideClass.MethodD(int)': no suitable method found to override
{
System.Web.HttpContext.Current.Response.Write("这是重载:" + "overrideClass.MethodD");
}
换成

public override void MethodD()//这里出错:overrideClass.MethodD(int)': no suitable method found to override
{
System.Web.HttpContext.Current.Response.Write("这是重载:" + "overrideClass.MethodD");
}
就哦了
ychangh 2008-01-02
  • 打赏
  • 举报
回复
public override void MethodD(int a)
去掉override
或是去掉int a

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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