今天的问题是:没有找到适合的方法来重写
A问题来源
http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/2c9493b4-95a5-4d45-a336-54e9c877ecbf
在MSDN论坛上有朋友提出这样的问题。
B问题易出现人群
学习新手,对VS不熟悉,操作编码习惯不合理等
C问题出现原因:
使用了override关键字重写了基类(继承的父类)中不存在的方法就会出现这样的情况。参考使用Override和New关键字进行版本控制和override关键字。
D问题再现与解决方案:
namespace WindowsApplication1
{
partial class Form1
{
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}
之所以会出现这个问题是因为Form2类并没有继承自提供了Dispose的可重写方法的父类
怎样会出现这样的情况呢?
接着这个例子,在生成上面这段代码的同时,还会生成
public class Form1:Form
这样在编译的时候会合成为一个类Form1,如果你不清楚部分类partial是什么概念,请查看msdn上的partial这个关键字。
但是如果将Form1的类名进行了修改,或者将其命名空间进行了修改比如:
namespace WindowsApplication2
{
public class Form1:Form
{
//...
}
}
那么部分类Form1就成了孤立的类了,而他只继承自object,但是object类是没有可重写的Dispose方法的 那么就会出现这样的编译时错误了。
因此解决的方案,即是确保继承的类包含override重写的方法,而在操作上则是不要随意去修改code-behind的类签名(命名空间与名称等),即便需要修改,也需确保VS自动生成的类也做了相应的修改。
在ASP.NET中也有人遇到类似的问题诸如GetTypeHashCode()没有找到适合的方法来重写,解决的途径与此类似。