Namespace System Class _SimpleDelegate Public hasThisPtr As Boolean object As Object methodPtr As VoidPtr Sub _SimpleDelegate( object As Object, methodPtr As VoidPtr ) This.hasThisPtr = True This.object = object This.methodPtr = methodPtr End Sub Sub _SimpleDelegate( methodPtr As VoidPtr ) This.hasThisPtr = False This.object = Nothing This.methodPtr = methodPtr End Sub Function IsEqual( sd As _SimpleDelegate ) As Boolean Return ( This.hasThisPtr = sd.hasThisPtr and ObjPtr(This.object) = ObjPtr(sd.object) and This.methodPtr = sd.methodPtr ) End Function End Class Class DelegateBase Protected simpleDelegates As System.Collections.Generic.List<_SimpleDelegate> Sub _Add( dg As DelegateBase ) Dim i As Long For i=0 To ELM(dg.simpleDelegates.Count) simpleDelegates.Add( dg.simpleDelegates[i] ) Next End Sub Sub _Delete( dg As DelegateBase ) Dim i As Long For i=0 To ELM(This.simpleDelegates.Count) Dim i2 As Long Dim isExist = False For i2=0 To ELM(dg.simpleDelegates.Count) If This.simpleDelegates[i].IsEqual( dg.simpleDelegates[i2] ) Then isExist = True End If Next If isExist Then This.simpleDelegates.RemoveAt( i ) End If Next End Sub Public Sub DelegateBase() simpleDelegates = New System.Collections.Generic.List<_SimpleDelegate>() End Sub /* Sub Operator + ( sd As System._SimpleDelegate ) Add( sd ) End Sub*/ Public End Class End Namespace Function _System_CreateSimpleDynamicDelegate( object As Object, methodPtr As VoidPtr ) As System._SimpleDelegate Return New System._SimpleDelegate( object, methodPtr ) End Function Function _System_CreateSimpleStaticDelegate( methodPtr As VoidPtr ) As System._SimpleDelegate Return New System._SimpleDelegate( methodPtr ) End Function