class Program
{
//委托的参数个数和类型必须和委托穿的方法参数个数和类型必须保持一致
//申明委托的泛型参数 (T, U) 好处是不必关心要知道具体调用方法的参数类型
//在调用委托的时候,可以是任意类型的参数
public delegate T Del<T>( T sender );
public delegate T Delmess<T, U>( T sender, U sender2 );
public delegate T Delmess3<T, U>( int a,string b );
static void Main( string[ ] args )
{
Delmess<int, string> delmess = new Delmess<int, string>( Message4 );
int ass= delmess( 100, "" );
Del<int> del = new Del<int>( Message );
int result= del( 45);
Del<int> del2 = Message;
Del<string> del3 = new Del<string>( Message2 );
string result2 = del3( "hello,delegate!" );
Person p = new Person( 34, "zhangsan" );
Console.WriteLine(""+ p.Age);
Console.WriteLine( "" + p.Name );
Del<Person> del4 = new Del<Person>( Message3 );
del4( p );
Delmess3<int, string> m3 = new Delmess3<int, string>( Message4 );
m3( 100, "" );
}
public static int Message4( int a, string mess )
{
a += 100;
mess = "int,string";
Console.WriteLine( "委托参数int,string 返回 int 类型执行的结果" + a );
Console.WriteLine( "委托参数int,string 返回 int 类型执行的结果"+ mess );
return a;
}
public static Person Message3( Person a )
{
Console.WriteLine( "委托返回 Person 类型执行的结果" + a.Age );
Console.WriteLine( "委托返回 Person 类型执行的结果" + a.Name );
return a;
}
public static string Message2( string a )
{
a+="ok";
Console.WriteLine( "委托返回 T 类型执行的结果" + a );
return a;
}
public static int Message( int i )
{
i += 100;
Console.WriteLine( "委托执行的结果"+i );
return i;
}
}
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public Person( int age,string name)
{
this.Age = age;
this.Name = name;
}
}