欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2013年11月25日 10:25:34   作者:  
一個(gè)朋友問(wèn)了一個(gè)問(wèn)題:“為什么不能在子類或外部發(fā)布C#事件?”,我說(shuō)我不知道,要看看生產(chǎn)的IL代碼,下面我們看看

復(fù)制代碼 代碼如下:

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();不能這樣訪問(wèn)
        }
    }
}



分析

1、TestEventA和TestEventB最終生成的代碼結(jié)構(gòu)基本一樣,可以知道C#編譯器幫我們做了一些工作。
2、其實(shí)C#編譯器應(yīng)該可以做到允許我們直接調(diào)用的,比如:生成的字段為protected類型,考慮到封裝性,編譯器沒(méi)這么做,我覺(jué)得是合理的。

為什么一定要這么發(fā)布事件(引入一個(gè)局部變量):

復(fù)制代碼 代碼如下:

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

            testEventA();
        }


相關(guān)文章

  • C#透明窗體實(shí)現(xiàn)方法

    C#透明窗體實(shí)現(xiàn)方法

    這篇文章主要介紹了C#透明窗體實(shí)現(xiàn)方法,涉及C#窗體操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析

    C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析

    #line 指令可能由生成過(guò)程中的自動(dòng)中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號(hào)生成輸出,則可以移除行,然后用 #line 模擬原始行號(hào)
    2014-01-01
  • C#如何給word文檔添加水印

    C#如何給word文檔添加水印

    這篇文章主要為大家詳細(xì)介紹了C#如何給word文檔添加水印的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C# Process調(diào)用外部程序的實(shí)現(xiàn)

    C# Process調(diào)用外部程序的實(shí)現(xiàn)

    這篇文章主要介紹了C# Process調(diào)用外部程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C#讀寫文本文件(.txt)的方法實(shí)例

    C#讀寫文本文件(.txt)的方法實(shí)例

    讀寫文本文件其實(shí)是件很簡(jiǎn)單的事情,這篇文章主要給大家介紹了關(guān)于C#讀寫文本文件(.txt)的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • 淺談c#中const與readonly區(qū)別

    淺談c#中const與readonly區(qū)別

    C#引入了readonly修飾符來(lái)表示只讀域,const來(lái)表示不變常量。顧名思義對(duì)只讀域不能進(jìn)行寫操作,不變常量不能被修改,這兩者到底有什么區(qū)別呢?
    2015-06-06
  • C# 關(guān)于LoadLibrary的疑問(wèn)詳解

    C# 關(guān)于LoadLibrary的疑問(wèn)詳解

    這篇文章主要介紹了C# 關(guān)于LoadLibrary的疑問(wèn)詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#實(shí)現(xiàn)判斷一個(gè)時(shí)間點(diǎn)是否位于給定時(shí)間區(qū)間的方法

    C#實(shí)現(xiàn)判斷一個(gè)時(shí)間點(diǎn)是否位于給定時(shí)間區(qū)間的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)判斷一個(gè)時(shí)間點(diǎn)是否位于給定時(shí)間區(qū)間的方法,涉及C#針對(duì)時(shí)間的轉(zhuǎn)換與判定相關(guān)技巧,需要的朋友可以參考下
    2015-08-08
  • c#利用webmail郵件系統(tǒng)發(fā)送郵件示例分享

    c#利用webmail郵件系統(tǒng)發(fā)送郵件示例分享

    在C#中發(fā)送郵件的方式有2種,一種是使用webmail方式進(jìn)行發(fā)送,另外一種就是采用netmail發(fā)送的方式,這篇文章介紹了c#使用webmail方式發(fā)送郵件示例,大家參考使用吧
    2014-01-01
  • 解決winform界面刷新閃爍問(wèn)題的多種方案

    解決winform界面刷新閃爍問(wèn)題的多種方案

    這篇文章給大家介紹了如何解決winform界面刷新閃爍問(wèn)題的多種方案,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02

最新評(píng)論