C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 15:39
Оценка:
Добрый день всем.
В C# я новичок и когда встретил такую конструкцию начал чесать репу — она покраснела и воспалилась, но результата не дала )

private delegate RV Function<RV, A>(A a);


можно простыми словами объяснить что тут объявлено
Спасибо
Re: C#: объясните что означает данная конструкция
От: _FRED_ Черногория
Дата: 31.05.10 15:53
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>В C# я новичок и когда встретил такую конструкцию начал чесать репу — она покраснела и воспалилась, но результата не дала )

А>private delegate RV Function<RV, A>(A a);

А>можно простыми словами объяснить что тут объявлено

Делегат. Точнее — generic delegate. Подробнее о дженериках вообще и generic delegate можно прочитать в статьях на этом сайте:
Help will always be given at Hogwarts to those who ask for it.
Re: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 15:55
Оценка:
Здравствуйте, Аноним, Вы писали:


А>private delegate RV Function<RV, A>(A a);


Объявляется приватный обобщенный делегат возвращающий значение типа RV и принимающий параметр типа А.
Re[2]: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 15:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>private delegate RV Function<RV, A>(A a);

А>Объявляется приватный обобщенный делегат возвращающий значение типа RV и принимающий параметр типа А.

Спасибо!
а что такое а маленькое в (A a)?
Re[2]: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 16:05
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Делегат. Точнее — generic delegate. Подробнее о дженериках вообще и generic delegate можно прочитать в статьях на этом сайте:

_FR>
Спасибо за ссылки, но был бы Вам очень признателен если бы еще и написали своими словами что тут объявлено

в тексте встречается такое объявление локальной переменной

...
    Function<string, IAsyncResult> endHandler = delegate
    {
      ...
    }
....



и без объявления

private delegate RV Function<RV, A>(A a);


вышеописанное объявление не проходило, а после стало компилится — как объявление приватного делегата связано с определением endHandler?
связь какаято непонятная
Re[3]: C#: объясните что означает данная конструкция
От: _FRED_ Черногория
Дата: 31.05.10 16:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в тексте встречается такое объявление локальной переменной

А>...
А>    Function<string, IAsyncResult> endHandler = delegate
А>    {
А>      ...
А>    }
А>....

А>и без объявления
А>private delegate RV Function<RV, A>(A a);

А>вышеописанное объявление не проходило, а после стало компилится

"Function<string, IAsyncResult>" в объявлении "endHandler" — это тип переменной "endHandler".
"delegate RV Function<RV, A>(A a)" — это объявление типа. Естественно, пока объявления типа небыло (просто "не проходило" писать нельзя: нужно писать "не проходило, при компиляции возникала ошибка такая-то") программа не компилировалась.

А>- как объявление приватного делегата связано с определением endHandler?

А>связь какаято непонятная

Делегат — это тип данных. В некотором роде "специальных тип", потому что объявлеется специальным синтаксисом. Точно так же и enum — это специальный тип, который объявляется своим синтиксисом.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 16:24
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>>>private delegate RV Function<RV, A>(A a);

А>>Объявляется приватный обобщенный делегат возвращающий значение типа RV и принимающий параметр типа А.

А>Спасибо!

А>а что такое а маленькое в (A a)?

в тексте программы затем встречается определение локальной переменной

Function<string, IAsyncResult> endHandler = delegate {.....}


без объявления private delegate RV Function<RV, A>(A a); вышеуказанная конструкция не компилилась, непойму как они связаны
Re[4]: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 16:30
Оценка:
Здравствуйте, _FRED_, Вы писали:

Большое спасибо за помощь!
Re[4]: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 31.05.10 16:58
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>>>>private delegate RV Function<RV, A>(A a);

А>>>Объявляется приватный обобщенный делегат возвращающий значение типа RV и принимающий параметр типа А.

А>>Спасибо!

А>>а что такое а маленькое в (A a)?

А>в тексте программы затем встречается определение локальной переменной


А>
А>Function<string, IAsyncResult> endHandler = delegate {.....}
А>


А>без объявления private delegate RV Function<RV, A>(A a); вышеуказанная конструкция не компилилась, непойму как они связаны


Делегат — это по сути указатель на функцию. Поскольку указатель может ссылаться на данные разных типов, нужно объявить его тип, чтобы компилятор "знал" на данные какого типа ссылается указатель и мог при компиляции обнаружить возможные ошибки. Поскольку делегат это указатель на функцию, а функция может принимать параметры и возвращать значение, то в объявлении типа делегата указывается тип возвращаемого значения и типы формальных параметров передаваемых функции. В общем случае объявление делегата выглядит так:
[спецификатор доступа] delegate {тип возвращаемого функцией значения} {имя типа делегата}([список формальных параметров функции]);

где {} — обязательные параметры, [] — необязательные
В данном случае конструкция private delegate RV Function<RV, A>(A a); обьявляет тип:
со спецификатором доступа — private
возвращаемым типом — RV
именем типа делегата — Function
и одним формальным параметром a типа A.
Конструкция <RV, A> говорит о том, что этот тип является generic'ом.
Соответственно такой делегат может ссылаться на функции которые полностью соответствуют указанному описанию.
Например "без ущерба для здоровья" можно объявить тот-же самый делегат и так:
private delegate ReturnType Function<ReturnType, ParameterType>(ParameterType a)

Ну вот, тип мы объявили теперь надо определить саму переменную. Вот она и определяется дальше:
Function<string, IAsyncResult> endHandler = delegate {.....}

Эта переменная имеет имя endHandler, тип Function<string, IAsyncResult>(т.е. тип нашего делегата). Кроме того здесь применяется инициализация с использованием анонимного метода delegate {.....}. В фигурных скобках указывается исполняемый код, которому передается один параметр a типа A, т.е. он будет доступен в коде, и этот код возвращает значение типа RV.

Вообще эту тему не так-то просто раскрыть, читайте по порядку про:
1) Делегаты;
2) Анонимные методы(ссылка выше — Нововведения в C# 2.0);
3) Generic'и(ссылка выше — Обобщения);
Кроме того, нужно ознакомиться с:
4) Приведение типов, Boxing/Unboxing(в Google);
5) Изменяемые и не изменяемые типы(mutable/immutable types -> в Google)

Ну как-то так...
Re[5]: C#: объясните что означает данная конструкция
От: Аноним  
Дата: 01.06.10 06:02
Оценка:
Здравствуйте, Аноним, Вы писали:

Такого подробного, дружелюбного и понятного ответа еще не видал тут )))
Спасибо, лучше б Майкрософт Вам платило деньги за написание МСДН а не сама писала сухие, малоинформативные спецификации и примеры!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.