Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Alberto_Timakov
1 / 1 / 1
Регистрация: 21.11.2011
Сообщений: 183
#1

Объекту типа делегата не присваивается адрес функции - C#

18.10.2012, 18:33. Просмотров 381. Ответов 3
Метки нет (Все метки)

почему объекту типа делегата:
C#
1
string del(object obj);
не присваивается адрес функции string f(double)? Object ведь любой тип схавать может...

Добавлено через 12 минут
хочу сделать обобщенный делегат без обобщений. Слышал, что можно сделать это, объявив делегат след. образом:

C#
1
public delegate void delll(object obj);
Но он почему то вообще никакие функции не принимает, с такой же сигнатурой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 18:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Объекту типа делегата не присваивается адрес функции (C#):

Динамическая правка входного типа делегата в Expression
Есть вот такой костыль от которого не уйти public static int...

Изменение типа параметров в объявлении делегата Func
У меня есть метод, который сортирует присылаемый список по определенному...

Разница лямбда выражения, делегата (\анонимного делегата), методом (\анонимных методов)
Всё просто: В чём отличия: лямбд, делегатов, анонимных делегатов, методов,...

Отличие делегата от делегата с лямбда-выражением
Народ чем отличается Invoke(new Action(() => button2.IsEnabled = true)); от...

Вызвать 2 функции с помощью делегата
как вызвать эти 2 функций с помощью делегата using System; using...

Метод определения минимума функции с шагом h. С использованием делегата
Составить метод определения минимума функции y=f(x), заданной в дискретных...

3
temcha
28 / 28 / 5
Регистрация: 07.09.2012
Сообщений: 119
18.10.2012, 20:47 #2
насколько я помню, ответ на этот вопрос можно найти в разделе ковариантность и контрвариантность.
В данном случае задействована контрвариантность:
Делегату может быть присвоен метод, типом параметра которого может быть класс, являющийся базовым для класса, указываемого при объявлении делегата. Проще говоря, все работало бы, если бы было примерно так:
делегат:
C#
1
string del(double obj);
метод:
C#
1
string f(object obj)
1
turbanoff
Эксперт Java
4008 / 3743 / 739
Регистрация: 18.05.2010
Сообщений: 9,323
Записей в блоге: 11
Завершенные тесты: 1
19.10.2012, 01:18 #3
Нужно чтобы вызов делегата был корректным, т.е. не падало при несовпадении аргументов.
Код который будет вызывать делегат, думает (по сигнатуре делегата), что делегат принимает параметр object. Пытается вызвать делегат, с параметром, например new object(). А что метод f будет делать с параметром object? Правильно - ничего хорошего. Поэтому для параметров делегатов ковариация запрещена.
0
Alberto_Timakov
1 / 1 / 1
Регистрация: 21.11.2011
Сообщений: 183
19.10.2012, 19:28  [ТС] #4
Спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2012, 19:28
Привет! Вот еще темы с решениями:

Generic методы. Как в этом методе обратиться к row как объекту типа DataRow или DataRowView
Доброго времени суток! Помогите пожалуйста разобраться с дженериками,...

На github не присваивается адрес сайта
Подскажите пожалуйста, возникла проблема захожу на github создаю учетную запись...

Можно ли присвоить объекту основного типа значение объекта пользовательского типа?
Правильно ли я понимаю, что SomeClass obj; int x = obj; или ...

Ошибка C3374 невозможно получить адрес "void function()" пока не будет создан экземпляр делегата
C++/CLR. Работаю с CURL. Пытаюсь вызвать данную функцию: static size_t...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru