C#核心知识回顾——11.各数据集合的汇总区分、委托、事件

news2024/11/26 23:46:40

变量:

无符号
byte正8位  ushort正16位  uint正32位  ulong正64位
有符号
sbyte8位  short16位  int32位  long64位
浮点数
float double decimal
特殊
char bool string

复杂数据容器:

枚举enum
结构体struct
数组(一维、二维、交错) [] [,] [][]

数据集合:

using System.Collections;
ArrayList object数据列表
stack 栈 先进后出
Queue 队列 先进先出
Hashtable 哈希表 键值对

泛型数据集合:

using system.Collections.Generic;
List 列表 泛型列表
Dictionary 字典 泛型哈希表
LinkedList 双向链表
statck 泛型栈
Queue 泛型队列

2.委托

委托是函数(方法)的容器
可以理解为表示函数(方法)的变量类型
用来存储、传递函数(方法)
委托的本质是一个类,用来定义函数(方法)的类型(返回值和参数的类型)
不同的函数(方法)必须对应和各自"格式"一致的委托

关键字:delegate

语法:访问修饰符delegate返回值委托名(参数列表);

可以申明在namespace和class语句块中
更多的写在namespace中
简单记忆委托语法就是函数申明语法前面加一个delegate关键字

声明:

 /// <summary>
    /// 声明了一个可以存储无参无返回值的函数容器
    /// </summary>
    delegate void MyFun();

    //委托声明不能重名(同一语句块)    
    delegate int MyFunc(int a);

使用:

public class test : MonoBehaviour
{    
    /// <summary>
    /// 使用过程
    /// </summary>
    private void Start()
    {
        //无参无返回值委托使用
        MyFun mf = new MyFun(Fun);
        mf.Invoke();
        mf();
        //有参有返回值委托使用
        MyFunc mfc = new MyFunc(Fun2);
        mfc.Invoke(1);
        mfc(2);

        Tet tet = new Tet();
        tet.TestFun(Fun, Fun2);
    }  
    void Fun()
    {
        Debug.Log("fun");
    }
    int Fun2(int a)
    {
        Debug.Log("fun2" + a);
        return a;
    }
}
/// <summary>
/// 声明了一个可以存储无参无返回值的函数容器
/// </summary>
delegate void MyFun();

//委托声明不能重名(同一语句块)    
delegate int MyFunc(int a);

// 委托常用在:
//1.作为类的成员
//2.作为函数的参数
class Tet
{
    public MyFun mf;
    public MyFunc mfc;

    public void TestFun(MyFun mf,MyFunc mfc)
    {
        //可以先处理一些别的逻辑,完事后在执行函数
        this.mf = mf;
        this.mfc = mfc;
    }
}

多函数储存:

public class test : MonoBehaviour
{    
    /// <summary>
    /// 使用过程
    /// </summary>
    private void Start()
    {
        //委托存储多个函数
        //增
        MyFun mf = Fun;
        mf += Fun2;        
        //减(多减不会报错)
        mf -= Fun2;
        //清空容器
        mf = null;
    }  
    void Fun()
    {
        Debug.Log("fun");
    }
    void Fun2()
    {
        Debug.Log("fun2");
    }
}

delegate void MyFun();

系统定义好的委托:

public class test : MonoBehaviour
{    
    /// <summary>
    /// 使用过程
    /// </summary>
    private void Start()
    {
        //无参无返回值
        Action action = Fun;
        action += Fun2;
        action();

        //泛型委托
        Func<string> FuncStr = Func3;

        //可传n参委托
        Action<int, string> action1 = Fun4;
        //可传n参委托。有返回值
        Func<int,int> FuncStr2 = Fun5;
    }
    void Fun(){ Debug.Log("fun"); }
    void Fun2(){ Debug.Log("fun2"); }
    string Func3(){ return ""; }
    void Fun4(int a ,string b) { }
    int  Fun5(int a){ return 0; }
}

delegate void MyFun();

3.事件

事件是什么:
事件是基于委托的存在
事件是委托的安全包裹
让委托的使用更具有安全性
事件 是一种特殊的变量类型

二事件的使用
1.事件是作为 成员变量存在于类中
2.委托怎么用 事件就怎么用

事件相对于委托的区别:
1.不能在类外部 赋值
2.不能再类外部 调用

注意:
它只能作为成员存在于类和接口以及结构体中

public class test : MonoBehaviour
{    
    
