我刚开始使用抽象类,想知道我是否以正确的方式使用它们。在我的示例中,我有一个Windows Form应用程序,其中Form1是应用程序的主UI。在Form1中,我有一个将调试消息写入richtextbox的方法。我目前有一堆不同的类,它们都有相同的方法来将消息写回到主UI richtextbox。然而,我想知道如果将这个功能作为抽象类的一部分是有意义的,那么我的所有其他类都会继承这个功能,如下所示?C#抽象类实现
using System;
using System.Windows.Forms;
namespace abstractTest
{
/// <summary>
/// Main User Interface
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void RTBWriteLine(string message)
{
/* Print (append) message to the debug richtextbox */
this.richTextBox1.AppendText(message + Environment.NewLine);
/* Select the last entered message */
this.richTextBox1.Select(richTextBox1.Text.Length, 0);
/* Scroll to selected message */
this.richTextBox1.ScrollToCaret();
}
private void Form1_Load(object sender, EventArgs e)
{
Class1 c1 = new Class1(this);
Class2 c2 = new Class2(this);
}
}
public abstract class absTest
{
protected Form1 MainUI;
public virtual void MainRTBWriteLine(string msg)
{
if (MainUI != null)
{
MainUI.RTBWriteLine(msg);
}
}
}
public class Class1 : absTest
{
public Class1(Form callingForm)
{
MainUI = callingForm as Form1;
MainRTBWriteLine("This is Class1");
}
}
public class Class2 : absTest
{
public Class2(Form callingForm)
{
MainUI = callingForm as Form1;
MainRTBWriteLine("This is Class2");
}
}
}
编辑: 我的主要目标是,我会做出DTBWriteLine(即更新主UI其他许多方法中的一些方法),以提供给所有我的班,但只让代码在一个位置。现在,我在每一个类复制下面的方法(以及许多其他)我创建:
public virtual void MainRTBWriteLine(string msg)
{
if (MainUI != null)
{
MainUI.RTBWriteLine(msg);
}
}
如果把这个在抽象类是不是最好的方法是什么?
仅供参考:'absTest'不遵循C#命名约定。您应该使用'AbsTest'。 – Candide