我有一個關於如何在我的C#程序中正確使用接口和抽象類的問題。我有許多獨立的「模塊」(BeatsPerMinuteMeasurement,MouseRecorder,ClipboardHistory等)。他們都至少有一個面板(UserControl)和一個「邏輯」(普通類)。首先,沒有繼承。但是,現在我重寫這樣的:( - >)指繼承:使用獨立「模塊」的接口和基類
- SomeLogic - > BaseLogic - > IBaseLogic
- SomePanel - > BasePanel - >用戶控件,IBasePanel
的問題:這是一個好辦法嗎?這裏是我的面板的代碼(這是不奇怪的,因爲繼承錯誤的工作):
interface IBasePanel {
void RegisterEvents();
void Close();
}
abstract class BasePanel : UserControl, IBasePanel {
public BasePanel() {
InitializeComponent();
RegisterEvents(); //Compiler error, compiler cant find it
}
public abstract void InitializeComponent();
}
class MouseKeyRecord_Panel : BasePanel {
//GUI variables (buttons/labels etc.)
public MouseKeyRecord_Panel() {
}
protected override void RegisterEvents() {
//Register EventHandler for buttons etc.
}
protected override void InitializeComponent() {
//Visual Studio auto generated GUI
}
public override void Close() {
//Closing Threads etc.
}
}
編輯1 解決。 我刪除了界面,現在它正在工作。我想我以錯誤的方式使用了接口。我仍然不知道何時使用抽象類以及何時使用接口。因爲,因爲編譯器規定的RegisterEvents()
和Close()
所需的實現並沒有在你的BaseClass
實施出現時
如果你沒有繼承,你爲什麼要開始做呢?目前不工作嗎?無論你試圖達到什麼樣的目標,都可以用組合而不是繼承來解決。 –
好吧,它的工作,但我想重新設計它們使其「更好」。他們都有一些共同的東西。他們都有一個Close,InitializeComponent和RegisterEvents方法。我通過這種方式瞭解到:如果您看到類具有相同的方法,請使用基類,以便每個需要該方法的類都可以繼承它。 – Need