2011-05-29 51 views
1

我已經通過強制模塊實現一個抽象類來實現我的模塊系統,該類包含將由基礎應用程序調用的強制方法。現在我想實現每個模塊的配置表單。我想過回形式的類型,我的模塊骨架類的屬性:強制Type變量的值作爲特殊的基類型

public abstract class Module 
{ 
    public abstract Type ConfigurationForm { get; } 
} 

在顯示配置表單,我只要實現這種類型的表單,並調用Show()方法。

問題是,我想強制模塊返回一個類型爲System.Windows.Forms.Form的子類,否則調用將失敗。執行此操作的正確方法是什麼?

我想過將ConfigurationForm屬性封裝在另一個屬性中,該屬性檢查它是否從Form繼承,但我認爲這不是一個乾淨的方法來完成此操作。

+3

是否有任何理由,「ConfigurationForm」屬性不能使用「Form」的返回類型? – Thomas 2011-05-29 16:57:06

+0

配置表單的類型因模塊而異,因爲它是從'Form'繼承的。或者你的意思是我應該在模塊代碼中實例化表單本身? – 2011-05-29 17:15:07

回答

6

你可以用一個泛型類型參數完成這個

public abstract class Module<F> where F : Form 
{ 
    public Type ConfigurationForm { get { return typeof(F); } } 
} 

但實際上這可能更有意義:

public abstract class Module 
{ 
    public abstract Form CreateConfigurationForm(); 
} 

編輯:使用第二個選項的好處是,你可以編寫代碼與您的模塊類一起工作,而不必知道具體處理哪種模塊

+0

是的,絕對!不知道爲什麼我想在模塊外創建表單的實例...謝謝! – 2011-05-29 17:16:55

1

有沒有辦法限制函數返回Type,它表示從Form繼承的類型。你可以做什麼,直接交回表格:

public abstract Form CreateConfigurationForm(); 

或工廠方法(或者,工廠類):

public abstract Func<Form> ConfigurationFormCreator(); 

另一種選擇是使用仿製藥,如erash建議。

相關問題