1

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

Class MyTextBox : Inherits MyControl
    Control As TextBox

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

Class MyTextBox : Inherits TextBox

由于 .NET 不支持多重继承,有没有办法让我从 MyControl 类继承并拥有 .NET TextBox 的所有实现?

Class MyControl : Inherits Control

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

所以我可以在我的子类中拥有 TextBoxes、ComboBoxes 和任何东西的所有属性/操作,加上我的个人属性/操作以及 MyControl 类上从子类继承的通用 atts/ops。

4

2 回答 2

3

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

不是一种解决方法,但实际的解决方案是wrapping

如果您希望您的控制是MyControl并且TextBox还有其他获得这种关系的方法:接口

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

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

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

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成员。

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

于 2013-04-20T09:50:41.390 回答
1

你可以看看下面的文章

于 2013-04-20T09:53:19.950 回答