Кто-нибудь знает способ в C # заставить метод "реализовать" делегат?
Рассмотрим этот сильно упрощенный пример: (слабо основанный на сценарии реального мира, с которым я столкнулся)
private delegate int ComputationMethod(int termA, int termB, int termC, int termD);
private int computationHelper(int termA, int termB, int termC, int termD, ComputationMethod computationMethod)
{
//Some common logic^
int answer = computationMethod(termA, termB, termC, termD);
//Some more common logic^
return answer;
}
public int ComputeAverage(int termA, int termB, int termC, int termD)
{
//^^
return computationHelper(termA, termB, termC, termD, computeAverage);
}
public int ComputeStandardDeviation(int termA, int termB, int termC, int termD)
{
//^^
return computationHelper(termA, termB, termC, termD, computeStandardDeviation);
}
//Is there some way to force this method's signature to match ComputationMethod?
private static int computeAverage(int termA, int termB, int termC, int termD)
{
//Implementation omitted
}
//Is there some way to force this method's signature to match ComputationMethod?
private static int computeStandardDeviation(int termA, int termB, int termC, int termD)
{
//Implementation omitted
}
^ - Предположим, что эта логика не может быть вызвана из ^^.
В этом примере я, по сути, хотел бы «заставить» методы соответствовать сигнатуре ComputationMethod таким же образом, как интерфейс вынуждает класс реализовывать определенные методы. Нечто эквивалентное:
private static int computeAverage(int termA, int termB, int termC, int termD) : ComputationMethod
{
//Implementation omitted
}
Да, очевидно, я могу просто скопировать и вставить сигнатуру метода, но концептуально эти реализации ComputationMethod могут быть в совершенно другом классе без доступа к источнику. Кроме того, если кто-то затем придет и изменит сигнатуру метода, которая должна соответствовать определенному делегату, исходный код будет поврежден, но он может молча сломаться в совершенно другом модуле.
Спасибо за любую помощь.