【.NET基础加强第九课--事件】

news2025/1/25 4:47:35

.NET基础加强第九课--事件

  • Event 关键字
    • 委托,事件对比
    • 举例: 音乐播放事件
    • 用户对象,登录
    • 程序集
    • 反射

Event 关键字

委托,事件对比

委托是一种数据类型,可以用=调用。
事件:对象(对委托的一种封闭装)。只能在类内部,只能通过+=,或-=调用。 事件的内部是用委托实际 的。

举例: 音乐播放事件

MusicPlayer musicPlayer = new MusicPlayer();
musicPlayer.AfterStart = () =>
{
global::System.Console.WriteLine(“加载歌词”);
};
musicPlayer.StartPlay();
musicPlayer.BeforeStop = () =>
{
global::System.Console.WriteLine(“删除歌词”);
};
musicPlayer.EndMusic();

// 委托可以用=直接赋值,可以将以前注册的方法都覆盖掉
// 事件在外部不能直接调用
musicPlayer = null;

Console.ReadKey();

public class MusicPlayer
{
public Action AfterStart;
public Action BeforeStop;
private void PlayMusic()
{
Console.WriteLine(“播放音乐”);

}

public void StartPlay()
{
    PlayMusic();
    if(AfterStart != null)
    {
        AfterStart();
    }
    Thread.Sleep(2000);
}

public void EndMusic()
{
    if(BeforeStop != null)
    {
        BeforeStop();
    }
    Console.WriteLine("播放完结");
}

}

用户对象,登录

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    int count = 0;
    private void button1_Click(object sender, EventArgs e)
    {
        count++;

    }

    private void uControlButtonExt1_Load(object sender, EventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //uControlButtonExt1.TripleClick = () =>
        //{
        //    MessageBox.Show("hello print");
        //};
        ucLogin1.UserLoginValidating += new Action<object, UserLoginEventArgs>(ucLogin1_UserLogin);
    }

    // 事件校验方法
    void ucLogin1_UserLogin(object sender, UserLoginEventArgs e)
    {
        if(e.LoginId == "admin")
        {
            e.IsOk = true;  
        }  
    }

    private void uControlButtonExt21_Load(object sender, EventArgs e)
    {
        // 事件不能用=赋值,只能用+=或-=赋值
        uControlButtonExt21.Tripleclick += () =>
         {
             MessageBox.Show("事件");
         };
    }

    private void ucLogin1_Load(object sender, EventArgs e)
    {

    }
}

事件窗体

程序集

程序集包含:类型元数据,程序集元数据,IL代码,资源文件

反射

动态获取程序集,并获取类中的信息,

// 绝对路径
Assembly assembly = Assembly.LoadFile(@“D:\MVC\MVCDemo\文件操作\bin\Debug\net6.0\文件操作.dll”);

1, 获取该程序集中的所有类型
Type[] types = assembly.GetTypes();
for (int i = 0; i < types.Length; i++)
{
Console.WriteLine(types[i].FullName);
}

// 2, 获取所有的public的类型
Type[] types = assembly.GetExportedTypes();
for(int i = 0; i < types.Length; i++)
{
Console.WriteLine(types[i].FullName);
}

获取指定的类型
Type type = assembly.GetType(“Flyable”);
MethodInfo method = type.GetMethod(“Eat”);
根据指定的Type,创建一个该类型的对象
object obj = Activator.CreateInstance(type);
method.Invoke(obj, null);

Type type = assembly.GetType(“Flyable”);
调用重载就是通过第二个Type[] 参数来区分
MethodInfo method = type.GetMethod(“Eat”, new Type[]
{
typeof(string)
});

调用该重载方法
method.Invoke(Activator.CreateInstance(type),
new object[] { “吃得好!”});

object obj = Activator.CreateInstance(type);
// 通过Type 来创建对象==============
// 通过调用指定的构造函数 来创建对象
ConstructorInfo info = type.GetConstructor(new Type[] { typeof(string) });
// 调用构造函数创建对象
object obj = info.Invoke(new object[] { “张三” });

// 通过反射获取 指定对象的属性的值
PropertyInfo pinfo = type.GetProperty(“Name”);
string name = pinfo.GetValue(obj,null).ToString();
Console.WriteLine(name);

