当前位置:编程学习 > C#/ASP.NET >>

override 和继承之间的关系

        private bool Dispose;
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }


错误 13 类型“MonitorClient.MainFrame”已经包含“Dispose”的定义 D:\二院\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 14 33 CenterClient
一直提示这个错误,那个高手能帮忙改一下。 C#  override  继承 --------------------编程问答-------------------- 你定义的私有属性 Dispose 和方法名重名了。私有属性钱加个下划线吧。
override 是在继承父类的情况下对父类的某些方法进行重写。和你的错误没关系。虽然你的 Dispose 方法也是重写了父类的方法。 --------------------编程问答-------------------- 我加了,但是,
错误 1 “MonitorClient.MainFrame.Dispose(bool)”: 没有找到适合的方法来重写。
--------------------编程问答-------------------- // 摘要:
    //     定义一种释放分配的资源的方法。
    [ComVisible(true)]
    public interface IDisposable
    {
        // 摘要:
        //     执行与释放或重置非托管资源相关的应用程序定义的任务。
        void Dispose();
    }
这是我重载的父类方法 --------------------编程问答--------------------
引用 2 楼 hnygrzhj 的回复:
我加了,但是,
错误 1 “MonitorClient.MainFrame.Dispose(bool)”: 没有找到适合的方法来重写。

如果你继承的是接口,那么你必须实现 Dispose 方法。
如果你继承的是类或是抽象类,那么可以不去重写这个方法。

提示这个错误你应该继承的是接口,那么实现该类时不用加 override 关键字。 --------------------编程问答--------------------
引用 3 楼 hnygrzhj 的回复:
// 摘要:
    //     定义一种释放分配的资源的方法。
    [ComVisible(true)]
    public interface IDisposable
    {
        // 摘要:
        //     执行与释放或重置非托管资源相关的应用程序定义的任务。
        void Dispose();
    }
这是我重载的父类方法

你继承的是一个接口,在派生类里面必须实现该接口,那么仅仅是定义一个空类也可以,不用加 override 关键字。 --------------------编程问答-------------------- 还是不行,private bool Dispose;属性我这样定义,他还是找不到合适的重载。我改成private bool _Dispose;这样。他给我报十二条错误提示。我感觉理论上你说的都是对的,但是,但是就是不行,我不知道为什么了,哪里的问题。

错误 1 与“System.Windows.Forms.Application.Run(System.Windows.Forms.Form)”最匹配的重载方法具有一些无效参数 D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\Program.cs 18 13 CenterClient
错误 2 参数“1”: 无法从“MonitorClient.MainFrame”转换为“System.Windows.Forms.Form” D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\Program.cs 18 29 CenterClient
错误 3 当前上下文中不存在名称“disposing” D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 14 17 CenterClient
错误 6 “MonitorClient.MainFrame”不包含“SuspendLayout”的定义,并且找不到可接受类型为“MonitorClient.MainFrame”的第一个参数的扩展方法“SuspendLayout”(是否缺少 using 指令或程序集引用?) D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 54 18 CenterClient
等等..........

--------------------编程问答--------------------
引用 6 楼 hnygrzhj 的回复:
还是不行,private bool Dispose;属性我这样定义,他还是找不到合适的重载。我改成private bool _Dispose;这样。他给我报十二条错误提示。我感觉理论上你说的都是对的,但是,但是就是不行,我不知道为什么了,哪里的问题。

错误 1 与“System.Windows.Forms.Application.Run(System.Windows.Forms.Form)”最匹配的重载方法具有一些无效参数 D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\Program.cs 18 13 CenterClient
错误 2 参数“1”: 无法从“MonitorClient.MainFrame”转换为“System.Windows.Forms.Form” D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\Program.cs 18 29 CenterClient
错误 3 当前上下文中不存在名称“disposing” D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 14 17 CenterClient
错误 6 “MonitorClient.MainFrame”不包含“SuspendLayout”的定义,并且找不到可接受类型为“MonitorClient.MainFrame”的第一个参数的扩展方法“SuspendLayout”(是否缺少 using 指令或程序集引用?) D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 54 18 CenterClient
等等..........


