delegates and events in c#

49
Что может быть проще: делегаты и события Михаил Щербаков Independent Consultant

Upload: mikhail-shcherbakov

Post on 22-Jan-2018

115 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Delegates and events in C#

Что может быть проще:делегаты и события

Михаил ЩербаковIndependent Consultant

Page 2: Delegates and events in C#

Обо мне

Консультант, Upwork’er,

Разработчик проекта IntelliDebugger http://intelliegg.com

Координатор сообществ .NET программистов Москвы и Санкт-Петербурга http://mskdotnet.org/ http://spbdotnet.org

В прошлом менеджер по продуктам и тимлид в Cezurity, Acronis, Luxoft, Boeing

Page 3: Delegates and events in C#

О делегатах

Page 4: Delegates and events in C#

О делегатах

Делегат - ?...

Page 5: Delegates and events in C#

О делегатах

Делегат - это тип, который представляет собой ссылки на методы с определенным списком параметров и возвращаемым типом.

Page 6: Delegates and events in C#

О делегатах

Делегат - это ТИП, который представляет собой ссылкИ на методы с определенным списком параметров и возвращаемым типом.

Page 7: Delegates and events in C#

О делегатах

Page 8: Delegates and events in C#

О делегатах

.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 {}

}

Page 9: Delegates and events in C#

MulticastDelegate. Properties

Page 10: Delegates and events in C#

MulticastDelegate. Methods

Page 11: Delegates and events in C#

MulticastDelegate. Methods

Page 12: Delegates and events in C#

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 {}

}

Page 13: Delegates and events in C#

О проблемахособенностях реализации делегатов

Page 14: Delegates and events in C#

О проблемах делегатов

Page 15: Delegates and events in C#

О проблемах делегатов

Page 16: Delegates and events in C#

О проблемах делегатов

Page 17: Delegates and events in C#

О проблемах делегатов

Page 18: Delegates and events in C#

О проблемах делегатов

Page 19: Delegates and events in C#

О проблемах делегатов

Page 20: Delegates and events in C#

О проблемах делегатов. Exceptions

Page 21: Delegates and events in C#

О проблемах делегатов

Блог Александра Шведова

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

Page 22: Delegates and events in C#

О событиях

Page 23: Delegates and events in C#

О событиях

События это член, который позволяет классу или объекту получать уведомления.

https://msdn.microsoft.com/en-us/library/aa664454(v=vs.71)

Page 24: Delegates and events in C#

О событиях

Page 25: Delegates and events in C#

О событиях

Page 26: Delegates and events in C#

Auto-Implemented Properties

Page 27: Delegates and events in C#

WTF?!!

Page 28: Delegates and events in C#

Field-like Events. C# 3

Page 29: Delegates and events in C#

Field-like Events. C# 4

Page 30: Delegates and events in C#

Field-like Events. Synchronization

Page 31: Delegates and events in C#

Field-like Events. Synchronization

Page 32: Delegates and events in C#

Raise Event

Page 33: Delegates and events in C#

Raise Event

Page 34: Delegates and events in C#

Raise Event

Page 35: Delegates and events in C#

Raise Event

Page 36: Delegates and events in C#

Custom Event Accessors

https://msdn.microsoft.com/en-us/library/8843a9ch.aspx

Page 37: Delegates and events in C#

О проблемах событий

Page 38: Delegates and events in C#

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/

Page 39: Delegates and events in C#

No-op Events

Page 40: Delegates and events in C#

Memory Leak

Source delegate Listener

Page 41: Delegates and events in C#

Memory Leak. Listener-side Fix

Source delegate ListenerWrapper

Page 43: Delegates and events in C#

Memory Leak. Listener-side Fix

Page 44: Delegates and events in C#

Memory Leak. Source-side Fix

Source

Listener

Wrapper

Wrapper MethodInfo

MethodInfo

Listenerhttp://www.codeproject.com/Articles/29922/Weak-Events-in-C

Page 45: Delegates and events in C#

Порефлексируем…

Page 46: Delegates and events in C#

Observer Pattern

Page 47: Delegates and events in C#

Observer Pattern

Page 48: Delegates and events in C#

Reactive Extensions

Page 49: Delegates and events in C#

Спасибо за внимание!

Михаил Щербаков

[email protected]

spbdotnet.org

github.com/yuske

@yu5k3

Independent Consultant