H_J_H

------专用杂物房
posts - 26, comments - 1, trackbacks - 0, articles - 119

[导入]委托与事件

Posted on 2006-04-26 21:17 H_J_H 阅读(78) 评论(0)  编辑 收藏 引用
 

委托与事件

1、委托

     通过委托能够实现 把方法做为参数传递给另一个方法。如多线程

     委托的使用方式和类的使用很相似。定义委托的位置和类一样,既可将其直接定义在名称空间之下,也可定义在某个类中。

委托的定义没有方法体,是用关键字delegate来表明它是一个委托,也可以在委托定义中使用访问修饰符publicprivateprotected等。

      所有定义的委托都是继承自.netSystem.Delegate类。

      委托的构造函数总是带有一个参数,这个参数就是委托所要代表的方法,这个方法必须与定义委托时的签名完全匹配,不必考虑方法是静态的还是实例的。用下面的例了来说明。

下面的例子说明了如何通过

 

例:

 

using System;

 

namespace weituo

{

    class Class1

    {

        [STAThread]

        static void Main(string[] args)

        {

            MyDelegate d = new MyDelegate(MyClass.Square);//实例化委托,该实例代表的是MyClass类的Square方法,

            d(2);

            Console.ReadLine();

        }

    }

   

    delegate void MyDelegate(float x); //定义委托

   

    class MyClass

    {

        public static void Square(float x)//定义静态方法

        {

            float result = x * x;

            Console.WriteLine("{0}的平方等于: {1}",x , result);

        }

    }

}

 

上面的实例说明了如何通过委托来调用方法,但是没有说明如何把一个方法作为参数传递给另一个方法。如下例:

 

using System;

 

namespace weitudiaoyongfangfa

{

    class Class1

    {

        [STAThread]

        static void Main(string[] args)

        {

            MyDelegate d = new MyDelegate(MyClass.Square);

            ExecuteMethod(d,2);

        }

        static void ExecuteMethod(MyDelegate d,float x)

         {

            d(x);

         }

       

    }

    delegate void MyDelegate(float x);

 

    class MyClass

    {

        public static void Square(float x)

        {

            float result = x * x;

            Console.WriteLine("{0}的平方等于: {1}",x,result);

        }

    }

}



sopper 2006-04-12 16:47

文章来源:http://sopper.cnblogs.com/archive/2006/04/12/373437.html
只有注册用户登录后才能发表评论。