Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
6 / 6 / 2
Регистрация: 02.08.2014
Сообщений: 119
1

При сравнении экземпляра делегата с именем метода, имя метода преобразуется автоматически в делегат или нет?

14.10.2014, 14:15. Показов 1358. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Есть несколько вопросов про событий и делегаты:
1) При сравнении экземпляра делегата с именем метода, имя метода преобразуется автоматически в делегат или нет?

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
using System;
 
public delegate void SomeFunctions();
 
class MyClass
{
    static void PrintHello()
    {
        Console.WriteLine("Hello");
    }
 
    static void PrintOK()
    {
        Console.WriteLine("OK!");
    }
 
    static void PrintColor()
    {
        Console.WriteLine("Color");
    }
 
    static void Main()
    {
        SomeFunctions del = PrintOK;
 
        if (del == PrintOK)  // вот здесь имя строки преобразуется в делегат или нет?
            Console.WriteLine("TRUE!");
        else
            Console.WriteLine("FALSE!");
    }
}
2) В C/C++ имя функции без скобочек - это адрес кода функции. В C# есть такое или нет? То есть имя метода без скобочек это делегат или нет?

3) Для событий принято использовать отдельные классы или не обязательно? В коде ниже есть отдельный класс для события. И есть второй класс, в котором есть как событие, так и прочий код, не связанный с событием.

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
using System;
 
public delegate void MyEventHandler();
 
class MyEvent
{
    public event MyEventHandler SomeEvent;
 
    public void OnSomeEvent()
    {
        if(SomeEvent != null)
            SomeEvent();
    }
}
 
class MyClass
{
    static event MyEventHandler SomeEvent;
 
    static void OnSomeEvent()
    {
        if (SomeEvent != null)
            SomeEvent();
    }
 
    static void Main()
    { 
        //какой-то код
    }
}
4)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2014, 14:15
Ответы с готовыми решениями:

создание делегата через имя метода в строке
Нашёл как создать делегат с помощью анонимного метода или лямбда-оператора, но это как-то криво...

Делегат метода экземпляра не может иметь нулевым "this"
Добавлено через 1 час 2 минуты foreach (Control col in this.Controls) { ...

Почему при вызове метода у экземпляра класса он сначала ищет у экземпляра
Всем привет, после прочтения Лутца про ООП появился такой вопрос почему при вызове метода у...

Получить имя метода внутри самого метода
function myFunc() { console.log(arguments.callee.name); } myFunc(); Выводит всё как надо -...

5
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
14.10.2014, 16:35 2
Цитата Сообщение от pavel911 Посмотреть сообщение
Для событий принято использовать отдельные классы или не обязательно? В коде ниже есть отдельный класс для события. И есть второй класс, в котором есть как событие, так и прочий код, не связанный с событием.
нет , события используется для калбэка от объекта, в типе этого объекта событие и объявляется.
смысла событий в отдельных классах нету

Цитата Сообщение от pavel911 Посмотреть сообщение
В C# есть такое или нет? То есть имя метода без скобочек это делегат или нет?
нет
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
14.10.2014, 16:38 3
pavel911,
1) Какой строчки? Там сравниваются делегаты.
2) Делегаты в C# это указатели на функции в C++.
3) Взгляните на те же формыWinForms, там события внутри класса.
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
14.10.2014, 16:39 4
Цитата Сообщение от pavel911 Посмотреть сообщение
При сравнении экземпляра делегата с именем метода, имя метода преобразуется автоматически в делегат или нет?
по идее да . ИМХО.
при сравнении делегата и имени метода проверяется "этот делегат указывает только на этот метод ?"
вопрос для углубленных познаний
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
14.10.2014, 16:58 5
pavel911,
Если в 1 вы про сравнение делегатов, то вот http://msdn.microsoft.com/en-u... .110).aspx
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
14.10.2014, 17:24 6
Цитата Сообщение от pavel911 Посмотреть сообщение
1) При сравнении экземпляра делегата с именем метода, имя метода преобразуется автоматически в делегат или нет?
Да.

Цитата Сообщение от pavel911 Посмотреть сообщение
2) В C/C++ имя функции без скобочек - это адрес кода функции. В C# есть такое или нет? То есть имя метода без скобочек это делегат или нет?
Да, "имя метода без скобочек" — это делегат.
Точнее, группа методов, но при использовании с делегатами компилятор автоматом преобразует ее в делегат.

Цитата Сообщение от pavel911 Посмотреть сообщение
3) Для событий принято использовать отдельные классы или не обязательно?
Не тольно не обязательно, но и вообще не стоит.

Цитата Сообщение от pavel911 Посмотреть сообщение
4)
.
0
14.10.2014, 17:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2014, 17:24
Помогаю со студенческими работами здесь

Сбой вызова метода из-за отсутствия в [System.Object[]] метода с именем "op_Division"
При разборе скрипта, найденного на просторах интернета (Создание пользовательского объекта),...

Переопределение метода в сабклассе делегата
Сабж. Есть класс1, реализует некий метод некого протокола. Как в классе 2(наследник класса1)...

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что...

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая:...


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

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