Console.ReadKey();

class MyType
{
public int Id { get; set; }
public string[] boys;
public string Name { get; set; }
public void Say()
{
Console.WriteLine(“Say what”);
}

private void Do()
{
    Console.WriteLine("DO what");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的企业员工管理系统的设计与实现(论文+源码)_kaic

基于Java的企业员工管理系统的设计与实现 摘 要 随着电子信息的飞速发展&#xff0c;计算机已经融入到了生活的各个方面&#xff0c;越来越多的企业开始使用电子计算机来对企业进行管理&#xff0c;信息化的时代已经到来&#xff0c;各个企业无论大小都需要一个信息化的管理系…

模拟实现qsort函数(采用冒泡排序的方式)

前言&#xff1a; 之前我在C语言&#xff1a;指针详解【进阶】后篇中提到了qsort函数,qsort函数作为一个库函数&#xff0c;在我们日常的代码编写中可能会用到&#xff0c;在上面提到的文章中我们也进行使用了这个函数&#xff0c;大家也了解了一些这个函数的使用方法&#xff…

English Learning - L3 作业打卡 Lesson1 Day4 2023.5.8 周一

English Learning - L3 作业打卡 Lesson1 Day4 2023.5.8 周一 引言&#x1f349;句1: They may say they are red hot about something unfair.成分划分弱读连读爆破语调 &#x1f349;句2: When they are red hot, they are very angry about something.成分划分弱读连读爆破语…

【Ansys】mechanical和fluent求解器中使用的迭代方法-待补充

一、mechanical求解器 这个求解器&#xff0c;在网上很容易查到&#xff0c;迭代求解时用的就是牛顿-拉夫逊方法&#xff08;Newton-Raphson&#xff09;。 这是因为牛顿法求解非线性问题非常优秀。 而mechanical使用这个方法就能实现对几何非线性、材料非线性、接触非线性、…

Java入门和背景知识

文章目录 &#x1f525;常见编程语言介绍&#x1f525;Java 发展史&#x1f525;Java 的核心优势&#x1f525;Java 各版本的含义&#x1f525;Java 的特性和优势&#x1f525;Java 运行机制&#x1f525;JVM、JRE 和 JDK&#x1f525;Java 开发环境搭建&#x1f525;openJDK 和…

网络购物商场系统的设计与实现(论文+源码)_kaic

网络购物商场系统 摘 要 近年来&#xff0c;随着网络购物的兴起和普及&#xff0c;针对该市场需求开发一款在线购物系统是大势所趋。和实体店对比&#xff0c;在线购物系统商品种类齐全&#xff0c;价格优惠、还能够送货上门等优势。在此类系统中&#xff0c;用户能够在网上…

潍坊这一城市商业综合体有奖征名

云创金谷项目商业购物中心名称及IP形象征集开始啦&#xff01;&#xff01;你有什么好想法&#xff1f;快来参与吧&#xff01;&#xff01; 云创金谷&#xff0c;是奎文区重点打造的城市更新代表力作&#xff0c;位于文化路以东、新华路以西&#xff0c;北宫街以北、卧龙东街以…

如何在vue中使用dayjs修改日历组件的星期名称

在vue中使用日历组件Calendar时&#xff0c;头部的星期默认展示为[日, 一, 二, 三, 四, 五, 六]&#xff0c;如下图所示。 如何改变头部的星期展示呢&#xff0c;可以通过以下方法实现&#xff1a; const weekdaysShort [周日, 周一, 周二, 周三, 周四, 周五, 周六]; dayjs.l…

每日学术速递5.10

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.ZipIt! Merging Models from Different Tasks without Training 标题&#xff1a;压缩它&#xff01;无需训练即可合并来自不同任务的模型 作者&#xff1a;George Stoica, Danie…

MLF(中期借贷便利)[Medium-term lending facility],俗称麻辣粉

MLF麻辣粉是什么&#xff1f;简述MLF的作用以及对股市的影响&#xff01;_哔哩哔哩_bilibili 简述 中期借贷便利&#xff08;Medium-term lending facility&#xff0c;简称MLF&#xff09;是中国人民银行提供给商业银行的一种货币政策工具&#xff0c;能够向商业银行提供一…

BFT 最前线 | 谷歌举办 I/O 23 发布会,对标必应,百度搜索小范围公测对话功能,盖茨称AI利大于弊

文 | BFT机器人 01 谷歌举办 I/O 23 发布会&#xff0c;以 AI 为核心发布一系列新工具 北京时间 5 月 11 日凌晨&#xff0c;谷歌举办了今年的 Google I/O 开发者大会。比起去年&#xff0c;强调「整合全球信息&#xff0c;使人人都能从访问中受益」的使命&#xff0c;谷歌 CEO…

xxl-job2.1.2定时任务使用教程

一、配置xxl-job页面调度器 1.先下载2.1.2版本xxl-job的源码&#xff0c;地址&#xff1a;https://github.com/xuxueli/xxl-job/tree/2.1.2 2.下载完&#xff0c;用idea打开&#xff0c;配置jdk1.8、配置maven&#xff0c; 3.导入MySQL数据库xxl-job的一些表&#xff0c;导入的…

点餐小程序实战教程02-店铺数据源设计

我们上一篇分析了点餐小程序的功能点,有了功能就好往下开发了。低代码开发是模型驱动开发,啥是模型驱动呢?就是要求你先设计好表结构,然后再开发页面。 那要如何设计数据源呢?其实就是将信息分门别类的拆分到不同的数据源中。要拆分到哪些数据源是由我们页面上的信息决定…

真题详解(索引查询)-软件设计(七十三)

外观、装饰、策略模式代码详解-软件设计&#xff08;七十二)https://blog.csdn.net/ke1ying/article/details/130628033 关于一个类的静态成员描述中&#xff0c;不正确的是&#xff1a; 错误&#xff1a;一个类的静态数据成员值不可以被修改。 java语言特性是有________和 垃…

django基础知识详解

1. 安装与介绍 课程特点&#xff1a; 学习难度大&#xff0c;大部分内容需要理解并记忆文件较多易混淆学习阶段注重框架使用&#xff0c;工作阶段注重实现业务逻辑综合应用强&#xff0c;小练习少 1.1 Django框架的介绍 2005年发布,采用Python语言编写的开源web框架早期的时…

JVM垃圾收集器(二)

目录 1、Serial 2、ParNew 3、Parallel Scavenge 4、Serial Old 5、Parallel Old 6、CMS 1、为什么需要两次“stop the world” 2、CMS的并发带来的问题 3、CMS的触发时机 4、CMS的缺陷 5、为什么CMS用清除算法 7、G1 1、Region 2、设计Region的意义 3、G1的三种…

【C++】——类与对象(中)+日期类对象的实现

文章目录 1. 前言2. 类的6个默认成员函数3. 构造函数4. 析构函数5. 拷贝构造函数6. 运算符重载6.1 赋值运算符重载 7. const成员8. 取地址及const取地址操作符重载9. 日期类对象的完整实现9.1 头文件9.2 源文件9.3 测试代码 10. 结尾 1. 前言 今天我们来继续学习C类与对象&…

网安学习路线!史上最详细没有之一

我经常会看到这一类的问题&#xff1a; 学习XXX知识没效果&#xff1b;学习XXX技能没方向&#xff1b;学习XXX没办法入门&#xff1b; 给大家一个忠告&#xff0c;如果你完全没有基础的话&#xff0c;前期最好不要盲目去找资料学习&#xff0c;因为大部分人把资料收集好之后&…

医日健自助售药机

产品概述 医日健智能自助售药机整合了信息化管理技术 、远程监控管理技术 、自动化技术、人脸识别技术等多种先进技术 &#xff0c;结合药品零售的特点 &#xff0c;通过在医院、诊所、药店、便利店、社区等场所部署药品自助售药机 &#xff0c;为用户提供自选购药服务&#x…

深度学习用于医学预后-第二课第三周1-3节-生存模型,生存函数

文章目录 生存模型生存函数有效生存函数 生存模型 本周&#xff0c;我们将讨论生存模式&#xff08;survival model&#xff09;。生存模型是一种特殊的模型我们关心事件发生的时间&#xff0c;比如从治疗到复发的时间&#xff0c;或者从诊断到死亡的时间 这是一个常见的问题…