我有兩個非常相似的類,它們基本上都是一樣的。唯一的區別在於提供給每個類的實例的回調處理程序。回調處理程序是不同的,它們被接受不同的參數。我想將這些類中的大部分代碼概括爲一個基類。關於如何智能地概括委託代碼的任何想法?我在.NET 2.0推廣委託代碼(C#)
注:我讀與代表和協方差和逆變與代表文章繼承this非常有用的博客,但我仍然不明白如何,知識可以應用在這裏。
public class A
{
public delegate void AHandler(string param1, string param2);
public void AcceptHandler(string param3, AHandler handler);
public void InvokeHandler(string forParam1, string forParam2);
// the rest is same
}
public class B
{
public delegate void BHandler(int param1);
public void AcceptHandler(int param2, int param3, int param4, BHandler handler);
public void InvokeHandler(int forParam1);
// the rest is same
}
編輯:代碼的「休息」是完全一樣的,只是調用具有不同簽名的委託方法。事情是這樣的:
public void StartListening()
{
Timer timer = new Timer(CheckForChanges, null, 0, 1000);
}
private void CheckForChanges()
{
// pull changes, and pass different params to InvokeHandler()
}
在.NET 4.0之前,協變和反方差是非常有限的。這就是當泛型類型的協變和反變化的主要支持來到生活時 – 2011-05-13 17:50:32
您可以添加一些關於委託和處理程序如何由最常見的代碼調用的細節嗎?我正在考慮某種由基礎定義和調用的抽象OnRaise()事件,但在A和B中被重寫和推送,以便與委託和處理程序做'正確的事情',但我不知道如果不知道更多 – n8wrl 2011-05-13 17:57:04