读书人

C#继承的有关问题

发布时间: 2013-02-20 12:23:22 作者: rapoo

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 ExtButton_Click(object sender, EventArgs e)


{
}
}

public class ClickClass : ExtClass
{
public int count = 0; // 统计多少次被点击

public override void ExtButton_Click(object sender, EventArgs e)
{
count++; MessageBox.Show(string.Format("第{0}次点击", count));
}
}

public class ExtButton<T> : System.Windows.Forms.Button where T : ExtClass
{
public T ExtObj;
public ExtButton(T obj)
{
this.ExtObj = obj;
this.Click += new EventHandler(this.ExtObj.ExtButton_Click);
}
}

读书人网 >C#

热点推荐