Re[2]: Собитие + делегат. Некоторые аспекты. Тока ногами не
От: m_CodeTyper Молдова  
Дата: 24.10.05 13:42
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Используйте теги c# и /с# для выделения кода на этом языке. Еще стоит отучаться писать C перед именами классов -- naming guidelines в .NET другие.


Спасибо — учту

_CT>>Имею я право сделать так:


_CT>>
_CT>>public class CDBCRM
_CT>>{
_CT>>   public event ConnectionEventHandler ConnectionStateChange;
_CT>>}

_CT>>// и соответственно не

_CT>>CDBCRM.ConnectionStateChange += new CDBCRM.ConnectionEventHandler(frmMain.OnCRMStateChange);

_CT>>//a

_CT>>m_DBCRM.ConnectionStateChange += new CDBCRM.ConnectionEventHandler(frmMain.OnCRMStateChange);
_CT>>


_CT>>т.к. хочу обрабатывать это событие не на уровне типа, а на уровне объекта класса?

Mab>Событие было объявлено статическим. Поэтому второй способ даже не скомпилируется. Что подразумевается под "на уровне объекта класса"?

Во втором варианте оно уже не было статическим

Mab>Вообще, зачем было делать событие статическим?


В примерах видел. Затрудняюсь ответить

Mab>[Ужас поскипан]

Mab>Если нужно делегировать событие, то делают так:
Mab>
Mab>public static event ConnectionEventHandler ConnectionStateChange
Mab>{
Mab>  add { m_Connection.ConnectionStateChange += value; }
Mab>  remove { m_Connection.ConnectionStateChange -= value; }
Mab>}
Mab>


Не компилируется. App.CDBCRM.m_Connection' denotes a 'field' where a 'class' was expected




Mab>Кстати, зачем в CDBCRM был объявлен тип делегата, ничем не отличающийся от существующего, не ясно.


Где?

Весь и прикол, чтобы делегировать обработчик события OnStateChange стандартного класса (типа SQLConnection) наверх, не открывая при этом самого m_Connection.

Или я не догоняю
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Vad
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.