Использование Func<>
:
Предположим, что два класса, A и B, каждый с функцией Foo
(хотя это не является обязательным требованием для этого решения, соблюдайте класс C ниже):
public class A { int Foo() { return 1; } }
public class B { int Foo() { return 2; } }
public class C { int Deviant() { return 3; } }
Затем в некотором фрагменте кода вы напишите:
var a = new A();
var b = new B();
var c = new C();
var fs = new Func<int>[] {() => a.Foo(), () => b.Foo(), () => c.Deviant()};
Итак, чтобы использовать это:
foreach(var func in fs)
Console.WriteLine(func());
, что в свою очередь выдаст:
1
2
3
Лямбда-функции имеют большое значение в C # и являются отличной технологией для изучения.Если вы незнакомы и хотели бы узнать больше, начните со страницы справки Microsoft .
Если вы рассматриваете более крупные интерфейсы, рассмотрите, как уже упоминалось, схему адаптера.Если идея обернуть каждый из ваших объектов в свои конкретные классы адаптеров кажется слишком большой для вашего бакса, то опять же, Func <> на помощь.
public interface ISomeInterface
{
void f1();
int f2(string p1);
...
}
public class FuncImplementation : ISomeInterface
{
public Action Func_f1 { get; set; }
public Func<string,int> Func_f2 { get; set; }
...
void f1() { Func_f1(); }
int f2(string p1) { return Func_f2(p1); }
...
}
Теперь вы можете сделать новые адаптеры встроенными:
var adaptA = new FuncImplementation { Func_f1 = MyF1, Func_f2 = Myf2 };
adaptA.f1();