[visual-studio]多个 inhertinace

标签: Visual-Studio
发布时间: 2014/3/1 3:44:08
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

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

Class MyTextBox : Inherits MyControl
    Control As TextBox

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

Class MyTextBox : Inherits TextBox

由于.NET 不支持多重继承,那里是我从 MyControl 类继承的方式和具有的.NET 文本框的所有执行吗?

Class MyControl : Inherits Control

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

所以我可以有属性/中所有操作的文本框、 下拉式组合框和不管我子类再加上我个人的一个和泛型我 MyControl 类上老年退休金计划附件 subones 从继承。

解决方法 1:

如你所说,.NET (和最现代的语言和面向对象的环境) 不支持多继承-这是一个好的设计决定-。

不是一种解决方法,但实际的解决办法是换行

如果您想要将您的控件 MyControl 和也 TextBox 这里有这种关系的其他途径:接口

你专门 TextBox 应继承的.NET 内置 TextBox 控件类和实现 IMyControl 接口。

功能的 SpecializedTextBox 必须实现可以实现在一个单独的类,并使用其成员在执行 IMyControlSpecializedTextBox

我要写下一个示例在 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 成员。

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

官方微信
官方QQ群
31647020