gpt4 book ai didi

c# - 有类之类的东西可以实现吗?

转载 作者:太空狗 更新时间:2023-10-29 21:33:22 24 4
gpt4 key购买 nike

我想写一个
X 类 (this)
继承自 A(基础)可以
执行B的方法(?)并且必须
实现C的成员(接口(interface))。

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

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


2 个月后
我目前正在学习 C++,以便在 UE4(虚幻引擎 4)中使用它。
由于 C++ 比 C# 严格得多,它实际上包含一个描述此行为的 pattern implementation idom 术语:这些称为 mixin s.

您可以阅读有关 C++ mixin 的段落 here第 9 页(第二段)。

最佳答案

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 成为一个接口(interface)。但是公共(public)方法的实现不应该在接口(interface)的所有实现中重复。相反,他们应该进入接口(interface) 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
}

关于c# - 有类之类的东西可以实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29767565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com