74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

Func<>, Action<> + ref, out

08.09.2013, 20:15. Показов 5818. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Правильно ли я понимаю, что с Func и Action невозможно использовать ref?
Например это банально не скомпилируется.

C#
1
2
3
4
5
6
7
8
9
void f(ref int a)
{
a++;
}
 
void Main()
{
Action<ref int> a = f;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2013, 20:15
Ответы с готовыми решениями:

Func / Action с параметром ref
почему у меня не получается объявить Action&lt;ref object&gt;?

Делегаты Func и Action, а так же их параметры
С самописными делегатами разобрался Но зачем нужны Func и Action? Это заранее подготовленные...

Написать программу, которая осуществляет обработку массива методом Func, спецификатора ref
Написать программу, которая осуществляет обработку массива методом Func, спецификатора ref и т.п....

Делегат Func<Action<char>, bool, double, double>
Задание: реализуйте пользовательский тип делегата требуемой сигнатуры и выполните с его...

6
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2013, 20:36 2
Kgfq, методы имеют разную сигнатуру:
C#
1
2
3
4
5
6
7
8
9
        void Foo(int a)
        {
            
        }
 
        void Foo(ref int a)
        {
            
        }
и компилятор ничего не скажет, насчет "метод с такой сигнатурой уже объявлен" и это скомпилируется.. В шарпе это - разная сигнатура. Делегатов с ref по стандарту а) нету б) они и не нужны. Я использовал ref только когда только познавал ООП и у меня была говнокривокосая архитектура. Без ref сделать элементарно. Иногда только out нужен, но очень-очень редко.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
08.09.2013, 20:41  [ТС] 3
Psilon, т.е. в обобщение нельзя передать тип с ref?
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2013, 20:47 4
Kgfq, Action и Func это обычные делегаты, просто которые описаны внутри BCL, и вам не надо их объявлять вручную. Никто не мешает объявлять вам свои, хоть и 15 параметрами из которых 4 будут ref.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
08.09.2013, 20:50  [ТС] 5
Psilon,
C#
1
Action<ref int, int> r;// - ругается на ref
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.09.2013, 20:54 6
Kgfq, да, ругается. И даже пишет, почему
C#
1
2
3
4
5
6
7
8
9
10
11
         private delegate void MyDel(int x);
 
         private delegate void MyRefDel(ref int x);
         void Main()
         {
            Action<int> action = i => { };
 
            MyDel myDel = new MyDel(action);
 
            MyRefDel myRefDel = new MyRefDel(action);
         }
много думаем
0
141 / 138 / 22
Регистрация: 16.02.2012
Сообщений: 453
09.09.2013, 00:33 7
Правильно, пока такого типа делегата нет, то это невозможно. Объявляйте свой тип.
0
09.09.2013, 00:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2013, 00:33
Помогаю со студенческими работами здесь

Func<TIn, bool> в Func<TOut, bool>
Подскажите если возможность как-нибудь преобразовать Func&lt;TIn, bool&gt; в Func&lt;TOut, bool&gt;? Есть...

Полиморфизм: ошибка преобразование типа из "ref cl_child" в "ref cl_proto" невозможно
Создал класс предок cl_proto, объявил класс потомок cl_child : cl_proto. Написал отдельную функцию...

Обобщение параметра Func
привет. как сделать обобщение параметра Func? ANY может иметь разных тип. func&lt;int , double&gt; f...

Реальное использование Func<T>
В интернетах полно примеров по типу private bool IsOdd(int i) { return i % 2 != 0; } private...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru