C#中的委拖和匿名委拖有什么区别?

解决方案 »

  1.   

    去msdn看下什么叫做匿名方法就晓得什么叫匿名委托了
      

  2.   

    匿名方法(anonymous method)允许一个与委托关联的代码被内联地写入使用委托的地方,这使得代码对于委托的实例很直接。除了这种便利之外,匿名方法还共享了对本地语句包含的函数成员的访问。2.0之前的C#版本中,声明委托的惟一方法是使用命名方法。C#2.0引入了匿名方法,如果使用匿名方法,则不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。简言之以前是委托调用一个方法,现在是直接将方法的代码块作为参数传给委托而不必调用方法。这个网页有详细的说明:http://book.51cto.com/art/200804/70303.htm
      

  3.   

    随便以某个相关词汇搜到了第一个帖子推荐出来:http://www.cnblogs.com/ark/archive/2009/03/06/1404593.html
      

  4.   

    不过要说明的是,现在更多地使用lamda表达式(基于一种特殊的匿名方法),而不是普通的匿名方法。
      

  5.   


    //注册委托方法1:声明一个方法,注册到委托类型中
    //GridView_Book.DataSource = BookHelper.SearchByCondition(new BookHelper.SearchCondition(ByPrice));//注册委托方法2:匿名方法
    //GridView_Book.DataSource = BookHelper.SearchByCondition(delegate(Book book) { return book.Price > 10; });//注册委托方法3:Lambda表达式(2008新特性)
    //GridView_Book.DataSource = BookHelper.SearchByCondition(b => b.Price < 70);//扩展方法(2008新特性)
    GridView_Book.DataSource = BookHelper.Books.SearhByCondition(b => b.Price < 100);
      

  6.   

    是的,现在流行用lamda表达式,不过对于它的好处我还没有理解
      

  7.   

    匿名 lamda表达式的基础吧   
      

  8.   

    class Test
    {
        delegate void TestDelegate(string s);
        static void M(string s)
        {
            Console.WriteLine(s);
        }    static void Main(string[] args)
        {
            // C# 1.0
            TestDelegate testdelA = new TestDelegate(M);        // C# 2.0
            TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };        // C# 3.0
            TestDelegate testDelC = (x) => { Console.WriteLine(x); };        testdelA("C# 1.0,命名方法");
            testDelB("C# 2.0,匿名方法");
            testDelC("C# 3.0,lamda");        Console.ReadKey();
        } 
    }
      

  9.   

    委托让方法作为方法的参数进行使用,分为单一委托和多播委托。
    委托相当于C、C++中的指针,委托时类型安全的,委托要先声明然后实例化,最后才能调用。
    委托是引用类型、凡事可以声明类的地方都可以声明委托,委托的签名必须与实例委托时使用的方法的签名相同,这种方法使用委托,方法是不许存在的。
    delegate double MathDele(double value);//声明委托
            static double Square(double value)
            {
                return value * value;
            }//定义委托要包含的方法
    MathDele op = new MathDele(Square);//实例化委托
    op(3.5);//调用委托
    使用匿名方法使用委托,也就是委托要包含的方法可以不存在,在实例化委托时再去定义。
    delegate double MathDele(double value);//声明委托
    MathDele op1 = delegate(double value) { return value * value; };//实例化委托
    op1(3.5);//调用委托使用匿名方法的好处有很多,比如此处使用匿名方法会少定义一个方法,提高程序编译效率。另外,有时候,委托要包含的方法会包含在另外一个类中,然后使用
    double CreateOp(MathDele myDele,double value)
    {
    double result=myDele(value);
    }
    如果使用匿名方法,这个时候可以省去一个类的定义以及方法的声明,这样会提高程序性能的。
      

  10.   

    委托让方法作为方法的参数进行使用,分为单一委托和多播委托。 
    委托相当于C、C++中的指针,委托是类型安全的,委托要先声明然后实例化,最后才能调用。 
    委托是引用类型、凡事可以声明类的地方都可以声明委托,委托的签名必须与实例委托时使用的方法的签名相同,这种方法使用委托,方法是必须存在的。 
    delegate double MathDele(double value);//声明委托 
            static double Square(double value) 
            { 
                return value * value; 
            }//定义委托要包含的方法 
    MathDele op = new MathDele(Square);//实例化委托 
    op(3.5);//调用委托 
    使用匿名方法使用委托,也就是委托要包含的方法可以不存在,在实例化委托时再去定义。 
    delegate double MathDele(double value);//声明委托 
    MathDele op1 = delegate(double value) { return value * value; };//实例化委托 
    op1(3.5);//调用委托 使用匿名方法的好处有很多,比如此处使用匿名方法会少定义一个方法,提高程序编译效率。另外,有时候,委托要包含的方法会包含在另外一个类中,然后使用 
    double CreateOp(MathDele myDele,double value) 

    double result=myDele(value); 

    如果使用匿名方法,这个时候可以省去一个类的定义以及方法的声明,这样会提高程序性能的。