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

c# – 是否有可以实现的类?

发布时间:2020-12-15 08:46:36 所属栏目:百科 来源:网络整理
导读:我想写一个 X级(这个)哪个 继承自A(基础)可以 执行B(?)的方法,必须 实现C(接口)的成员. 实现A和C不是问题.但是由于X不能从多个类派生,所以X似乎不可能继承A和B的逻辑.注意A是非常重要的基类,B几乎是一个接口但包含可执行行为.我不希望B成为接口的原因是因为
我想写一个
X级(这个)哪个
继承自A(基础)可以
执行B(?)的方法,必须
实现C(接口)的成员.

实现A和C不是问题.但是由于X不能从多个类派生,所以X似乎不可能继承A和B的逻辑.注意A是非常重要的基类,B几乎是一个接口但包含可执行行为.我不希望B成为接口的原因是因为每个继承或实现它的类的行为都是相同的.

我是否真的必须将B声明为接口并为每个需要B行为的X实现完全相同的10行代码?

两个月后
我目前正在学习C在UE4(虚幻引擎4)中使用它.
由于C比C#严格得多,它实际上包含描述此行为的模式实现idom术语:这些称为mixins.
您可以在第9页(第二段)上阅读有关C mixin here的段落.

解决方法

Do I really must declare B as an interface and implement the exact same 10 lines of code for each X that needs the behaviour of B?

是的,不是.你需要让B成为一个界面.但是,不应在所有接口实现中复制常见的方法实现.相反,他们应该进入接口B的类扩展:

public interface B {
    void MethodX();
    void MethodY();
}
public static class ExtensionsB {
    public static void MethodZ(this B b) {
        // Common implementations go here
    }
}

扩展方法提供了一种“水平”共享实现的方法,而不会让您的类继承自第二个类.扩展方法的行为就像它们是类的常规方法一样:

class X : A,B {
    public void MethodX() {...}
    public void MethodY() {...}
}
public static void Main(string[] args) {
    var x = new X();
    x.SomeMethodFromA();
    x.MethodX(); // Calls method from X
    x.MethodY(); // Calls method from X
    x.MethodZ(); // Calls method from ExtensionsB
}

(编辑:李大同)

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

    推荐文章
      热点阅读