microsoft-visualbasic-runtime/Extensions/Reflection/Delegate
xieguigang a986d69a4e update headers 2019-05-22 19:02:42 +08:00
..
DataValue.vb update file headers 2019-05-06 18:27:46 +08:00
DelegateFactory.vb update headers 2019-05-22 19:02:42 +08:00
README.md add source files 2018-08-02 20:14:48 +08:00
TypeExtensions.vb update headers 2019-05-22 19:02:42 +08:00

README.md

Delegates

Easy way to create delegates for obtaining/using all member types (fields, properties, indexers, methods, constructors and events) of all types (public and non public) and all visibilities (public, internal, protected and private)

Original works from Github: https://github.com/npodbielski/Delegates

Code is written as an example for articles:

Articles are also available on CodeProject:

Examples

Below few examples of use of DelegateFactory

Constructors

Dim cd = DelegateFactory.DefaultContructor(Of TestClass)()
Dim c1 = DelegateFactory.Contructor(Of Func(Of TestClass))()
Dim c2 = DelegateFactory.Contructor(Of Func(Of int, TestClass))()
Dim c3 = Type.Contructor(GetType(Microsoft.VisualBasic.Language.int))

Static Properties

Getters

Dim spg1 = DelegateFactory.StaticPropertyGet(Of TestClass, String)("StaticPublicProperty")
Dim spg2 = Type.StaticPropertyGet(Of String)("StaticPublicProperty")
Dim spg3 = Type.StaticPropertyGet("StaticPublicProperty")

Setters

Dim sps1 = DelegateFactory.StaticPropertySet(Of TestClass, String)("StaticPublicProperty")
Dim sps2 = Type.StaticPropertySet(Of String)("StaticPublicProperty")
Dim sps3 = Type.StaticPropertySet("StaticPublicProperty")

Instance Properties

Getters

Dim pg1 = DelegateFactory.PropertyGet(Of TestClass, String)("PublicProperty")
Dim pg2 = Type.PropertyGet(Of String)("PublicProperty")
Dim pg3 = Type.PropertyGet("PublicProperty")

Setters

Dim ps1 = DelegateFactory.PropertySet(Of TestClass, String)("PublicProperty")
Dim ps2 = Type.PropertySet(Of String)("PublicProperty")
Dim ps3 = Type.PropertySet("PublicProperty")

Indexers

Getters

Dim ig1 = DelegateFactory.IndexerGet(Of TestClass, int, int)()
Dim ig2 = Type.IndexerGet(Of int, int)()
Dim ig3 = Type.IndexerGet(GetType(int), GetType(int))

Setters

Dim is1 = DelegateFactory.IndexerSet(Of TestClass, int, int)()
Dim is2 = Type.IndexerSet(GetType(int), GetType(int))
Dim is3 = Type.IndexerSet(Of int, int)()

Static Fields

Get value

Dim sfg1 = DelegateFactory.StaticFieldGet(Of TestClass, String)("StaticPublicField")
Dim sfg2 = Type.StaticFieldGet(Of String)("StaticPublicField")
Dim sfg3 = Type.StaticFieldGet("StaticPublicField")

Set value

Dim sfs1 = DelegateFactory.StaticFieldSet(Of TestClass, String)("StaticPublicField")
Dim sfs2 = Type.StaticFieldSet(Of String)("StaticPublicField")
Dim sfs3 = Type.StaticFieldSet("StaticPublicField")

Instance Fields

Get value

Dim fg1 = DelegateFactory.FieldGet(Of TestClass, String)("PublicField")
Dim fg2 = Type.FieldGet(Of String)("PublicField")
Dim fg3 = Type.FieldGet("PublicField")

Set value

Dim fs1 = DelegateFactory.FieldSet(Of TestClass, String)("PublicField")
Dim fs2 = Type.FieldSet(Of String)("PublicField")
Dim fs3 = Type.FieldSet("PublicField")

Static Methods

Dim sm1 = DelegateFactory.StaticMethod(Of TestClass, Func(Of String, String))("StaticPublicMethod")
Dim sm2 = Type.StaticMethod(Of Func(Of String, String))("StaticPublicMethod")
Dim sm3 = Type.StaticMethod("StaticPublicMethod", GetType(String))
Dim sm4 = Type.StaticMethodVoid("StaticPublicMethodVoid", GetType(String))

Instance Methods

Dim m1 = DelegateFactory.InstanceMethod(Of Func(Of TestClass, String, String))("PublicMethod")
Dim m2 = DelegateFactory.InstanceMethod2(Of Func(Of TestClass, String, String))("PublicMethod")
Dim m3 = Type.InstanceMethod("PublicMethod", GetType(String))
Dim m4 = Type.InstanceMethodVoid("PublicMethodVoid", GetType(String))

Generic Methods

Static

Dim sg1 = DelegateFactory.StaticMethod(Of TestClass, Func(Of TestClass, TestClass), TestClass)("StaticGenericMethod")
Dim sg2 = Type.StaticMethod(Of Func(Of TestClass, TestClass), TestClass)("StaticGenericMethod")
Dim sg3 = Type.StaticGenericMethod("StaticGenericMethod", { Type }, { Type })
Dim sg4 = Type.StaticGenericMethodVoid("StaticGenericMethodVoid", { Type }, { Type })

Instance

Dim ig1 = DelegateFactory.InstanceMethod(Of Func(Of TestClass, TestClass, TestClass), TestClass)("GenericMethod")
Dim ig2 = Type.InstanceMethod(Of Func(Of TestClass, TestClass, TestClass), TestClass)("GenericMethod")
Dim ig3 = Type.InstanceMethod(Of Func(Of object, TestClass, TestClass), TestClass)("GenericMethod")
Dim ig4 = Type.InstanceGenericMethod("GenericMethod", { Type }, { Type })
Dim ig5 = Type.InstanceGenericMethodVoid("GenericMethodVoid", { Type }, { Type })

Events

Add Accessors

Dim ea1 = DelegateFactory.EventAdd(Of TestClass, TestClass.PublicEventArgs)("PublicEvent")
Dim ea2 = Type.EventAdd(Of TestClass.PublicEventArgs)("PublicEvent")
Dim ea3 = Type.EventAdd("PrivateEvent")

Remove Accessors

Dim er1 = DelegateFactory.EventRemove(Of TestClass, TestClass.PublicEventArgs)("PublicEvent")
Dim er4 = Type.EventRemove(Of TestClass.PublicEventArgs)("PublicEvent")
Dim er5 = Type.EventRemove("PrivateEvent")