正如您所说,.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
控制有两个IMyControl
和TextBox
成员。
据我所知,这足以模拟多继承,因为一个类可以实现一个或多个接口。