我刚开始使用抽象类,想知道我是否以正确的方式使用它们。在我的示例中,我有一个 Windows 窗体应用程序,其中 Form1 是应用程序的主 UI。在 Form1 中,我有一个将调试消息写入富文本框的方法。我目前有一堆不同的类,它们都有相同的方法将消息写回主 UI 富文本框。但是,我想知道将这个功能作为抽象类的一部分是否有意义,只是让我的所有其他类继承这个功能,如下所示?
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);
}
}
如果把它放在一个抽象类中不是最好的方法,那是什么?