假设我有一堆代码用于所有控件,但我需要与我的软件套件交互的子类才能使用这些常用方法。我真的希望我的子类派生自控件,而不是带有公共代码的类。 (MyEdit应该来自Edit,而不是来自MyControl)。此外,该套件使用MyControl派生的接口与控件交互。为了在C ++中执行此操作,我将使用像这样的多继承
class MyEdit : public Edit, public MyControl;
class MyControl : public IControl;
然而,我突然发现,如果我想要一些不支持多次无关的C#控件,我就不应该使用多重继承。 所以我以为我能做到这一点......
class MyEdit : public MyControl<Edit>;
template class MyControl<Type> : public IControl;
将公共控件内容转换为模板,并为其提供我想要派生的控件类型。
但是我不确定这会起作用,因为模板会模拟编辑,但它不一定会创建一个吗?当我创建模板时,我实际上能够创建编辑吗?
其次,如果可以的话,是否可以在C#中使用?它会是什么样子?
答案 0 :(得分:0)
在C#中,一个类只能从另一个类继承,但是它可以实现多个接口,因此如果你想要一个可以在运行时覆盖多个多态类型行为的类,你必须使用接口。 Interfaces的缺点是它们没有属性或基本方法实现,因此您可能必须复制实现相同接口的类中的一些方法。
另一种,C#-y获取多态运行时行为的方法是附加委托。很多时候,我发现看起来像多重继承的情况更好地表达为多播委托情况。
答案 1 :(得分:0)
我不能说我非常关注你的问题,但是关于:
但是我不确定这会有效, 因为模板模板化了, 但它不一定会创造一个 可以?当我创建模板时 我真的能够创建 编辑?
我会去
template<class Controlled_t>
class MyControl : public Controlled_t, public IControl
{
//My Control inherits from its templated class
}
这样
MyControl<Edit>
继承Edit
(已创建)和接口