Reviewing Delegate Members


Visual Basic .NET Unleashed
By Paul Kimmel
Table of Contents
Chapter 9.  Understanding Delegates

Reviewing Delegate Members

Languages like C++ and Object Pascal support function pointers (also referred to as procedural types in Pascal) as simple types. Delegates were subclassed from the Object class and were implemented to support dynamic programming using procedure addresses to implement event handlers. Delegate is a subclass of Object in Visual Basic .NET. Table 9.1 lists and describes public members of Delegate.

Table 9.1. Delegate Members
Member Description
Shared Methods
Combine Combines the delegate invocation lists
CreateDelegate Creates a delegate of the indicated type
Remove Removes the delegate from the invocation list
Shared Operators
op_Equality Tests for equality
op_Inequality Test for inequality
Instance Properties
Method Returns the signature of the procedural type represented by the delegate
Target Gets the class instance that created the delegate
Instance Methods
Clone Returns a shallow copy of the delegate
Invoke Invokes the procedure referred to by the delegate
DynamicInvoke Invokes the Delegate method
Equals Returns True of Instance and single-cast Delegate share the same Target, Method, and invocation list
GetHashCode Returns the hash code representing the instance
GetInvocationList Returns the invocation list
GetObjectData Returns information needed to serialize the Delegate
GetType Returns the type of the instance
ToString Returns a string representing the Delegate


Table 9.1 contains two strangely named methods: op_Equality and op_Inequality. Visual Basic .NET does not currently support operator overloading, but C# does. Because both languages share the same CLR and C# supports operator overloading, there has to be an intermediate form of the overloaded operator for equality and inequality.

It is an exceptionally good practice to implement overloaded operators as regular methods first and implement the overloaded operators in terms of the method. The existence of methods like op_Equality suggests that Visual Basic .NET will support operator overloading soon.

Combine and Remove are commonly used to manage multicast delegates. For the most part, other than Combine and Remove, you will probably be using delegates as procedural types and event handlers. However, for exposure to the behavior of the Delegate methods, a brief example subroutine that demonstrates some of the Delegate methods is defined in Listing 9.6.

Listing 9.6 Delegate methods example
  1:  Private Sub Button1_Click(ByVal sender As System.Object, _  2:  ByVal e As System.EventArgs) Handles Button1.Click  3:   4:  Dim Handler As EventHandler  5:  Handler = AddressOf Form1_Load  6:  Handler.Invoke(sender, e)  7:  Debug.WriteLine(Handler.Method().ToString())  8:  Debug.WriteLine(Handler.Target.ToString)  9:  Debug.WriteLine(Handler.ToString)  10:   11:  Dim Handler2 As EventHandler  12:  Handler2 = AddressOf Form1_Load  13:  Debug.WriteLine(EventHandler.op_Equality(Handler, Handler2))  14:   15:  End Sub 

Listing 9.6 demonstrates a few Delegate members. Line 4 declares Handler as the Delegate EventHandler. Line 5 initializes Handler to the Form1_Load subroutine (which can be created by double-clicking on the form). Line 6 manually invokes the handler. In the example, line 6 causes the program to run the Form1_Load method. Line 7 prints the static Delegate method, resulting in the following line:

 Void Form1_Load(System.Object, System.EventArgs) 

This is the signature of the method. (The signature shown here is actually very similar to a C-style procedure declaration.) Line 8 shows the class containing the Delegate. In the example the default form, Form1, is the owner of this Delegate. Line 9 calls the ToString method. ToString is defined to display the class name , so System. EventHandler is displayed. Lines 11 and 12 declare and initialize a second Delegate to the address of Form1_Load, resulting in the op_Equality test to yield True.


Visual BasicR. NET Unleashed
Visual BasicR. NET Unleashed
Year: 2001
Pages: 222 © 2008-2017.
If you may any questions please contact us: