Можно ли отправить ссылку «sender» без указания его явно как параметра в обработке событий на основе делегатов?Отказать отправителю делегатов
У меня есть внутренний класс, который вызывает некоторые события, и я хочу явно вызывать события для целей тестирования.
public class Manager {
public class DataStruct {
public int Id { get; private set; }
public event EventHandler Event1; // Can't be called by other classes
public void fireEvent1(Event1();} // So another caller...
// Delegates *can* be called by other classes
public delegate void DelegateHandler(DataStruct sender);
public DelegateHandler NewEvent;
public void DelegateHandler(DataStruct sender) {
MessageBox.Show(string.Format(
"{0} raises event", sender.Id));
}
}
}
// Form1 ///////////////////////////////////////////////////////////////////
partial class Form1 {
Manager.DataStruct dsRaiser, dsListener;
private void Form1_Load(object sender, EventArgs e) {
dsRaiser.Event1 += dsListener.SOME_HANDLER;
dsRaiser.NewEvent += dsListener.DelegateHandler;
}
private void button1_Click(object sender, ...) {
dsRaiser.fireEvent1(); // No argument needed but fireEvent1, not Event1().
}
private void button2_Click(object sender, ...) {
dsRaiser.NewEvent(dsRaiser); // Way to omit parameter dsRaiser?
}
//////////////////////////////////////////////////////////////////////////
Можете вы пометить 'Event1' как внутреннюю? –
Возможно, мне не хватает точки модульного тестирования, но разве вы не должны тестировать условия/триггеры, которые заставляют «DataStruct» (что смутно является «классом»?) Поднимать само событие, а не _forcing_ событие стрелять? Что это должно быть тестирование? –