关闭

C# 局部函数与事件

标签: C#C#局部函数
628人阅读 评论(0) 收藏 举报
分类:

本文告诉大家使用局部函数可能遇到的坑。

在以前,如果有一个事件public event EventHandler Foo和一个函数private void Program_Foo(object sender, EventArgs e)那么使用函数监听事件是很简单的,当然从事件取消函数也是很简单。请看下面代码

            for (int i = 0; i < 100; i++)
            {
                Foo -= Program_Foo;
                Foo += Program_Foo;
            }
            Console.WriteLine(Foo.GetInvocationList().Length);

结果输出 1

因为GetInvocationList是获得事件有多少监听,从上面代码看到,只有一个监听。

如果把函数修改为局部,请看代码

            for (int i = 0; i < 100; i++)
            {
                Foo -= Program_Foo;
                Foo += Program_Foo;
            }
            Console.WriteLine(Foo.GetInvocationList().Length);

            void Program_Foo(object sender, EventArgs e)
            {

            }

现在他会输出什么?

看起来没有问题,但是如果再做出一些修改,请看下面代码

            for (int i = 0; i < 100; i++)
            {
                F();
            }
            Console.WriteLine(Foo.GetInvocationList().Length);

        private static void F()
        {
            Foo -= Program_Foo;
            Foo += Program_Foo;

            void Program_Foo(object sender, EventArgs e)
            {

            }
        }

现在输出是什么?

还是 1

所以可以直接使用局部函数

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C语言-全局变量与局部变量、全局函数与内部函数

1、全局变量与局部变量
  • le_shuo
  • le_shuo
  • 2014-10-23 17:18
  • 2654

C语言中函数的思考(可以返回局部变量吗)

一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地...
  • kai8wei
  • kai8wei
  • 2015-03-28 10:57
  • 2880

c++返回函数局部对象的引用

函数千万不要返回局部对象的引用或指针     局部变量在函数里面,当函数执行结束后将释放局部变量,如果返回引用或批针这个时候引用或指针指向所指向的内存空间已经释放。指针和引用将是垂悬指针。很危险! ...
  • u014082714
  • u014082714
  • 2015-05-25 14:58
  • 3422

C#处理鼠标和键盘事件

  • 2009-06-08 23:46
  • 26KB
  • 下载

c#事件响应机制csharp响应机制

  • 2010-08-24 14:02
  • 37KB
  • 下载

应用C#进行事件处理

  • 2009-06-23 19:56
  • 22KB
  • 下载

C#构造函数

C#高级(三)构造函数 构造函数是和类名相同的类的一个方法,如果没有显式的声明,在系统会在编译的时候,自 动生成一 个不带参数的,不执行任何动作的构造函数。 但如果显式的声明了构造函数,系统就不...
  • chh19941125
  • chh19941125
  • 2015-02-24 09:02
  • 223

C#和Win32 API函数

C#并不像C++,拥有属于自己的类库。C#使用的类库是.Net框架为所有.Net程序开发提供的一个共有的类库――.Net FrameWork SDK。虽然.Net FrameWork SDK内容十分庞...
  • sevenkj
  • sevenkj
  • 2017-04-04 21:13
  • 233

详细讲解c#常用函数

  • 2009-07-15 16:29
  • 70KB
  • 下载

C#中的”域和属性”知识点的总结

访问一个类的成员变量可以有两种方式:域、属性。域作为Public类型的成员变量访问,而属性不能直接进行访问,必须通过访问器(Assessors)进行。   域(Field) 域的定义:域也叫成员...
  • xjc1278003262
  • xjc1278003262
  • 2013-03-01 21:36
  • 970
    个人资料
    • 访问:588007次
    • 积分:8745
    • 等级:
    • 排名:第2557名
    • 原创:231篇
    • 转载:16篇
    • 译文:25篇
    • 评论:224条
    博客专栏
    文章分类
    最新评论