C# 匿名方法 委托

 

匿名方法:

C# 支持用于调用一个或多个方法的委托 (delegate)。委托提供运算符和方法来添加或删除目标方法,它也可以在整个 .NET 框架中广泛地用于事件、回调、异步调用、多线程等。

常规委托:

class SomeClass {

        delegate void SomeDelegate();

        public void InvokeMethod() {

               SomeDelegate del = new SomeDelegate(SomeMethod);

               del();

        }

         void SomeMethod() {

                    MessageBox.Show("Hello");

        }

}

可以用一个匿名方法来定义和实现这个方法:

class SomeClass {

          delegate void SomeDelegate();

           public void InvokeMethod() {

                 SomeDelegate del = delegate() { MessageBox.Show("Hello"); };

                 del();

          }

}

=============================================================

class SomeClass {

      delegate void SomeDelegate();

      public void SomeMethod() {

            InvokeDelegate(delegate(){MessageBox.Show("Hello");});

     }

     void InvokeDelegate(SomeDelegate del) {

            del();

     }

}

将参数传递到匿名方法:

class SomeClass {

delegate void SomeDelegate(string str);

public void InvokeMethod() {

SomeDelegate del = delegate(string str) { MessageBox.Show(str); };

del("Hello");

}

}

 一般的匿名方法: 
class SomeClass<T> { 
   delegate void SomeDelegate(T t); 
   public void InvokeMethod(T t) { 
        SomeDelegate del = delegate(T item){...} 
        del(t); 
    } 
} 
注意点:
1.如果匿名方法没有参数,则可以在 delegate 关键字后面使用一对空括号:
class SomeClass { 
    delegate void SomeDelegate(); 
    public void InvokeMethod() { 
        SomeDelegate del = delegate() { MessageBox.Show("Hello"); }; 
        del(); 
    } 
}
2.如果您将 delegate 关键字与后面的空括号一起忽略,
则您将定义一种特殊的匿名方法,它可以指派给具有任何签名的任何委托:
class SomeClass { 
     delegate void SomeDelegate(string str); 
     public void InvokeMethod() { 
        SomeDelegate del = delegate { MessageBox.Show("Hello"); }; 
        del("Parameter is ignored"); 
     } 
} 
 

你可能感兴趣的:(C# 匿名方法 委托)