2011-04-17 34 views
0

我有一個包含方法void DoCommand();的接口。現在我將強制所有子類繼承基類方法DoCommand()。但我需要每個類爲此方法定義一個不同的參數,以便使用適當的參數爲頁面提供服務。強制類實現一個方法而不限制C#中的參數

我該怎麼做? 這是可能的!我正在構建一個ASP.NET Web應用程序,並且實現該方法的頁面已經從頁面基類繼承,所以我認爲Interface是我唯一的選擇。因爲只有一個基類被允許繼承類。


編輯

我希望說明什麼,我需要這個可以讓你幫我想出了一個更好的設計,並堅持像OOP豐富的概念。

我有19頁,每一頁都需要一種方法來收集來自輸入控制器的數據在本頁面並把它放在一個對象(19頁.. 19種類型的對象)

,所以我需要收集( );被迫,那麼每個頁面將作爲一個參數適當的對象類型..它更有意義嗎?

順便說一句,如果你認爲我的設計是完全錯誤的,一個全新的設計模式,歡迎(Y)

+0

你是什麼意思不同的參數?可能你可以在你的界面中做一些類似於void DoCommand(object obj)的東西,然後將它限制在繼承它的類中。我相信只要你的參數類型是一種對象,你應該很好去 – Prescott 2011-04-17 11:35:18

+1

爲什麼你需要這樣做?如果你不知道它有哪些參數,你打算如何調用它? – 2011-04-17 11:35:23

+0

@Prescott ..例如,基類中的方法將是DoCommand。但是,子類[1]將實現它DoCommand(MyItem項目)和子類[2]將它實現爲DoCommand(價格價格)..嗯我會嘗試對象的事情! – lKashef 2011-04-17 11:40:28

回答

1

該接口將需要具有所有功能(具有不同的參數)。沒有理由有一個接口,否則

編輯:您可能希望這樣的事情(使用泛型)

public interface ICollect<T> 
{ 
    void Collect(T obj); 
} 

public class Car : ICollect<Car> 
{ 
    public void Collect(Car obj) 
    { 
    //Do stuff 
    } 
} 
+0

。該接口只是我的工具,強制子類實現此方法..但每個類將實現它與不同的代碼(這是正常情況下),但也不同的參數! ..不可能以任何方式做到這一點,並保持良好的設計模式! – lKashef 2011-04-17 11:44:02

+0

所以你只想說出這個方法的名字?這是不可能的,我不能看到這種實現的任何用處。 – Magnus 2011-04-17 11:51:57

+0

所以你認爲我應該只在每個頁面定義方法並殺死接口的東西? – lKashef 2011-04-17 11:53:16

4

這是不可能的。你能來最接近的是讓你的方法是通用的,並採取一種通用的說法:

protected abstract void DoCommand<T>(T parameter); 

短的,你必須使用某種(如NameValueCollection)的屬性包。

2

我能想到的最好的是:

interface IBlaBla 
{ 
    void DoCommand(params object[] parameters); 
} 

然後每個類接收參數作爲對象的一個​​序列。

否則,你只需要爲每個類定義一個全新的方法。

0

它沒有意義。這違背了多態的整體思想:基類(或接口)有一個方法,子類提供它們自己的實現。如果您不想使用泛型參數,那麼您的子類的方法與基類不同,它們似乎具有相同的名稱。所以你不能強迫你的子類實現'一個給定的名字,但任意參數的例程'。

+0

請檢查我的編輯。 – lKashef 2011-04-17 11:51:26

0

不,這是不可能的。但是,你可以試試這個:

 
void DoCommand(params object[] args); 

相關問題