    private void Start()
    {
        Tes tes = new Tes();
        tes.myFun = null;
        tes.myFun = TestMyFun;

        //事件不可以在类外部赋值
        //tes.myEvent = null;
        //tes.myEvent = TestMyFun;
        //但是事件可以在外部+=、-=
        tes.myEvent += TestMyFun;
        tes.myEvent -= TestMyFun;

        tes.myFun();
        tes.myFun.Invoke();
        //事件不能在外部调用
        //tes.myEvent();
        //tes.myEvent.Invoke();
        //只能在类内部封装方法去调用
    }
    void TestMyFun() { }
}
class Tes
{
    //委托成员,存储函数
    public Action myFun;
    //事件成员,存储函数
    public event Action myEvent;

    //构造函数
    public Tes(){
        //事件的使用和委托一样
        myFun = TestFun;
        myFun += TestFun;
        myFun -= TestFun;
        myFun();

        myEvent = TestFun;
        myEvent += TestFun;
        myEvent -= TestFun;
        myEvent();
    }

    public void TestFun()
    {
        Debug.Log("122");
    }
}

事件相当于对委托进行了一次封装,更安全。

 

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

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

相关文章

leetcode--杨辉三角(C、C++)

文章目录 1.C实现2.C实现 1.C实现 #include<stdio.h> #include<stdlib.h> #include<assert.h>int** generate(int n, int* rnum_row, int** rnum_row_ele) {//*rnum_row-->num_row&#xff1a;杨辉三角行数*rnum_row n;//*rnum_row_ele-->num_row_el…

深度学习笔记之Transformer(五) Position Embedding铺垫:Word2vec

深度学习笔记之Transformer——Position Embedding铺垫&#xff1a;Word2vec 引言回顾&#xff1a;关于词特征表示的 One-hot \text{One-hot} One-hot编码目标函数构建关于语料库与任务目标似然函数构建 Word2vec \text{Word2vec} Word2vec模型结构重点总结 引言 在Transforme…

Zabbix“专家坐诊”第198期问答汇总

问题一 Q&#xff1a;请问一下&#xff0c;自带的思科SNMP交换机模板&#xff0c;怎么不监控down的接口&#xff1f; A1&#xff1a;这种一般在自动发现规则里加个过滤器&#xff0c;过滤出IFSTATUS匹配(1|3)的就能实现只发现up的端口了。 A2&#xff1a; 在“Items”页面&a…

Unity | 从建模到蒙皮动画的整个过程

目录 一、顶点数组、索引数组及UV数组 二、Mesh、MeshFilter、MeshRenderer及SkinnedMeshRenderer 1. Mesh 2. MeshFilter 3. MeshRenderer 4. MeshRenderer与SkinnedMeshRenderer&#xff08;蒙皮网格&#xff09; 三、Unity中相关组件 1. mesh和material 2. sharedM…

【微信小程序创作之路】- 小程序项目组成(初创小程序)

【微信小程序创作之路】- 小程序项目组成&#xff08;初创小程序&#xff09; 提示&#xff1a;第二章 初创小程序&#xff0c;讲解小程序项目组成 文章目录 【微信小程序创作之路】- 小程序项目组成&#xff08;初创小程序&#xff09;前言一、下载安装小程序微信开发者工具二…

Python multiprocessing 多进程

在multiporcessing中&#xff0c;通过新建Process对象创建进程&#xff0c;然后用start()方法调用它。Process与threading.Thread类似。如下是一个简单的例子&#xff1a; from multiprocessing import Processdef f(name):print(hello ,name)if __name__ __main__:p Proces…

2D和3D双管齐下才是王道?KAUST联合Snap、VGG提出单张图像三维重建的Magic123框架

在最近的AIGC社区中&#xff0c;3D视觉生成领域越来越受到广泛的关注&#xff0c;以神经辐射场&#xff08;NeRFs&#xff09; 为基础的深度渲染网络向大家展示了非常惊艳的三维效果。可是&#xff0c;NeRFs需要大量的多视角图片作为监督&#xff0c;因而从单张2D图像进行3D重建…

昆仑万维的“天工”能否改变人工智能应用的格局?

在人工智能领域&#xff0c;昆仑万维公司近日引发了广泛关注&#xff0c;发布了名为“天工”的大语言模型。这一新的技术突破引发了人们对于人工智能应用格局是否会被改变的讨论。随着昆仑万维进军大型语言模型市场&#xff0c;人们开始思考&#xff0c;“天工”能否成为人工智…

