public static readonly RoutedEvent RenameEvent = EventManager.RegisterRoutedEvent("RenameEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ImagesDisplay));
private TextBox renameTextBox; public static readonly RoutedEvent SaveRotationEvent = EventManager.RegisterRoutedEvent("SaveRotationEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ImagesDisplay));
//没有见过这样的写法,像是属性,高手指点一下.
public event RoutedEventHandler Rename
{
add
{
base.AddHandler(RenameEvent, value);
}
remove
{
base.RemoveHandler(RenameEvent, value);
}
}
//没有见过这样的写法,像是属性,高手指点一下.
public event RoutedEventHandler SaveRotation
{
add
{
base.AddHandler(SaveRotationEvent, value);
}
remove
{
base.RemoveHandler(SaveRotationEvent, value);
}
}
{
add
{
base.AddHandler(SaveRotationEvent, value);
}
remove
{
base.RemoveHandler(SaveRotationEvent, value);
}
}
//属性是 GET SET 啊
http://kb.cnblogs.com/a/1271104/
//具体怎么解释你可以看看CLR Via C#
--------------------------------------------------------------------------------下列範例說明具有自訂 add 和 remove 存取子的事件。如需完整的範例,請參閱 HOW TO:實作介面事件 (C# 程式設計手冊)。 VBC#C++F#JScript複製
class Events : IDrawingObject
{
event EventHandler PreDrawEvent; event EventHandler IDrawingObject.OnDraw
{
add
{
lock (PreDrawEvent)
{
PreDrawEvent += value;
}
}
remove
{
lock (PreDrawEvent)
{
PreDrawEvent -= value;
}
}
}}
一般而言,您不需要提供自訂的事件存取子。在大部分情況下,編譯器 (Compiler) 在您宣告事件時自動產生的存取子已經足夠。
与属性差不多。在WinForm中也一样。
我常这样用。
例如:
public delegate void IrdaPcpProgressEventHandler(object sender, IrdaPcpEventArgs e);
private event IrdaPcpProgressEventHandler sendProgressEvent; //发送进程事件 /// <summary>
/// 发送过程处理事件
/// </summary>
public event IrdaPcpProgressEventHandler SendProgressEvent
{
add
{
sendProgressEvent += value;
}
remove
{
sendProgressEvent -= value;
}
}
.net在语法上支持为多播委托赋值,其实就是将多个符合委托的处理函数,赋值给该委托。这样委托(或者委托定义的事件)触发时,就会调用这些处理函数。add
remove
是语法层面的支持,你知道原理即可。