Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Создать функцию с подсчетом вызовов

26.02.2013, 20:35. Показов 2301. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, примитивная задача, решил её таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);
        }
    }
}
Но очень многословный синтаксис вызова func.Apply(x) хотелось бы что-нибудь вроде func(x). Да и все методы куда-то деваются, но в таком случае пропадают все методы класса Func. Хотел наследовать, но он оказался sealed. Как быть? Хотел инкапсулировать вызовы в самой функции, но вот не очень получается
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2013, 20:35
Ответы с готовыми решениями:

Создать програму с передачей параметров по ссылке, использованием указателей и подсчетом количества вызовов
Создайте программу, которая демонстрирует возможность роботы с функциями, используя значения параметров по умолчанию, передачу параметров...

Написать функцию, возвращающую количество своих вызовов
Всем привет))) Помогите написать программу, функция которой возвращает количество её вызовов)

Написать функцию со счётчиком вызовов (знающую сколько раз её вызывали)
Задача: Напишите функцию, которая при каждом вызове будет выводить на экран количество раз, которое она вызывалась ранее. Напишите...

24
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
27.02.2013, 20:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Psilon Посмотреть сообщение
К тому же я не сильно понял, как получается значение локальной переменной, которая всегда равна нулю.
Компилятор генерирует класс за нас с двумя полями func и counter.
C#
1
2
            int counter = 0;
            return t => { counter++; return func(t); };
На самом деле преобразуется в такое:
C#
1
2
3
4
5
6
7
8
9
      var generatedObject = new GeneratedClass<T, TResult>();
      generatedObject.func = func;
      generatedObject.counter = 0;
      generatedObject.func;
//...
private class GeneratedClass<T, TResult> {
      public int counter;
      public Func<T, TResult> func;
}
Хак состоит в том, что мы полагаемся на то, что компилятор назовет поле генерируемого класса именно так как захватываемые локальные переменные.
С компилятором MS такое проканывает, а вот на mono вылетает ошибка - http://ideone.com/xB5GtL
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.02.2013, 20:37  [ТС]
turbanoff, так вроде это поведение изменили?
http://blogs.msdn.com/b/rueric... 83705.aspx

хотя я наверное просто опять туплю))

Добавлено через 2 минуты
http://sergeyteplyakov.blogspot.ru/2010/04/c.html
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
27.02.2013, 21:33
Цитата Сообщение от Psilon Посмотреть сообщение
turbanoff, так вроде это поведение изменили?
Там речь только о переменной в foreach. Реализации самих замыканий это не касается.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.02.2013, 23:24  [ТС]
В общем, мой извращенный мозг догадался только до такого кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
 
namespace ConsoleApplication48
{
    class Program
    {
        static void Main()
        {
            FunctionWithCounter<double, double> func = (Func<double, double>)(x => x*x);
            for (int i = 0; i < 5; i++)
            {
                double d = func[i];
            }
            Console.WriteLine(func.Calls);
            Console.ReadKey();
        }
    }
 
    class FunctionWithCounter<T,TResult>
    {
        private readonly Func<T, TResult> function;
        public int Calls { get; private set; }
 
        private FunctionWithCounter(Func<T, TResult> function)
        {
            Calls = 0;
            this.function = function;
        }
 
        public static implicit operator FunctionWithCounter<T, TResult>(Func<T, TResult> func)
        {
            return new FunctionWithCounter<T, TResult>(func);
        }
 
        public TResult this[T arg]
        {
            get
            {
                Calls++;
                return function(arg); 
            }
        }
    }
}
Вопрос: насколько это ужасно
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
27.02.2013, 23:32
Цитата Сообщение от Psilon Посмотреть сообщение
public TResult this[T arg]
метод с традиционным названием Invoke при беглом взгляде на код скажет куда больше информации, хоть индексатор и красивее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2013, 23:32

Создать кнопку с подсчетом нажатий
Создать кнопку. Количество нажатий специально созданной кнопки должно отображаться в специально созданной метке.

Как создать файл-устройство посредством системных вызовов?
(Это часть лабы по Си. Нужно скопировть уже существующее файл-устройство(блочное,символьное) в новый файл, и чтобы он сохранил этот тип.)...

Избегая глобальных переменных напишите функцию, которая будет возвращать количество своих вызовов
Избегая глобальных переменных напишите функцию, которая будет возвращать количество своих вызовов

Создать функцию для вычисления величин. Создать программу которая использует данную функцию
Создать функцию для вычисления величин. Создать программу которая использует данную функцию. f(X, Y,...

1. Создать пользовательскую функцию. Используйте операторы if и Case. 2. Создать Пользовательскую Форму, использующую функцию
1) Создать пользовательскую функцию. Используйте операторы if и Case. 2) Создать Пользовательскую Форму, использующую функцию. Вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru