kat*_*roh 4 c# delegates .net-2.0 c#-2.0
我有两个非常相似的类,基本上做同样的事情.唯一的区别在于提供给每个类的实例的回调处理程序.回调处理程序是不同的,它们被不同的参数接受.我想将这些类中的大部分代码概括为基类.有关如何智能地概括代理代码的任何想法?我在.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
}
Run Code Online (Sandbox Code Playgroud)
编辑:除了调用具有不同签名的委托方法之外,代码的"其余部分"完全相同.像这样的东西:
public void StartListening()
{
Timer timer = new Timer(CheckForChanges, null, 0, 1000);
}
private void CheckForChanges()
{
// pull changes, and pass different params to InvokeHandler()
}
Run Code Online (Sandbox Code Playgroud)
为什么不这样设置:
编辑:我已更新以包含编辑中的方法.
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
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您将拥有在单个类中相同的所有代码,然后是单个类,A并且B可以使用您需要的任何形式的方法.
或者您是否正在寻找一种方式来调用代理,而不管哪个类?
即.就像是:
AbstractBase ab = new A();
ab.InvokeDelegate();
Run Code Online (Sandbox Code Playgroud)