我目前在2個抽象類中有2個具體方法。一個類包含當前方法,而另一個包含傳統方法。例如。c#委託和抽象類
// Class #1
public abstract class ClassCurrent<T> : BaseClass<T> where T : BaseNode, new()
{
public List<T> GetAllRootNodes(int i)
{
//some code
}
}
// Class #2
public abstract class MyClassLegacy<T> : BaseClass<T> where T : BaseNode, new()
{
public List<T> GetAllLeafNodes(int j)
{
//some code
}
}
我想讓相應的方法在應用程序的相對應場景中運行。我打算寫一個委託來處理這個問題。我的想法是,我可以調用委託並編寫邏輯來處理調用哪個方法,具體取決於調用哪個類/項目(至少這是我認爲代表的用途以及它們如何使用)。
不過,我對這個話題的一些問題(經過一些google搜索):
1)是否有可能有知道駐留在不同類別2(或更多)方法的委託? 2)是否有可能創建一個衍生抽象類的代理(如上面的代碼)? (我的猜測是否定的,因爲委託創建傳入類的具體實現) 3)我試圖爲上面的代碼編寫一個委託。但是我在技術上的挑戰:
public delegate List<BaseNode> GetAllNodesDelegate(int k);
GetAllNodesDelegate del = new GetAllNodesDelegate(ClassCurrent<BaseNode>.GetAllRootNodes);
我得到了以下錯誤:
An object reference is required for the non-static field, method, property ClassCurrent<BaseNode>.GetAllRootNodes(int)
我可能誤會了什麼......但如果我必須在調用的類手動聲明一個代理,並且如上所述手動傳遞函數,那麼我開始質疑委託是否是處理我的問題的好方法。
謝謝。
如果你希望委託映射到一個特定的方法,如果它是類型'ClassCurrent'('GetAllRootNodes')和另一個方法,如果它是類型'MyClassLegacy'('GetAllLeaveNodes')那麼你將不得不知道類型的情況。而如果它共享一個通用接口,則不需要知道它實現給定接口的類型。用於爲每種類型設置委託的代碼將包含一個if來檢查類型或將特定類型作爲每個允許類型的參數的方法。 – Cornelius 2010-03-17 08:46:52
@Cornelius - 你認爲代表是什麼?這聽起來像你認爲它與C中的函數指針相同。 – 2010-03-17 09:10:35
委託函數比函數指針更強大,因爲它們是「第一類方法」並且具有閉包,但這隻允許您以多態方式傳遞它們,而不會消除上面評論中設置它的複雜性。 – Cornelius 2010-03-17 09:29:11