日期:2014-05-17  浏览次数:20802 次

C#多继承实现
比如说TextBox1:System.Windows.Form.TextBox,包括方法tm1();
Control1:System.Windows.Form.Control,包括方法cm1();
现在我要实现TextBox2,自动带有TextBox1.tm1和Control1.cm1()

------解决方案--------------------
public class TextBoxEx:TextBox
{
}
------解决方案--------------------
这个c#不可以实现。只能继承一个类来继承你想要的一个方法,然后另一个方法要自己新建。
------解决方案--------------------
C#不支持多继承。你可以使用扩展方法给一个类附加额外的方法,代替继承。

比如
static class ControlHelper
{
    public static void cm1(this Control c) { }
}

这样所有Control以及Control的派生类都可以使用cm1这个方法了。
------解决方案--------------------
引用:
问题根源在于
从逻辑上讲,TextBox应该是Control1的继承类,
从继承树上讲,TextBox只是Control的继承类,而不是Control1的继承类

再补充一下,要求在.Net2.0中使用多继承解决
哈哈,扩展方法是3.0的特征
------解决方案--------------------
C#不支持多继承.你上面的这两个类,都是普通的类,不是接口,所以不能达到这个功能.
如果是接口的话,比如接口IA,IB,都包含有Show(),即你的类要实现IA,IB的,也是要"显示实现接口"才行.
这是题外话了.
你上面的要求是无法实现,C#可以多继承接口,但是拒绝多继承类.
------解决方案--------------------

public class TextBox2:TextBox
{
    TextBox2 t1;
    Control1 c1;

   //略
   
    public void tm1()
    {
        t1.tm1();
    }
    public void cm1()
    {
       c1.cm1();
    }
}


楼主这样能实现你要求么