说明:在利用C#开发项目或者阅读DotNET源码中System.Windows.Forms时会遇到event关键字,刚好最近时间充裕,记录一下
C# 事件系统
关键字 :event,delegate
描述: 我有一个播放各种音效的类, 其中有一个播放声音的方法PlayAudio(),当这个方法被触发时,另一个动画类中的一些方法对这个声音播放有监控,一旦这个PlayAudio()触发,那么自己也播放UI动画。我们可能会这样做:
public class AudioPlayerCon
{
public void PlayAudio()
{
CommentatorAnimator._instance.PlayAnimation();
}
}
public class CommentatorAnimator
{
public static CommentatorAnimator _instance;
public void PlayAnimation()
{
}
}
没什么问题,能运行
假设现在定义为版本1,版本2增加了5个动画对这个声音播放有兴趣,版本3增加了几个新的音效方法,有10个动画分别感兴趣,后来到了版本10,这里面的结构就会变得杂乱,因此需要学习事件机制。
这里不说委托和事件,网上有大量教程,下面演示源码:
public delegate void AnimHandler(object s, AnimEventArgs e);
public class AudioPlayerCon : MonoBehaviour
{
public event AnimHandler SlientEvent;
public void PlayAudio()
{
//
if (SlientEvent != null)
SlientEvent(this, new AnimEventArgs(3));
}
}
public class AnimEventArgs :EventArgs
{
private int page;
public AnimEventArgs(int page)
{
this.page = page
}
}
public class CommentatorAnimator : MonoBehaviour
{
private void Awake()
{
apc = AudioPlayerCon.Instance;
apc.SpeakEvent += new AnimHandler(PlayAnimation);
}
public void PlayAnimation(object s, AnimEventArgs e)
{
//播放动画
}
}