zoukankan      html  css  js  c++  java
  • c#匿名方法

    //以下示例和说明都源于《visual c# 2005 技术内幕》
    //匿名函数就是没有名字的函数,是专用于委托的函数。

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

    namespace 匿名方法
    {
        public delegate void DelegateClass();
        public delegate void delegatec(out int param);
        public delegate void ADelegate<T>(T tvalue);
        class Program
        {
            static void Main(string[] args)
            {
                int m;
               
                //定义了一个无签名的地匿名函数,该匿名方法的签名是从委托推导出来的。
                //但它的返回类型必须和委托相同。
                DelegateClass del = delegate
                {
                    Console.WriteLine("Running anonyous method");
                };
                del();
                //定义具有一个签名的匿名函数
                delegatec dell = delegate(out int inner)
                {
                    inner = 12;
                    Console.WriteLine(inner);
                };
                dell(out m);
                //外部变量。 匿名方法可以对该方法定义的作用域的包含函数和类成员的局部变量进行引用。
                //在匿名方法中使用的局部变量称为外部变量。
                //一个被捕获的外部变量的生存周期与委托的生存周期相同
                dell = MethodA();
                dell(out m);
                Console.WriteLine(m);

                //范型匿名方法。匿名方法可以使用指定类或委托的范型参数,但是匿名方法不能定义新的范型参数和约束。
                ADelegate<int> ad = delegate(int a) {
                    a = 10;
                    Console.WriteLine(a);
                };
                ad(m);
            }
            public static delegatec MethodA()
            {
                int local = 0;
                return delegate(out int arg)//返回匿名方法
                {
                    arg = ++local;//延长了局部变量local的生存周期
                };
            }
        }
    }
    //注:匿名方法的限制:
    //不要企图跳出一个匿名方法,
    //不要在一个匿名方法中使用一个ref或者out类型的外部变量
    //不要定义新的一般参数或约束
    //不要将属性应用于匿名方法
    //不要用-= 赋值运算符使用匿名方法
    //不能是一个成员方法
    //不能是一个不安全方法

    阅读全文
    类别:默认分类 查看评论


    作者:玄魂
    出处:http://www.cnblogs.com/xuanhun/
    原文链接:http://www.cnblogs.com/xuanhun/ 更多内容,请访问我的个人站点 对编程,安全感兴趣的,加qq群:hacking-1群:303242737,hacking-2群:147098303,nw.js,electron交流群 313717550。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    关注我:关注玄魂的微信公众号

  • 相关阅读:
    Codeforces 1291 Round #616 (Div. 2) B
    总结
    刷新DNS解析缓存+追踪+域名解析命令
    数学--数论--Hdu 5793 A Boring Question (打表+逆元)
    Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
    LeetCode 117 Populating Next Right Pointers in Each Node II
    LeetCode 116 Populating Next Right Pointers in Each Node
    test test
    LeetCode 115 Distinct Subsequences
    LeetCode 114. Flatten Binary Tree to Linked List
  • 原文地址:https://www.cnblogs.com/xuanhun/p/1662365.html
Copyright © 2011-2022 走看看