我基本上想要做的就是有一個叫做GetHandler<T>
方法返回Action<T>
。 C#語法允許這個,但老實說,我不知道你應該如何實現這樣的方法。,返回相應的函數來處理參數化類型的參數泛型方法
我想基於什麼類型T是返回不同的功能,所以我現在的嘗試是這樣的:
public override Action<T> GetHandler<T>()
{
if (typeof(T) == typeof(MyType))
{
return delegate (T t)
{
var msg = (MyType)t;
//do stuff
}
}
return null;
}
這不工作,因爲它不能轉換T
到MyType
。我也不能返回delegate (MyType msg)
,因爲它當然不符合簽名。
會在這種情況下的理想是什麼,如果C#允許泛型方法,您可以指定單獨的輸入,然後一個包羅萬象的覆蓋是處理一切單獨處理多個覆蓋。儘管如此,我仍然不知道如何實現這一目標。
所以,你有什麼建議我做的就是儘可能接近此功能可能嗎?我看到它的方式,我的功能幾乎可以做任何事情,因爲T不能轉換爲任何有用的東西。
下面是一個例子使用這種機制:
我們擁有一個具有實現上述行爲實例的集合類。這門課有一個方法SendMessage<T>
。該方法考慮所有包含的實例並在其上調用GetHandler<T>()
,檢查結果是否爲空,如果不是則向處理程序發送消息。
你可以假設任何'T'?爲什麼不實現一個接口來暴露一些以通用方式導致'Func'的屬性或方法? –
meilke
關鍵是要有獨立的處理程序知道如何處理不同的類型。如果我開始將T約束到任何東西,我可能只需要一個'GetHandler',它總是返回剛纔處理該超類的相同函數。 –
你可以舉個例子嗎?我不能完全看不出這是有用的,更多的例子可以幫助找出最好的方法 – Charleh