委托和匿名方法--从简单开始(一)

早就想写些在学习C#时的一些认识了,一直没写,原因主要是怕高手说我的文章太没水平,没有贴在博客

园的资格。但又想让大家给点意见帮助我更好的学习,同时希望能给初学C#的朋友带去一点点帮助,最后

决定硬着头皮来写这个系列,也称不上系列,其实是一些我认为比较重要的概念,可能这些概念并不存在

任何关系。但任何重要的概念终归有简单的用法,我便从这些简单的用法开始说起。
第一篇委托和匿名方法:
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的

调用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:
public delegate int PerformCalculation(int x, int y);
与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。

方法可以是静态方法,也可以是实例方法。这样就可以通过编程方式来更改方法调用,还可以向现有类中

插入新代码。只要知道委托的签名,便可以分配自己的委托方法。
以下是我写的一个简单例子;


 delegate double mydelegate(double a,double b);      //声明委托

        static double multiply(double a, double b)      //定义乘法方法
        {
            return a * b;
        }
        static double divide(double a, double b)            //定义除法方法
        {
            return a / b;
        }

        static void operation(string o, double a, double b)
        {
            mydelegate myDel; //实例化一个委托

            if (o == "m")
                myDel = new mydelegate(multiply);
            else       
                myDel = new mydelegate(divide);
            Console.WriteLine("Jieguo shi: {0}",myDel(a,b));

        }
这个例子就可以根据输入的操作符的不同调用不同的方法,从而实现对相同参数进行不同的操作。举这个

例子的主要目的是想说明一些匿名方法,先看一下什么是匿名方法。匿名函数是一个“内联”语句或表达

式,可在需要委托类型的任何地方使用。可以使用匿名函数来初始化命名委托,或传递命名委托(而不是

命名委托类型)作为方法参数。本人将匿名方法理解为是对委托的简单化。接下来看一下这段代码:
 static void anyoperation(string o, double a, double b)
        {
            mydelegate myDele;
            if (o == "m")
                myDele = delegate(double c, double d) { return  c*d ; };
            else
                myDele = delegate(double c, double d) { return c/d ; };
            Console.WriteLine("Jieguo shi: {0}",myDele(a,b));

        }
大家可以对照一下这段代码和上一段代码的区别就可以很清楚的理解什么是匿名了(匿名就是这个方法没

有名字,直接使用了方法体),这只是本人的理解不一定正确,请不要追究责任。需要注意的地方就是方

法的参数部分,一定要弄清哪些参数是哪些委托的。
下面将整个程序的代码都放上来,有兴趣的朋友可以放到自己机子上跑一下。

 

using System;
using System.Collections.Generic;
using System.Text;

namespace weituo
{
    class Program
    {
        static void Main(string[] args)
        {
            double a=0, b=0;
            string c=null;
            Console.WriteLine("QING SHURU LIANGGE SHUZI,RANHOU SHURU CAOZUOFU( 'M' OR 'D')");
            a = double.Parse( Console.ReadLine());
            b = double.Parse( Console.ReadLine());
            c = Console.ReadLine();
            Console.WriteLine("SHIYONG WEITUO :");
            operation(c,a,b);

            Console.WriteLine("SHIYONG NIMINGFANGFA :");
            anyoperation(c,a,b);
            Console.ReadKey();
        }


        delegate double mydelegate(double a,double b);      //声明委托

        static double multiply(double a, double b)           //定义乘法方法
        {
            return a * b;
        }
        static double divide(double a, double b)            //定义除法方法
        {
            return a / b;
        }

        static void operation(string o, double a, double b)
        {
            mydelegate myDel; //实例化一个委托

            if (o == "m")
                myDel = new mydelegate(multiply);
            else       
                myDel = new mydelegate(divide);
            Console.WriteLine("Jieguo shi: {0}",myDel(a,b));

        }

        static void anyoperation(string o, double a, double b)
        {
            mydelegate myDele;
            if (o == "m")
                myDele = delegate(double c, double d) { return  c*d ; };
            else
                myDele = delegate(double c, double d) { return c/d ; };
            Console.WriteLine("Jieguo shi: {0}",myDele(a,b));

        }

    }
}

 


 

posted @ 2008-10-12 09:00  古道  阅读(417)  评论(1编辑  收藏  举报