Re[6]: Вопросы по reflection !!!
От: Cinic  
Дата: 31.08.06 18:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Cinic, Вы писали:


C>>Здравствуйте, Mab, Вы писали:


Mab>>>Здравствуйте, Cinic, Вы писали:


C>>>> К тому же нет метода Invoke() и в описании класса Delegate(см. MSDN).

Mab>>>Тем не менее, этот метод есть у всех типов-делегатов. Именно сигнатура этого метода и определяет количество и типы параметров, а также их имена.

C>>А по подробнее можно?


А>Короче, объясняю на раз.


А>Метода Invoke() действительно нет у базовых классов делегатов — ни у Delegate, ни у MulticastDelegate. Он (и ещё 3 других метода) добавляются компилятором. Делегат — это на самом деле просто ещё один класс, производный от MulticastDelegate (я не видел делегатов производных от Delegate). Когда на C# вы пишете что-то типа


А>
А>public delegate bool MyDelegate (int arg1, string arg2);
А>


А>, компилятор создаёт класс MyDelegate, в котором помимо всех членов MulticastDelegate также будут определены ещё 4 метода и среди них как раз Invoke(), который и используется для вызова делегата. Метод Invoke() содержит все те же параметры, что и были указаны при объявлении делегата (или при объявлении события в Visual Basic .NET, в этом случае делегат создаётся компилятором неявно вложенным в класс, где событие объявлено).


А>У вышеуказанного делегата будет создан метод Invoke() вида


А>
А>public bool Invoke (int arg1, string arg2);
А>


А>Итак, чтобы получить список параметров делегата, а также возвращаемое значение, — достаточно получить объект System.Type для типа делегата, далее получить метод Invoke(), и далее извлекать нужную информацию.


Вопрос, а где вы все это прочитали. Я уже не первый раз сталкиваюсь с тем, что то что должно быть написано — не написано. Не посоветуете книжонку? Что нибудь типа "Язык программирования С++" Бьерна Страуструпа. Вот там все было!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.