亲宝软件园·资讯

展开

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

人气:0
想了解不能在子类或外部类发布C#事件代码分析的相关内容吗,在本文为您仔细讲解不能在子类或外部类发布C#事件的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:子类,外部类,发布C#事件,下面大家一起来学习吧。

复制代码 代码如下:

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();
        }


加载全部内容

相关教程
猜你喜欢
用户评论