Дано:
1.
Класс типа CApp, в котором создаются объекты классов типа CDBCRM и CForm:
public class CApp
{
private static CDBCRM m_DBCRM;
private static CForm m_frmMain;
//... и т.п.
}
Класс CDBCRM представляет функции работы с БД ну а форма — понятно...
2.
В классе CDBCRM интерес представляет поле m_Connection:
public class CDBCRM
{
...
public SqlConnection m_Connection;
...
}
3.
Есть необходимость обрабатывать событие m_Connection.StateChange. Тогда появляется следующее:
public class CDBCRM
{
...
//конструктор
public CDBCRM()
{
m_Connection = new SqlConnection();
m_Connection.StateChange += new StateChangeEventHandler(OnStateChange);
}
// и далее по ходу
public delegate void ConnectionEventHandler(object sender, StateChangeEventArgs e);
public static event ConnectionEventHandler ConnectionStateChange;
private void OnStateChange(object sender, StateChangeEventArgs e)
{
if (ConnectionStateChange != null)
ConnectionStateChange(sender, e);
}
...
}
В конструкторе класса CApp соответственно вешаем приемник события ConnectionStateChange
CDBCRM.ConnectionStateChange += new CDBCRM.ConnectionEventHandler(frmMain.OnCRMStateChange);
а в форме соответственно:
public void OnCRMStateChange(object sender, StateChangeEventArgs e)
{
//do some work
}
Вопросы:
1.
Имею я право сделать так:
public class CDBCRM
{
public event ConnectionEventHandler ConnectionStateChange;
}
// и соответственно не
CDBCRM.ConnectionStateChange += new CDBCRM.ConnectionEventHandler(frmMain.OnCRMStateChange);
//a
m_DBCRM.ConnectionStateChange += new CDBCRM.ConnectionEventHandler(frmMain.OnCRMStateChange);
т.к. хочу обрабатывать это событие не на уровне типа, а на уровне объекта класса?
И так и так все работает просто кто-нить развейте сомнения
2.
Неужели так все сложно? В классе делегирующем обработчик на стандартное событие (m_Connection.StateChange)
перехватывать его (m_Connection.StateChange += new StateChangeEventHandler(OnStateChange)),
объявлять свое событие (public static event ConnectionEventHandler ConnectionStateChange) и выставлять его
и еще объявлять свой делегат (public delegate void ConnectionEventHandler(object sender, StateChangeEventArgs e)
Нельзя ли как-нить сразу связать событие m_Connection.StateChange
и обработчик public delegate void ConnectionEventHandler(object sender, StateChangeEventArgs e) ???
а m_Connection объявлять как public ох как не хотца.
В шарпе я недавно, так шо не бейте ногами
Thanks forward