Arabirim olaylarının gücüne (arabirim içindeki olayları bildirme) iyi bir örnek nedir?Arabirim olaylarının pratik kullanımı
Çoğu zaman arabirimde yalnızca genel soyut yöntemleri gördüm.
Arabirim olaylarının gücüne (arabirim içindeki olayları bildirme) iyi bir örnek nedir?Arabirim olaylarının pratik kullanımı
Çoğu zaman arabirimde yalnızca genel soyut yöntemleri gördüm.
Seri bağlantı noktası veri alındığında sinyal almak için olayları kullandım.
İşte arabirimim.
public interface ISerialPortWatcher
{
event EventHandler<ReceivedDataEventArgs> ReceivedData;
event EventHandler StartedListening;
event EventHandler StoppedListening;
SerialPortSettings PortOptions { set; }
bool Listening { get; set; }
void Stop();
void Start();
}
public class ReceivedDataEventArgs : EventArgs
{
public ReceivedDataEventArgs(string data)
{
Data = data;
}
public string Data { get; private set; }
}
Arabirimlerdeki olaylar, tıpkı yöntemler gibi çalışır. Onları herhangi bir arabirimi nasıl kullanacağınızı kullanabilirsiniz.
public interface IInterface {
event EventHandler QuestionAsked;
}
public class Class : IInterface {
event EventHandler QuestionAsked;
//As with typical events you might want an protected OnQuestionAsked
}
burada benim uygulamalarda 1'inde bu gibi bazı kod var bir örnek
public interface IMainAppWindow
{
event EventHandler Closed;
}
// version 1 main window
public MainForm : Form , IMainAppWindow
{
}
// version 2 main window
public MainWindow : Window , IMainAppWindow
{
event EventHandler Closed;
public void OnClosed(object sender,RoutedEventArgs e)
{
if(Closed != null)
{
Closed(this,e);
}
}
}
olduğunu. Uygulama winform'larda yazıldı, ardından WPF'ye yükseltildi.
.NET çerçevesinde mükemmel bir örnek, INotifyPropertyChanged arabirimidir. Bu arayüz sadece bir üyeden oluşur: PropertyChanged olayı.
WPF'de, bir denetimin bir nesne örneğinin belirli bir özelliğini göstereceğini belirtebilirsiniz. Ancak temel özellik değiştiğinde bu kontrol nasıl güncellenir? ilişkili nesne arabirimini INotifyPropertyChanged uyguluyorsa
, WPF çerçeve PropertyChanged için sadece dinlemek ve uygun güncelleyebilirsiniz. Çerçeve aracılığıyla,
INotifyPropertyChanged kullanılır.
Sadece INotifyPropertyChanged.PropertyChanged Olay
klasik senaryo bakmak pasif görüntüsü MVP kalıptır. Form, NameChanged olayına sahip bir görünüm inteface'i uygular. Görünümü oluşturan/kullanan sunum yapan kişi bu etkinliğe abone olur. Metin kutusundaki ad metni değiştirildiğinde görünüm bu olayı tetikler. Sunum daha sonra bildirilir. Sunum yapan kişi yalnızca olaydan olay hakkında bilgi aldığından test için sahte bir görünüm sağlayabilirsiniz. Görünüm sunucudan tamamen ayrılmıştır.
[Model View Presenter Styles] makalesinde (https://lostechies.com/derekgreer/2008/11/23/model-view-presenter-styles/) üç farklı MVP modelini açıklar, üçüncü örnek olarak adlandırılan ** Preserving Presenter Style ** burada açıklanan ** Pasif Görünüm ** modeli ile en yakın şekilde hizalanmış gibi görünür. – DavidRR
Bir olay oluştururken, [etkinliğin bir kopyasını yapmalısınız] (https://msdn.microsoft.com/en-us/library/w369ty8x%28v=vs.100%29.aspx) (bkz. " OnRaiseCustomEvent() ') ** bir yarış durumu olasılığını önlemek için **: EventHandler handler = this.Closed; if (handler! = null) {...} ' – DavidRR