当前位置:  编程技术>.net/c#/asp.net

不能在子类或外部类发布C#事件代码分析

    来源: 互联网  发布时间:2014-10-24

    本文导语:  代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace EventStudy{    class Program    {        static void Main(string[] args)        {        }    }     class Base    {     ...

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EventStudy
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }

    class Base
    {
        private Action _testEventB;

        public event Action TestEventA;

        public event Action TestEventB
        {
            add
            {
                _testEventB += value;
            }
            remove
            {
                _testEventB -= value;
            }
        }

        protected void OnTestEventA()
        {
            var testEventA = this.TestEventA;

            testEventA();
        }

        protected void OnTestEventB()
        {
            var testEventB = _testEventB;

            testEventB();
        }
    }

    class Child : Base
    {
        public void Do()
        {
            //this.TestEventA();不能这样访问
        }
    }
}



分析

1、TestEventA和TestEventB最终生成的代码结构基本一样,可以知道C#编译器帮我们做了一些工作。
2、其实C#编译器应该可以做到允许我们直接调用的,比如:生成的字段为protected类型,考虑到封装性,编译器没这么做,我觉得是合理的。

为什么一定要这么发布事件(引入一个局部变量):

代码如下:

protected void OnTestEventA()
        {
            var testEventA = this.TestEventA;

            testEventA();
        }



    
 
 

您可能感兴趣的文章:

  • C#项目中代码不能自动缩进怎么办
  • C#线程间不能调用剪切板的解决方法
  • C# datatable 不能通过已删除的行访问该行的信息处理方法
  • 这句话对不对 用final修饰的方法是不能被该类的子类所重载的方法 ?
  • 请问子类能不能重构父类的构造方法,如果能,怎么做?
  • 类A为什么从外包继承一个protected成员后,类A的子类为什么不能访问这个成员
  • 在Qt中,子类模块的属性为什么不能设置呢?
  • 事件能传递吗,就是子类触发了一个鼠标事件,能不能也将这个鼠标事件发给父类
  • java的虚函数是怎样定义的,现想将类A中的变量x定义为只能给子类B与自己类中可访问,而又不能给其他类中用实例A a = new A()的a访问,可
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下不能播放音乐,我用的是Red Hat 9,启动事件音效时有事件声音,但是在播放MP3或视频时却无声音
  • QT键盘事件有哪些键不能被捕捉
  • swing中的监听器能不能带其它参数啊,除了事件本身?
  • GtkTreeIter这个控件不能增加鼠标双击事件吗
  • 是不是applet不能实现事件监听器接口啊?
  • 急!!用JAVA编的按钮能不能触发事件!
  • windows客户端强制结束进程, epoll_wait收不到事件通知(不能完全收到)
  • 灵异事件啊!重新编译后不能执行。换了下类名却能执行
  • 我想调用图片的单击事件,再用函数动态加载图片,这样为什么不能实现???
  • 申请加薪时绝对不能说的4件事!
  • 在LINUX下不能拷影碟还是不能拷.dat文件??
  • sqlserver登陆后报不能为空不能为null的错误
  • 修改/ETC/FSTAB后,系统不能进入,/文件系统只读,不能改,我该怎么办,分不是问题
  • 在Linux下访问Windows的NTFS分区为什么不能写,也不能删里面的东西?
  • EJB QL都支持什么函数啊?能不能支持trim函数呢?如果不能,应该怎么实现这样的功能呢?
  • 如何配置wu-ftp不能匿名登陆同时用户上传后的文件不能删除和修改?
  • 中文问题:我使用的是MEPIS Linux,系统不能显示中文,我能不能把Redhat中的中文字体移植到这个系统中?
  • 救急!Linux下WAS4.0不能启动(DB2 数据库也不能启动)
  • 高难Unix问题,为什么不能通过中国网通的宽带联接(ADSL)不能看到我的网站?
  • 在linux下面使用相关的硬件,为何不能,系统不能检测到modem,网卡,以及其他,请教
  • 新手虚心请教.在线等复....vsftp配置成功后,本机可以FTP上,但其他系统通过FTP工具不能上.防火墙不能关..
  • 在静态上下文中不能引用非静态方法test(),天啊,为什么我的main()不能调用任何其它函数?
  • 愁死了,一开始使用redhat7.3,安装时定制为服务器,squid不能使用,改用redhat9.0,安装时选择服务器安装选项,squid还是不能用
  • Redhat9为什么不能安装?是因为不能识别串口硬盘吗?
  • 为什么我安装完系统后不能输入密码,不能进系统
  • 装完fc1后,设置后可以上网了,网页,链接都可以,可是却不能收邮件,不能登陆,为什么,还有一个小问题,装完系统后,有什么特别好用的
  • 我在VMWARE上装LINUX的 ,安装时不能检测到 我的显卡的型号,安装好后不能进入KDE,高分求助啊
  • ubuntu没有顶部工具栏,不能移动,不能改变大小
  • 我的华硕笔记本M5000安装redhat9不能图形安装,用text模式安装完毕后也不能进xwindow
  • 【新人用Ubuntu】Ubuntu中复制粘贴怎么这么麻烦,CtrC、CtrV不能用,箭头又貌似太灵活不能控制~


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3