抽象クラスを使い始めたばかりで、正しい方法で使用しているかどうかを知りたいです。私の例では、Form1がアプリのメインUIであるWindowsフォームアプリケーションがあります。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を更新する他の多くのメソッドの中で何らかの方法で)をすべてのクラスで使用できるようにすることですが、コードは1か所にしかありません。現在、私が作成したすべてのクラスで、(他の多くの中で)次のメソッドを複製しています。
public virtual void MainRTBWriteLine(string msg)
{
if (MainUI != null)
{
MainUI.RTBWriteLine(msg);
}
}
これを抽象クラスに入れることが最善のアプローチではない場合、何ですか?