国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

不能在子類或外部類發布C#事件代碼分析

2020-01-24 03:04:10
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦县| 大同县| 新化县| 苏尼特左旗| 蚌埠市| 美姑县| 澳门| 萝北县| 关岭| 衡南县| 忻州市| 涿州市| 石城县| 柘城县| 耒阳市| 赣榆县| 尉氏县| 富裕县| 阳高县| 庆城县| 西安市| 蓝山县| 新巴尔虎右旗| 铜陵市| 隆回县| 黄龙县| 天镇县| 邳州市| 旬阳县| 军事| 双鸭山市| 合江县| 银川市| 古蔺县| 乐平市| 宝应县| 什邡市| 延长县| 商南县| 商南县| 合作市|