Создать функцию с подсчетом вызовов - C#
Формулировка задачи:
В общем, примитивная задача, решил её таким образом:
Но очень многословный синтаксис вызова func.Apply(x) хотелось бы что-нибудь вроде func(x). Да и все методы куда-то деваются, но в таком случае пропадают все методы класса Func. Хотел наследовать, но он оказался sealed. Как быть? Хотел инкапсулировать вызовы в самой функции, но вот не очень получается
using System; namespace ConsoleApplication43 { class Program { static void Main() { var func = new FunctionWithCounter<double, double>(x => x*x); for (int i = 0; i < 5; i++) Console.WriteLine(func.Apply(i)); Console.WriteLine("Count of calls = {0}", func.Calls.ToString()); Console.ReadKey(); } } class FunctionWithCounter<T,TResult> { private readonly Func<T, TResult> func; public int Calls { get; private set; } public FunctionWithCounter(Func<T, TResult> func) { Calls = 0; this.func = func; } public TResult Apply(T parameter) { Calls++; return func(parameter); } } }
Решение задачи: «Создать функцию с подсчетом вызовов»
textual
Листинг программы
static void Main(string[] args) { Func<int, int> func = x => x*x; Func<int, int> func1 = x => x + x; Functor<int, int, bool>.RegisterFunc(ref func); Functor<int, int, object>.RegisterFunc(ref func1); for(int i = 0 ; i< 10; ++i) { func(4); } func1(5); Console.WriteLine(Functor<int, int, bool>.Count); Console.WriteLine(Functor<int, int, object>.Count); Console.ReadKey(); } public class Functor<T1, T2, Fake> { static Functor() { Count = 0; } public static void RegisterFunc(ref Func<T1, T2> func) { Count = 0; Func<T1, T2> func1 = func; func = t1 => { ++Count; return func1(t1); }; } public static int Count { get; private set; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д