【单播委托】
委托即可以是有返回值的也可以是无返回值的,它即可以有参数列表也可以无参数列
1、有参数列表有返回值的情况如下:
代码1:
using System;
namespace delegateTest
{
//委托是一个类,应该像声明类的方式声明它
public delegate int MyDelegate(int x,string n );
class DelegateClass
{
public int i;
public string name;
static void Main(string[] args)
{
DelegateClass dc =new DelegateClass();
dc.i = 100;
dc.name ="段静迪";
//实例化委托类对象
MyDelegate myDelegate = new MyDelegate(dc.Display);
//委托实例,类似函数指针,使用是必须传递参数
int i = myDelegate(200,"Duan Jingdi");
Console.WriteLine(i.ToString());
}
//用于测试委托的被调方法
public int Display( int x,string n )
{
Console.WriteLine(x);
Console.WriteLine(n);
return 1;
}
}
}
代码讨论
1、声明委托
以下语句:
public delegate int MyDelegate(int x,string n );
声明一个新的委托类型。每个委托类型都描述参数的数目和类型,以及它可以封装的方法的返回值类型。每当需要一组新的参数类型或新的返回值类型时,都必须声明一个新的委托类型。
2、实例化委托
声明了委托类型后,必须创建委托对象并使之与特定方法关联。与所有其他对象类似,新的委托对象用 new 表达式创建。但是当创建委托时,传递给 new 表达式的参数很特殊:它的编写类似于方法调用,但没有方法的参数。
下列语句:
//实例化委托类对象
MyDelegate myDelegate = new MyDelegate(dc.Display);请注意一旦创建了委托,它所关联到的方法便永不改变:委托对象不可改变。
3、调用委托
创建委托对象后,通常将委托对象传递给将调用该委托的其他代码。通过委托对象的名称(后面跟着要传递给委托的参数,括在括号内)调用委托对象。下面是委托调用的示例:
//委托实例,类似函数指针,使用是必须传递参数
int i = myDelegate(200,"Duan Jingdi");
代码2:
using System;
namespace delegateTest1
{
//委托是一个类,应该像声明类的方式声明它
public delegate int MyDelegate(int x,string n );
class DelegateClass
{
public int i;
public string name;
static void Main(string[] args)
{
//实例化委托类对象
MyDelegate myDelegate = new MyDelegate(Display);
//委托实例,类似函数指针,使用是必须传递参数
int i = myDelegate(200,"Duan Jingdi");
Console.WriteLine(i.ToString());
}
//用于测试委托的被调方法
//静态方法
public static int Display( int x,string n )
{
Console.WriteLine(x);
Console.WriteLine(n);
return 1;
}
}
}
代码讨论:
在代码1中,我们使用了实例方法,既然是实例方法,那么就必须现获得实例,然后再使用实例的方法。但是在本例中,调用了类方法,就没有必要实例化类了