加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 子类是否可以实现与其父级相同的接口?

发布时间:2020-12-15 07:48:45 所属栏目:百科 来源:网络整理
导读:我今天以前从未遇到过这个问题,并且想知道完成这种行为的惯例/最佳做法是什么. 基本设置是这样的: public interface IDispatch { void Dispatch();}public class Foo : IDispatch { void IDispatch.Dispatch() { DoSomething(); }}public class Bar : Foo {
我今天以前从未遇到过这个问题,并且想知道完成这种行为的惯例/最佳做法是什么.

基本设置是这样的:

public interface IDispatch {
    void Dispatch();
}

public class Foo : IDispatch {
    void IDispatch.Dispatch() {
        DoSomething();
    }
}

public class Bar : Foo {
     ...
}

Bar需要对Foo进行子类化,因为它与Bar plus共享所有相同的属性,并引入了我需要遇到的2个新的属性.我的问题是,Foo还需要一个稍微不同的Dispatch()实现.通常它会被覆盖,但是这对接口方法是无效的,所以只要使用Bar实现IDispatch就可以了,所以我的类定义如下所示:

public class Bar : Foo,IDispatch { .... }

然后只是在Bar中明确地实现该接口方法?我的编译器似乎没有抱怨,当我尝试这样做,但我不知道是否会导致任何运行时问题解决在路上使用哪个实现,或者如果有更好的方式来完成这样的事情.

还值得一提的是,在我的工作场所,我们使用UML模型中的代码生成,强制所有类的设计必须先从模型完成.代码生成工具是什么导致接口方法被明确地实现(不想辩论这个优点和缺点,它只是我现在被迫处理,所以有一个隐式的实现不是一个选择)

解决方法

您也可以通过以下两种方法之一进行操作:

首先,不要明确实现接口:

public class Foo : IDispatch {
    public virtual void Dispatch() {
        whatever();
    }
}

public class Bar : Foo {
    public override void Dispatch() {
        whateverElse();
    }
}

其次,明确地实现它,但是添加一个子类可以覆盖的函数:

public class Foo : IDispatch {
    void IDispatch.Dispatch() {
        this.Dispatch();
    }

    protected virtual void Dispatch() {
        whatever();
    }
}

public class Bar : Foo {
    protected override void Dispatch() {
        whateverElse();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读