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()没有找到适合的方法来重写,解决的途径与此类似。


About author
Disclaimer
The opinions and comments expressed herein are my own personal opinions and do not represent my employer's view in any way.
Comments
No comments.
Add comment
Title
Title is required.
Name
Name is required.
Email
Please input your personal email with valid format.
Comments
Please input comment content.
Captcha Refresh
Input captcha:

Subscription

Statistics

Locations of visitors to this page