Using System;
Using System. Collections. Generic;
Using System. componentmodel;
Using System. text;
Using System. Windows. forms;
Namespace Deletegatet
{
Public Partial Class Form1: Form
{
Public Form1 ()
{
Initializecomponent ();
}
Private Void Button#click ( Object Sender, eventargs E)
{
Myclass < String , String > _ Myclass = New Myclass < String , String > (); // Instantiate a generic class myclass
_ Myclass. _ mydelegate = New Mydelegate < String , String > (Demomethod ); // Instantiation _ generic delegation of myclass
MessageBox. Show (_ myclass. getvalues ( " Jimmy's book " , " Jimmy " )); // At this time, the compiler can determine that the parameter type is string, and then call the generic method demomethod by Delegate.
_ Myclass. _ myevent + = New Myevent < String , String > (Demoevent < String , String > ); // Subscribe to an event for _ myclass
_ Myclass. invokeevent ( " Jimmy " , " China " ); // Event triggering
}
// Define a delegate with a return value
Public Delegate String Mydelegate < T, s > (T title, s author );
// Define event delegation.
Public Delegate Void Myevent < E, P > (E name, P address );
Public Class Myclass < V, F >
{
// Delegate Declaration
Public Mydelegate < V, F > _ Mydelegate;
// Declare event Delegate
Public Event Myevent < V, F > _ Myevent = Null ;
Public String Getvalues (V title, F author)
{
//Call delegate
Return_ Mydelegate (title, author );
}
Public Myclass ()
{
}
Public Void Invokeevent (V name, F address)
{
If (_ Myevent ! = Null )
{
//Call delegate
_ Myevent (name, address );
}
}
}
Public String Demomethod < T, s > (T title, s author)
{
ReturnTitle. tostring ()+ ", Author:" +Author;
}
Private Void Demoevent < V, F > (V name, F address)
{
MessageBox. Show (name+ "Come from" +Address );
}
}
}