У меня есть два очень похожих класса, которые делают одно и то же. Единственное отличие состоит в том, что обработчик обратного вызова предоставляется экземпляру каждого класса. Обработчики обратного вызова различны и принимаются с разными параметрами. Я хотел бы обобщить большую часть кода из этих классов в базовый класс. Любые идеи о том, как разумно обобщить код делегата? Я на .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()
}