面部表情动画数据捕捉利器——AH表情捕捉头盔

在游戏制作、电视广告、影视动画制作中&#xff0c;逐渐开始采用面部捕捉头盔进行采集表情面部数据。广州虚拟动力推出的AH表情捕捉头盔&#xff0c;能够轻松创建实时逼真的面部动画&#xff0c;搭配广州虚拟动力的动作捕捉系统VDMocap Studio Plus&#xff0c;能够自动运算出表…

第八章:怎样远程连接+远程连接常用工具+Teamviewer详解

目录 一、什么是远程连接 二、为什么需要远程连接 三、常用的远程连接工具 四、Teamviewer 一、什么是远程连接 远程连接就是在远程连接另外一台计算机。当某台计算机开启了远程桌面连接功能后我们就可以在网络的另一端控制这台计算机了&#xff0c;通过远程桌面功能我们可…

基于Java校园二手物品交易平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

hive函数dayofweek的奇怪用法

hive函数dayofweek的奇怪用法 1.单独使用 select dayofweek(2023-07-03); 周一 2 select dayofweek(2023-07-04); 周二 3 select dayofweek(2023-07-05); 周三 4 select dayofweek(2023-07-06); 周四 5 select dayofweek(2023-07-07); 周五 6 select dayofweek(2023-07-08); …

VIO在ARM上的加速(2)- Neon

VIO在ARM上的加速&#xff1a; VIO在ARM上的加速&#xff08;1&#xff09;- ARM加速基础 VIO在ARM上的加速&#xff08;2&#xff09;- Neon VIO在ARM上的加速&#xff08;3&#xff09;- Neon在VIO中的应用 1 NEON的概述 ARM 处理器中使用的高级 SIMD 扩展的实现称为 NE…

【数据结构与算法】魔王语言解释(C/C++)

实践要求 1. 问题描述 有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话&#xff0c;没有人能听懂。但他的语言是可以逐步解释成人能懂的语言的&#xff0c;因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: 形式一 α → β 1 β 2 . . . β m \alpha \…

无线耳机推荐的品牌有哪些?八款无线蓝牙耳机推荐

无线蓝牙耳机无疑是当前最受欢迎的数码产品之一&#xff0c;平听闲暇时刻听听歌或者是运动健身&#xff0c;常常能看到蓝牙耳机的身影&#xff0c;作为一个热衷于听歌的精致boy&#xff0c;佩戴过的蓝牙耳机数不胜数&#xff0c;现在&#xff0c;除了手机品牌会开发无线蓝牙耳机…

西电_矩阵论_学习笔记

文章目录 【 第一章 线性空间 】【 第二章 范数 】【 第三章 矩阵函数 】【 第四章 矩阵分解 】【 第五章 矩阵特征值估计 】【 第六章 广义逆 】【 考试重点内容总结 】 这是博主2023春季西电所学矩阵论的思维导图&#xff08;软件是幕布&#xff09;&#xff0c;供大家参考&a…

ROS:工作空间覆盖

目录 一、概念二、示例2.1操作2.2原因 三、存在的问题 一、概念 所谓工作空间覆盖&#xff0c;是指不同工作空间中&#xff0c;存在重名的功能包的情形。 ROS 开发中&#xff0c;会自定义工作空间且自定义工作空间可以同时存在多个&#xff0c;可能会出现一种情况: 虽然特定工…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…

开放式耳机哪个好?2023开放式耳机排行榜推荐

​耳机成为了当代青年必不可少的一款数码单品&#xff0c;无论在什么时间、哪个地点总能看到很多人戴着耳机。耳机也分有很多类型&#xff0c;就比如市面上大火的开放式耳机&#xff0c;很多人还不清楚开放式耳机如何挑选的&#xff0c;下面我来推荐几款很不错的开放式耳机&…

【一】部署Zabbix监控详解

Zabbix监控 1.Zabbix监控概述1.1 zabbix是什么1.2 zabbix监控原理1.3 Zabbix 6.0新特性1.4 Zabbix 6.0功能组件1.5 Zabbix与prometheus区别对比 2. 部署Zabbix6.02.1 安装NginxPHP2.2 部署Mariadb数据库2.3 安装zabbix Server服务端2.4 部署Web前端&#xff0c;进行访问2.5 部署…