2009-01-19 36 views
0

我有一個稱爲ICommand的接口,各種類都從中繼承。這些類都使用Run()方法做各種不同的事情,但它們都需要有一個Name屬性和一個Description屬性來指定它們的作用。如何讓子類指定詳細信息,如名稱和描述

問題是,我應該如何讓每個子類指定這些屬性(名稱和說明)。目前,我已經在ICommand中放置了一個屬性,並且我讓每個子類都實現了這些屬性,並在其中聲明瞭一條return "Blah Blah Blah"聲明。這是做這件事的最好方法嗎?還是應該以另一種方式來完成?

對不起,如果這看起來像一個愚蠢的問題 - 我只是從這個OOP設計的東西開始,我想檢查我做對了。

回答

1

我認爲,在界面中定義Readonly屬性是最好的方法。

0

這通常是我採取的方法。我發現要求子類重寫一個虛擬屬性或方法來返回一個描述性標識符是相當容易和快速的。我想你可以用反射來做類似的事情,但是你肯定會受到性能影響。

0

類被認爲是實現一個接口,而不是從它繼承,因爲接口沒有實現(因此沒有繼承)。你當然可以做你正在做的事情,如果Name和Description屬性對你所有類型都是唯一的,那麼你最終會得到多個實現。如果我理解正確,沒有什麼不對。

1

我寫類似的東西(插件),其中每個類都有不同的名稱和描述,並最終實現塞巴斯蒂安說,與一個只讀屬性

interface ICommand { 
string Name { get; } 
string Description { get; } 
... 

classSpecific : ICommand { 
public string Name { get { return "Specific"; }} 
public string Description { get { return "Specific description"; }} 
... 
0

你在正確的道路上。您所描述的內容與Strategy Pattern類似,其中您有幾個實現接口(實際接口或抽象類)的類,然後有自己的方法實現。

0

如果每個實現類的Name和Description屬性都不相同,那麼請盡一切辦法來做你正在做的事情。強制每個類實現這些屬性(通過您的界面)並讓他們提供詳細信息。但是,如果名稱和描述對於許多類都是相同的(儘管名稱和描述可能不會發生),那麼您的另一個替代方案就是一個抽象類,其中Run()是一個抽象方法,Name和描述是虛擬屬性。

相關問題