我有一些具有.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类上的泛型att/ops。
发布于 2013-04-20 17:50:41
正如您所说,.NET (以及大多数现代语言和OOP环境)将不支持多继承- -这是一个很好的设计决策-。
这不是一个变通的办法,但实际的解决方案是包装。
如果你想让你的控件既是MyControl的又是TextBox的,还有其他的方法可以获得这样的关系:接口。
您的专用TextBox应该继承.NET内置的TextBox控件类并实现IMyControl接口。
SpecializedTextBox必须实现的功能可以在单独的类中实现,并在SpecializedTextBox上的IMyControl实现中使用其成员。
我将用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成员。
据我所知,这足以模拟多重继承,因为一个类可以实现一个或多个接口。
发布于 2013-04-20 17:53:20
你可以看看下面这篇文章
https://stackoverflow.com/questions/16118718
复制相似问题