[.NET FAQ NO2010112201]“没有找到适合的方法来重写”解决方案

160 views 0 comments posted at about 8 years ago Raymond Tang

P.S. 从今天开始,我会将发布一系列.NET FAQ的文章,主要收集在开发.NET程序中经常遇到的一些问题以及它们的解决方案。

今天的问题是:没有找到适合的方法来重写

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);
}
}
在添加一个Form的时候比如这里的Form1,VS会自动生成界面呈现等等相关的代码,以及这里的Dispose方法

 

之所以会出现这个问题是因为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()没有找到适合的方法来重写,解决的途径与此类似。


Add comment

Comments (0)

No comments yet.
In this Page