В специальном случае вы можете использовать Func<string, int>
вместо делегата, как это:
public class Program
{
public static int MyDelegateMethod(string str) => str.Length;
public static void Main(string[] args)
{
var test = new SomeClass(MyDelegateMethod);
test.Test();
}
}
public class SomeClass
{
Func<string, int> MyDelegateMethod;
public SomeClass(Func<string, int> MyDelegateMethod) => this.MyDelegateMethod = MyDelegateMethod;
public void Test() => Console.WriteLine(MyDelegateMethod("Test"));
}
И вы можете обобщить это для любой функции ввода / вывода:
public class Program
{
public static int MyDelegateMethod(string str) => str.Length;
public static void Main(string[] args)
{
var test = new SomeClass<string, int>(MyDelegateMethod);
test.Test("Test");
}
}
public class SomeClass<TIn, TOut>
{
Func<TIn, TOut> MyDelegateMethod;
public SomeClass(Func<TIn, TOut> MyDelegateMethod) => this.MyDelegateMethod = MyDelegateMethod;
public void Test(TIn input) => Console.WriteLine(MyDelegateMethod(input));
}