[英]Generalizing delegate code (C#)
我有兩個非常相似的類,基本上做同樣的事情。 唯一的區別在於提供給每個類的實例的回調處理程序。 回調處理程序是不同的,它們被不同的參數接受。 我想將這些類中的大部分代碼概括為基類。 有關如何智能地概括代理代碼的任何想法? 我在.NET 2.0上
注意:我閱讀了這篇非常有用的關於繼承的博客,其代表和關於協方差和與代表相反的文章,但我仍然沒有看到如何在這里應用這些知識。
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()
}
為什么不這樣設置:
編輯 :我已更新,以包含您編輯的方法。
public abstract class AbstractBase {
// "the rest"
public void StartListening() {
Timer timer = new Timer(CheckForChanges, null, 0, 1000);
}
protected abstract void CheckForChanges();
}
public class A : AbstractBase {
public delegate void AHandler(string param1, string param2);
public void AcceptHandler(string param3, AHandler handler);
public void InvokeHandler(string forParam1, string forParam2);
protected override void CheckForChanges() {
//Do stuff for this version of the class
}
}
public class B : AbstractBase {
public delegate void BHandler(int param1);
public void AcceptHandler(int param2, int param3, int param4, BHandler handler);
public void InvokeHandler(int forParam1);
protected override void CheckForChanges() {
//Do stuff for this version of the class
}
}
這樣,您將擁有在單個類中相同的所有代碼,然后各個類A
和B
可以使用您需要的任何形式的方法。
或者您是否正在尋找一種方式來調用代理,而不管哪個類?
即。 就像是:
AbstractBase ab = new A();
ab.InvokeDelegate();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.