Delegates and events in C#
-
Upload
mikhail-shcherbakov -
Category
Technology
-
view
115 -
download
2
Transcript of Delegates and events in C#
Что может быть проще:делегаты и события
Михаил ЩербаковIndependent Consultant
Обо мне
Консультант, Upwork’er,
Разработчик проекта IntelliDebugger http://intelliegg.com
Координатор сообществ .NET программистов Москвы и Санкт-Петербурга http://mskdotnet.org/ http://spbdotnet.org
В прошлом менеджер по продуктам и тимлид в Cezurity, Acronis, Luxoft, Boeing
О делегатах
О делегатах
Делегат - ?...
О делегатах
Делегат - это тип, который представляет собой ссылки на методы с определенным списком параметров и возвращаемым типом.
О делегатах
Делегат - это ТИП, который представляет собой ссылкИ на методы с определенным списком параметров и возвращаемым типом.
О делегатах
О делегатах
.class nested public sealed auto ansi Foo extends [mscorlib]System.MulticastDelegate
{
.method public hidebysig specialname rtspecialname instance
void .ctor(object @object, native int @method) runtime managed {}
.method public hidebysig virtual newslot instance
string Invoke(int32 arg) runtime managed {}
.method public hidebysig virtual newslot instance class [mscorlib]System.IAsyncResult
BeginInvoke(int32 arg, class [mscorlib]System.AsyncCallback callback,
object @object) runtime managed {}
.method public hidebysig virtual newslot instance
string EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed {}
}
MulticastDelegate. Properties
MulticastDelegate. Methods
MulticastDelegate. Methods
Invoke(…), .ctor(…)
.class nested public sealed auto ansi Foo extends [mscorlib]System.MulticastDelegate
{
.method public hidebysig specialname rtspecialname instance
void .ctor(object @object, native int @method) runtime managed {}
.method public hidebysig virtual newslot instance
string Invoke(int32 arg) runtime managed {}
.method public hidebysig virtual newslot instance class [mscorlib]System.IAsyncResult
BeginInvoke(int32 arg, class [mscorlib]System.AsyncCallback callback,
object @object) runtime managed {}
.method public hidebysig virtual newslot instance
string EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed {}
}
О проблемахособенностях реализации делегатов
О проблемах делегатов
О проблемах делегатов
О проблемах делегатов
О проблемах делегатов
О проблемах делегатов
О проблемах делегатов
О проблемах делегатов. Exceptions
О проблемах делегатов
Блог Александра Шведова
http://controlflow.github.io/2011/11/14/delegate-equality-proxy.html
http://controlflow.github.io/2011/10/24/delegate-equality-valuetype.html
http://controlflow.github.io/2011/10/24/delegate-equality-base.html
О событиях
О событиях
События это член, который позволяет классу или объекту получать уведомления.
https://msdn.microsoft.com/en-us/library/aa664454(v=vs.71)
О событиях
О событиях
Auto-Implemented Properties
WTF?!!
Field-like Events. C# 3
Field-like Events. C# 4
Field-like Events. Synchronization
Field-like Events. Synchronization
Raise Event
Raise Event
Raise Event
Raise Event
Custom Event Accessors
https://msdn.microsoft.com/en-us/library/8843a9ch.aspx
О проблемах событий
Virtual Events
1) Use a virtual method for triggering the event.2) If you need to override virtual events, write your own handlers.
https://blogs.msdn.microsoft.com/samng/2007/11/26/virtual-events-in-c/
No-op Events
Memory Leak
Source delegate Listener
Memory Leak. Listener-side Fix
Source delegate ListenerWrapper
Memory Leak. Listener-side Fix
Use
WeakEventManager
PropertyChangedEventManager
…
WeakEventManager<TEventSource, TEventArgs>
Memory Leak. Listener-side Fix
Memory Leak. Source-side Fix
Source
Listener
Wrapper
Wrapper MethodInfo
MethodInfo
Listenerhttp://www.codeproject.com/Articles/29922/Weak-Events-in-C
Порефлексируем…
Observer Pattern
Observer Pattern
Reactive Extensions
Спасибо за внимание!
Михаил Щербаков
spbdotnet.org
github.com/yuske
@yu5k3
Independent Consultant