2013-04-10 63 views
2

在我的項目中我有2個接口。聲明一個不同的通用類

IButtonInputHandler<T> & INumericInputHandler<T>

現在我想創建一個類,獲取第一界面\第二接口\他們與暴露基於它們的類型的方法。例如,如果我使用IButtonInputHandler<Buttons>INumericInputHandler<Scroller>構建類,我想公開兩個接收Button和Scroller對象的函數。

如果我只用IButtonInputHandler<Keys>構建類,我想公開一個將接收Buttons對象的函數。

要清楚 - 如果我離開使用2種選項動態我的課會是這樣:

Class<T>和方法將返回T.

基本上我需要的靈活性,有時使用1型,有時使用2種類型。

+3

你所說的「打造一流」是什麼意思?你知道一個類型的可用成員在編譯時由* type *定義,而不依賴於執行時可用的任何東西嗎? (當然可以讓一些成員拋出異常,但成員本身仍然存在...) – 2013-04-10 19:20:09

+0

抱歉不清楚。 該類不會在運行時生成。它是讓其他程序員在他們的代碼中使用它們的接口或接口的代碼 – 2013-04-10 19:24:06

+0

我認爲定義了一個接口,該接口具有期望的行爲 – 2013-04-10 19:35:08

回答

1

製作三類:

public class ButtonInputHandler<T> : IButtonInputHandler<T> 
{ 
    //implement IButtonInputHandler<T> here 
} 

public class NumericInputHandler<T> : INumericInputHandler<T> 
{ 
    //implement INumericInputHandler<T> here 
} 

public class ButtonAndNumericInputHandler<TButton, TNumeric> : 
    ButtonInputHandler<TButton>, INumericInputHandler<TNumeric> 
{ 
    //implement INumericInputHandler<TNumeric> here 
    //(the implementation for IButtonInputHandler<TButton> will be inherited) 
} 
1

你需要使用的是constraints,但是當添加多個約束時沒有OR選項。

你需要做的是創建一個T必須實現的第三接口(或基類)。爲了您的原來的例子,如果ButtonsScroller都實現IInputs你可以宣佈你的接口,

public interface IButtonInputHandler<T> where T : IInputs 
{ 
} 

public interface INumericInputHandler<T> where T : IInputs 
{ 

} 
+0

問題不在於輸入接口的類型。 我想第三類是能夠使用IButtonInputHandler或INumericInputHandler或兩者的一種類型,而不是讓它使用相同的接口的兩種類型 即 ClassX 或ClassX 或ClassX 2013-04-11 16:13:57