【单播委托】

    委托即可以是有返回值的也可以是无返回值的,它即可以有参数列表也可以无参数列

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中,我们使用了实例方法,既然是实例方法,那么就必须现获得实例,然后再使用实例的方法。但是在本例中,调用了类方法,就没有必要实例化类了

posted on 2007-09-26 10:04  段静迪  阅读(372)  评论(1编辑  收藏  举报