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

C#继承的问题
有一个基类BaseClass,其有若干个派生类AClass:BaseClass,BClass:BaseClass,...
现在要对这些类进行拓展,添加一些字段、属性、方法和事件来实现几个功能。其中,有些功能是BaseClass的所有派生类都要实现的,有些则是其特定的派生类去实现。
这些共有的功能自然应该集中起来,比如用一个类ExtBaseClass:BaseClass来承载这些功能。但是这样的话,由于C#不支持多继承,所以构造ExtAClass时不能既实现ExtBaseClass的功能,又访问AClass的成员。

那么这样的需求到底应该怎么去实现?

------解决方案--------------------
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            new ControlHelper(button1);
            new ControlHelper(button2);
        }
    }

    public class ControlHelper
    {
        readonly Control _control;

        public ControlHelper(Control control)
        {
            _control = control;

            _control.Click += a;
            _control.Paint += b;
        }
    }
}

------解决方案--------------------
某些特性也可以泛型来实现,我给你实现了一个点击特性的按钮。。

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ClickClass c = new ClickClass();
            ExtButton<ClickClass> clickButton = new ExtButton<ClickClass>(c);

            clickButton.Location = new System.Drawing.Point(64, 66);
            clickButton.Name = "button2";
            clickButton.Size = new System.Drawing.Size(75, 23);
            clickButton.TabIndex = 1;
            clickButton.Text = "button2";
            clickButton.UseVisualStyleBackColor = true;

            this.Controls.Add(clickButton);
        }     
    }

    public abstract class ExtClass
    {
        public virtual void