委托实现音乐播放器 | 委托实现音乐播放器的缺点 | 事件实现音乐播放器
来源:互联网 发布:卡盟官网源码带后台 编辑:程序博客网 时间:2024/06/07 20:43
//------使用委托实现一个音乐播放器的功能呢。(模拟事件)-------//
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 模拟事件{ /// <summary> /// 音乐播放器类 /// </summary> public class MusicPlayer { //1.音乐开始后触发某些事件 public Action AfterPlayMusic; //2.音乐停止前触发某些事件 public Action BeforeEndMusic; /// <summary> /// 开始播放音乐 /// </summary> private void PlayMusic() { Console.WriteLine("开始播放音乐"); } /// <summary> /// 按下【播放】按钮实现播放音乐 /// </summary> public void StartPlay() { PlayMusic(); if (AfterPlayMusic != null) //音乐开始播放后,判断这个委托是否为空,如果不为空就执行一些事件 { AfterPlayMusic(); //这里就相当于一个事件 } Thread.Sleep(3000);//让系统睡3秒钟(音乐播放时间) } /// <summary> /// 音乐播放完毕 /// </summary> public void EndMusic() { if (BeforeEndMusic != null) //音乐播放完毕之前,判断这个委托是否为空,如果不为空就执行一些事件 { BeforeEndMusic(); } Console.WriteLine("音乐播放完毕!"); } } //------------------------------------------------------------------// class Program { static void Main(string[] args) { //现在我们来使用这个音乐播放器类 MusicPlayer mp3 = new MusicPlayer(); //给委托赋值 mp3.AfterPlayMusic = () => { Console.WriteLine("加载歌词!"); Console.WriteLine("加载动感音符!"); }; //给委托赋值 mp3.BeforeEndMusic = () => { Console.WriteLine("删除歌词!"); Console.WriteLine("停止动感音符!"); }; mp3.StartPlay(); //按下播放按钮, mp3.EndMusic(); //音乐播放完毕 Console.ReadKey(); } }}
//-------------------但是这个委托实现音乐播放器也有很大的缺点,下面我们来看看改了最后一点点的代码(搞破坏)---------------------------//
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 模拟事件{ /// <summary> /// 音乐播放器类 /// </summary> public class MusicPlayer { //1.音乐开始后触发某些事件 public Action AfterPlayMusic; //2.音乐停止前触发某些事件 public Action BeforeEndMusic; /// <summary> /// 开始播放音乐 /// </summary> private void PlayMusic() { Console.WriteLine("开始播放音乐"); } /// <summary> /// 按下【播放】按钮实现播放音乐 /// </summary> public void StartPlay() { PlayMusic(); if (AfterPlayMusic != null) //音乐开始播放后,判断这个委托是否为空,如果不为空就执行一些事件 { AfterPlayMusic(); //这里就相当于一个事件 } Thread.Sleep(3000);//让系统睡3秒钟(音乐播放时间) } /// <summary> /// 音乐播放完毕 /// </summary> public void EndMusic() { if (BeforeEndMusic != null) //音乐播放完毕之前,判断这个委托是否为空,如果不为空就执行一些事件 { BeforeEndMusic(); } Console.WriteLine("音乐播放完毕!"); } } //------------------------------------------------------------------// class Program { static void Main(string[] args) { //现在我们来使用这个音乐播放器类 MusicPlayer mp3 = new MusicPlayer(); //给委托赋值 mp3.AfterPlayMusic = () => { Console.WriteLine("加载歌词!"); Console.WriteLine("加载动感音符!\n\n"); }; //给委托赋值 mp3.BeforeEndMusic = () => { Console.WriteLine("删除歌词!"); Console.WriteLine("停止动感音符!"); }; //现在我想搞点破坏....我不执行下面两段代码了 //mp3.StartPlay(); //按下播放按钮, //mp3.EndMusic(); //音乐播放完毕 //既然我在上面给AfterPlayMusic和BeforeEndMusic这两个委托已经赋值了。我这里就直接执行这两个委托 mp3.AfterPlayMusic(); mp3.BeforeEndMusic(); Console.ReadKey(); } }}
//--------------使用事件来实现一个音乐播放器-------------------//
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 模拟事件{ /// <summary> /// 音乐播放器类 /// </summary> public class MusicPlayer { //1.音乐开始后触发某些事件 public event Action AfterPlayMusic; //事件相对委托的声明,其实就是多了一个event的关键字而已,用法也是一样的 //2.音乐停止前触发某些事件 public event Action BeforeEndMusic; /// <summary> /// 开始播放音乐 /// </summary> private void PlayMusic() { Console.WriteLine("开始播放音乐"); } /// <summary> /// 按下【播放】按钮实现播放音乐 /// </summary> public void StartPlay() { PlayMusic(); if (AfterPlayMusic != null) //音乐开始播放后,判断这个委托是否为空,如果不为空就执行一些事件 { AfterPlayMusic(); //执行事件 } Thread.Sleep(3000);//让系统睡3秒钟(音乐播放时间) } /// <summary> /// 音乐播放完毕 /// </summary> public void EndMusic() { if (BeforeEndMusic != null) //音乐播放完毕之前,判断这个委托是否为空,如果不为空就执行一些事件 { BeforeEndMusic(); //执行事件 } Console.WriteLine("音乐播放完毕!"); } } //------------------------------------------------------------------// class Program { static void Main(string[] args) { //现在我们来使用这个音乐播放器类 MusicPlayer mp3 = new MusicPlayer(); //给事件赋值一个匿名方法(注册事件) mp3.AfterPlayMusic += () => { Console.WriteLine("加载歌词!"); Console.WriteLine("加载动感音符!\n\n"); }; //给事件赋值一个匿名方法(注册事件) mp3.BeforeEndMusic += () => { Console.WriteLine("删除歌词!"); Console.WriteLine("停止动感音符!"); }; mp3.StartPlay(); //按下播放按钮, mp3.EndMusic(); //音乐播放完毕 Console.ReadKey(); } }}
//-----------------------------------下面我们来看看使用事件实现音乐播放器的时候,看我们能不能再搞破坏了--------------------//
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 模拟事件{ /// <summary> /// 音乐播放器类 /// </summary> public class MusicPlayer { //1.音乐开始后触发某些事件 public event Action AfterPlayMusic; //2.音乐停止前触发某些事件 public event Action BeforeEndMusic; /// <summary> /// 开始播放音乐 /// </summary> private void PlayMusic() { Console.WriteLine("开始播放音乐"); } /// <summary> /// 按下【播放】按钮实现播放音乐 /// </summary> public void StartPlay() { PlayMusic(); if (AfterPlayMusic != null) //音乐开始播放后,判断这个委托是否为空,如果不为空就执行一些事件 { AfterPlayMusic(); //这里就相当于一个事件 } Thread.Sleep(3000);//让系统睡3秒钟(音乐播放时间) } /// <summary> /// 音乐播放完毕 /// </summary> public void EndMusic() { if (BeforeEndMusic != null) //音乐播放完毕之前,判断这个委托是否为空,如果不为空就执行一些事件 { BeforeEndMusic(); } Console.WriteLine("音乐播放完毕!"); } } //------------------------------------------------------------------// class Program { static void Main(string[] args) { //现在我们来使用这个音乐播放器类 MusicPlayer mp3 = new MusicPlayer(); //给委托赋值 mp3.AfterPlayMusic += () => { Console.WriteLine("加载歌词!"); Console.WriteLine("加载动感音符!\n\n"); }; //给委托赋值 mp3.BeforeEndMusic += () => { Console.WriteLine("删除歌词!"); Console.WriteLine("停止动感音符!"); }; //现在我想搞点破坏....我不执行下面两段代码了 //mp3.StartPlay(); //按下播放按钮, //mp3.EndMusic(); //音乐播放完毕 //既然我在上面给AfterPlayMusic和BeforeEndMusic这两个事件已经赋值了。我这里就直接执行这两个事件 //mp3.AfterPlayMusic(); //发现直接执在MusicPlayer类外面执行MusicPlayer类的AfterPlayMusic事件报错了 //mp3.BeforeEndMusic(); //发现直接执在MusicPlayer类外面执行MusicPlayer类的BeforeEndMusic事件报错了 //最后我们得出结论: //1.当在一个类的内部定义了一个事件,那么事件在定义事件的类的外部不能直接调用 //2.当在一个类的内部定义了一个事件,那么事件只能在定义事件的类的内部触发(调用) Console.ReadKey(); } }}
我们发现,我们不能搞破坏了。如果不按下播放按钮,音乐就不会开始。 也不会出现没有播放音乐就出现加载歌词,加载动感音符这种不合理的事情了
0 0
- 委托实现音乐播放器 | 委托实现音乐播放器的缺点 | 事件实现音乐播放器
- 一步一步实现音乐播放器
- C实现音乐播放器
- 简单音乐播放器实现
- 实现一个音乐播放器
- android实现音乐播放器
- ios实现音乐播放器后台播放
- Android音乐播放器---实现Notification控制音乐播放
- Android音乐播放器---实现Notification控制音乐播放
- Android音乐播放器---实现Notification控制音乐播放
- Android音乐播放器---实现Notification控制音乐播放
- 实现一个android的音乐播放器
- Android:音乐播放器的实现
- 音乐播放器的实现(简易版)
- winform音乐播放器的实现
- Android 音乐播放器的实现
- Services实现的后台音乐播放器
- 音乐播放器-引导界面的实现
- 黑马程序员---IO流(一)
- 数据结构--利用栈判断括号匹配
- mysql 用指定ID号排序输出结果
- MFC:TabCtrl使用教程
- 四线电阻触摸屏采样滤波算法C语言代码
- 委托实现音乐播放器 | 委托实现音乐播放器的缺点 | 事件实现音乐播放器
- vim入门使用与配置
- HDU 4635 Strongly connected 强连通
- VS 引用WinPcap库的问题
- 【linux驱动笔记】字符设备驱动相关数据结构与算法
- 排查源码编译错误的一些技巧
- hibernate取数据库得到集合问题
- java.exe与javaw.exe的区别
- qt新手学习资料