首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重遗传

多重遗传
EN

Stack Overflow用户
提问于 2013-04-20 17:26:07
回答 2查看 60关注 0票数 1

我有一些具有.NET控件的类:

代码语言:javascript
复制
Class MyTextBox : Inherits MyControl
    Control As TextBox

我想使用继承,而不是使用包含.NET控件的变量:

代码语言:javascript
复制
Class MyTextBox : Inherits TextBox

既然.NET不支持多重继承,有没有办法继承MyControl类并拥有.NET TextBox的所有实现?

代码语言:javascript
复制
Class MyControl : Inherits Control

Class MyTextBox : Inherits MyControl
    (all methods, property, events of the TextBox class)

因此,我可以在我的子类中拥有TextBoxes、ComboBoxes和任何东西的所有属性/操作,以及我的个人属性和MyControl类上的泛型att/ops。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-20 17:50:41

正如您所说,.NET (以及大多数现代语言和OOP环境)将不支持多继承- -这是一个很好的设计决策-。

这不是一个变通的办法,但实际的解决方案是包装。

如果你想让你的控件既是MyControl的又是TextBox的,还有其他的方法可以获得这样的关系:接口。

您的专用TextBox应该继承.NET内置的TextBox控件类并实现IMyControl接口。

SpecializedTextBox必须实现的功能可以在单独的类中实现,并在SpecializedTextBox上的IMyControl实现中使用其成员。

我将用C#编写一个示例,但由于您是VB.NET开发人员,并且解决方案是语言中立的,因此这对您来说应该足够了:

代码语言:javascript
复制
public interface IMyControl 
{
     void Do();
}

public class SpecializedTextBox : TextBox, IMyControl
{
     private readonly MyControlExtension _extension = new MyControlExtension(this);

     public MyControlExtension Extension 
     {
          get { return _extension; }
     }

     public void Do()
     {
          Extension.Do();
     }
}

public class MyControlExtension
{
    public MyControlExtension(Control wrappedControl)
    {
         _wrappedControl = wrappedControl;
    }

    private readonly Control _wrappedControl;

    public Control WrappedControl { get { return _wrapedControl; } }

    public void Do() 
    {
         // Do some stuff with the WrappedControl property contained control

    } 
}

现在,SpecializedTextBox控件同时具有IMyControlTextBox成员。

据我所知,这足以模拟多重继承,因为一个类可以实现一个或多个接口。

票数 3
EN

Stack Overflow用户

发布于 2013-04-20 17:53:20

你可以看看下面这篇文章

  • Simulated Multiple Inheritance Pattern for C#
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16118718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档