先解决错误 1 的,后面的估计就没了。 --------------------编程问答--------------------
引用 6 楼 hnygrzhj 的回复:
还是不行,private bool Dispose;属性我这样定义,他还是找不到合适的重载。我改成private bool _Dispose;这样。他给我报十二条错误提示。我感觉理论上你说的都是对的,但是,但是就是不行,我不知道为什么了,哪里的问题。

错误 1 与“System.Windows.Forms.Application.Run(System.Windows.Forms.Form)”最匹配的重载方法具有一些无效参数 D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\Program.cs 18 13 CenterClient
错误 2 参数“1”: 无法从“MonitorClient.MainFrame”转换为“System.Windows.Forms.Form” D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\Program.cs 18 29 CenterClient
错误 3 当前上下文中不存在名称“disposing” D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 14 17 CenterClient
错误 6 “MonitorClient.MainFrame”不包含“SuspendLayout”的定义,并且找不到可接受类型为“MonitorClient.MainFrame”的第一个参数的扩展方法“SuspendLayout”(是否缺少 using 指令或程序集引用?) D:\二院\二院验收后打包\二院管理v2 2012_3_4\App\MainFrame.Designer.cs 54 18 CenterClient
等等..........


首先接口中时无法定义属性的,所以不存在重写属性的说法。接口中定义的本来就是方法。所以你重写属性肯定出错的。
去掉你同名属性,只保留方法。 --------------------编程问答-------------------- 去了还是不行,错误报了一大堆,改的地方太多了,这个系统不是我写的,他报的好多问题,我都没见过,不知道怎么去改。人家本来就一个错误,找不到合适的重载。就连程序的入口,什么都要改,我估计我改过,程序也崩溃了 --------------------编程问答--------------------
引用 9 楼 hnygrzhj 的回复:
去了还是不行,错误报了一大堆,改的地方太多了,这个系统不是我写的,他报的好多问题,我都没见过,不知道怎么去改。人家本来就一个错误,找不到合适的重载。就连程序的入口,什么都要改,我估计我改过,程序也崩溃了

其实你可能对面向对象的程序设计不太了解,对面向对象的程序开发中的多态更是没有接触。

提示你没有合适的重载方法很明显你实现父类的方法就可以了。无须改动别的东西,那么你仅仅写一个空方法也可以。

可能你对接口的定义还没弄清楚,在接口中时不能定义属性的,同样也不能实现方法。

所以,只要你继承了接口,那么就必须实现接口中所有的方法。否则就不会通过编译。


// 摘要:
    //     定义一种释放分配的资源的方法。
    [ComVisible(true)]
    public interface IDisposable
    {
        // 摘要:
        //     执行与释放或重置非托管资源相关的应用程序定义的任务。
        void Dispose();
    }

这段代码就是一个接口的定义,其中 Dispose 定义的是方法,而非属性。所以你在派生类中必须实现该方法。而不是定义一个重名的属性。 --------------------编程问答-------------------- 对于你说的,我一点都不否认,我确实不怎么懂。希望不怕辛苦的帮我把这个问题给解决了。
#region IDisposable 成员

        public void Dispose()
        {
            throw new NotImplementedException();
        }

  #endregion [color=#FF00FF]

 protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);(这段代码是不能少的,override也不能去掉,我用是去掉,程序中好多东西都要改动,我没什么经验,也不敢乱改)
        }[/color]
不知道怎么处理
  --------------------编程问答-------------------- 是不是直接把另一个工程里的某个窗体直接加到这个工程里了?我昨天也遇到过这样的问题。 --------------------编程问答-------------------- 那你是怎样解决的 --------------------编程问答-------------------- 接口和类的继承混为一谈...
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,