添加Lesson13
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,102 @@
|
||||
namespace Lesson13_事件
|
||||
{
|
||||
#region 知识点一 事件是什么
|
||||
//事件是基于委托的存在
|
||||
//事件是委托的安全包裹
|
||||
//让委托的使用具有安全性
|
||||
//事件 是一种特殊的变量类型
|
||||
#endregion
|
||||
|
||||
#region 知识点二 事件怎么使用
|
||||
//声明语法:
|
||||
//访问修饰符 event 委托类型 事件名称;
|
||||
//事件的使用:
|
||||
//1.事件是作为 成员变量存在于类中
|
||||
//2.委托怎么用 事件就怎么用
|
||||
|
||||
//事件相对于委托的区别
|
||||
//1.不能在类外部 赋值
|
||||
//2.不能在类外部 调用
|
||||
//注意:
|
||||
//他只能作为成员存在于类和接口以及结构体中
|
||||
class Test
|
||||
{
|
||||
//委托成员变量 用于存储 函数
|
||||
public Action myFun;
|
||||
//事件成员变量 用于存储 函数
|
||||
public event Action myEvent;
|
||||
|
||||
public Test()
|
||||
{
|
||||
//事件的使用和委托 一模一样 只是有些细微的区别
|
||||
myFun = TestFun;
|
||||
myFun += TestFun;
|
||||
myFun.Invoke();
|
||||
myFun();
|
||||
myFun = null;
|
||||
|
||||
myEvent = TestFun;
|
||||
myEvent += TestFun;
|
||||
myEvent.Invoke();
|
||||
myEvent();
|
||||
myEvent = null;
|
||||
}
|
||||
|
||||
|
||||
public void TestFun()
|
||||
{
|
||||
Console.WriteLine("TestFun");
|
||||
}
|
||||
|
||||
|
||||
public void DoEvent()
|
||||
{
|
||||
if (myEvent != null)
|
||||
{
|
||||
myEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 知识点三 为什么有事件
|
||||
#endregion
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Test t = new Test();
|
||||
//委托可以在外部赋值
|
||||
t.myFun += TestFunOut;
|
||||
t.myFun = null;
|
||||
|
||||
//事件不能在外部赋值
|
||||
//但事件可以在外部添加函数
|
||||
//t.myEvent = null;//错误 事件不能在类外部赋值
|
||||
//t.myEvent = TestFunOut;//错误 事件不能在类外部赋值
|
||||
t.myEvent += TestFunOut;
|
||||
t.myEvent -= TestFunOut;//正确
|
||||
|
||||
|
||||
//事件不能在外部调用
|
||||
t.myFun();
|
||||
t.myFun.Invoke();
|
||||
//t.myEvent();//错误 事件不能在类外部调用
|
||||
//t.myEvent.Invoke();//错误 事件不能在类外部调用
|
||||
|
||||
//如果需要在外部调用,那么最好在类中提供一个调用事件的函数
|
||||
t.DoEvent();
|
||||
|
||||
|
||||
Action a = TestFunOut;
|
||||
//event Action a1 = TestFunOut;//
|
||||
|
||||
//总结
|
||||
//事件是对委托的安全包裹
|
||||
}
|
||||
static void TestFunOut()
|
||||
{
|
||||
Console.WriteLine("TestFunOut");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user