不能在子类或外部类发布C#事件代码分析
不能在子类或外部类发布C#事件代码分析
发布时间:2017-01-07 来源:查字典编辑
摘要:复制代码代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;...

复制代码 代码如下:

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();不能这样访问

}

}

}

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

分析

1、TestEventA和TestEventB最终生成的代码结构基本一样,可以知道C#编译器帮我们做了一些工作。

2、其实C#编译器应该可以做到允许我们直接调用的,比如:生成的字段为protected类型,考虑到封装性,编译器没这么做,我觉得是合理的。

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

复制代码 代码如下:

protected void OnTestEventA()

{

var testEventA = this.TestEventA;

testEventA();

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类