培训机构排名全国十大教育机构排名/seo做的比较好的公司
1.委托和事件在使用上的区别是什么?
委托和事件是C#中的重要概念,通俗来讲,委托是一个可以指向特定方法的指针,可以将委托分配给不同的脚本,使它们能够完成不同的任务。而事件则是一种使用委托实现的通知机制,它告诉委托需要执行任务了。因此,委托定义了任务,而事件则是通知委托执行任务的通知。在 Unity 中,通过使用委托和事件,可以实现诸如响应按钮点击,处理游戏碰撞等功能。
它们在使用上的不同:
定义:委托是一种类型,它可以引用方法。事件是一种基于委托的机制,允许在事件发生时通知多个对象。
用法:委托是一种低级机制,可以直接调用关联的方法。事件则是一种高级机制,它可以被订阅和取消订阅,并在事件发生时引发通知。
安全性:委托是一种不安全的机制,它允许直接访问关联的方法,这可能会导致错误。事件则是一种安全的机制,它只允许通过订阅和取消订阅来访问关联的方法,因此不存在安全风险。
总之,委托是C#中的一种低级机制,它可以直接调用关联的方法,但可能带来安全问题;事件则是一种高级机制,它是基于委托的,允许在事件发生时通知多个对象,并且更加安全。
开发过程中的使用的案例
定义了一个事件委托类型 PlayerHealthEventHandler,它用于表示事件处理方法。
Player 类定义了一个 OnPlayerHealthChanged 事件,它在玩家生命值发生改变时被触发。
GameManager 类订阅了玩家生命值变化事件,并定义了事件处理方法 PlayerHealthChanged,它在接收到事件通知时被调用。
在 Main 方法中,创建了一个 Player 和一个 GameManager 对象,并订阅了事件。随后,通过调用 player.ChangeHealth 方法,改变了玩家生命值,并通知了事件订阅者。
sing System;// 定义事件委托类型
public delegate void PlayerHealthEventHandler(int health);public class Player
{// 定义事件public event PlayerHealthEventHandler OnPlayerHealthChanged;private int health;// 当玩家生命值发生改变时,发布事件public void ChangeHealth(int value){health += value;if (OnPlayerHealthChanged != null){OnPlayerHealthChanged(health);}}
}public class GameManager
{// 订阅事件public void SubscribeEvent(Player player){player.OnPlayerHealthChanged += PlayerHealthChanged;}// 当接收到玩家生命值变化的通知时,触发事件处理方法private void PlayerHealthChanged(int health){Console.WriteLine("Player health changed to " + health);}
}class Program
{static void Main(string[] args){Player player = new Player();GameManager gameManager = new GameManager();// 订阅事件gameManager.SubscribeEvent(player);// 改变玩家生命值,并通知事件订阅者player.ChangeHealth(10);}
}
2.请说说你认为C#中 == 和 Equals 的区别是什么?
C# 中的 == 和 Equals 在比较两个对象的值时有着不同的行为。
== 运算符比较的是两个对象的内存地址是否相同,即是否是同一个对象的引用。如果两个对象的引用相同,那么它们的内存地址也相同,此时 == 运算符的结果为 true。如果两个对象的引用不同,即使它们的值相同,== 运算符的结果仍然为 false。
Equals 方法是比较两个对象的值是否相等,它会比较对象的内容,而不是内存地址。默认情况下,Equals 方法是比较对象的引用是否相等,即是否是同一个对象。但是,许多 .NET 类都重写了 Equals 方法,使其在比较两个对象的内容时得到正确的结果。
因此,如果要比较两个对象的值是否相等,通常应该使用 Equals 方法,而不是 == 运算符。
开发过程中的使用的案例
Equals 方法常常被用于比较游戏对象。
if (object1.Equals(object2))// The two objects are the same
else// The two objects are different
另一个使用场景是在对游戏对象进行分组,比如将相同类型的游戏对象分为一组。
List<GameObject> groupA = new List<GameObject>();
List<GameObject> groupB = new List<GameObject>();foreach (var gameObject in allGameObjects)
{if (gameObject.GetType().Equals(typeof(TypeA))){groupA.Add(gameObject);}else if (gameObject.GetType().Equals(typeof(TypeB))){groupB.Add(gameObject);}
}
注意: == 运算符比较的是两个引用的内存地址,所以当两个对象实例是在不同的内存地址上创建的,即使它们的内容完全相同,它们也不相等。因此,在比较两个引用类型的对象时,通常使用 Equals 方法,因为它比较的是对象的内容,而不是内存地址。
class Person
{public string Name { get; set; }public int Age { get; set; }public override bool Equals(object obj){if (obj == null) return false;if (!(obj is Person)) return false;Person person = (Person)obj;return Name == person.Name && Age == person.Age;}
}void Example()
{Person person1 = new Person { Name = "ZhangSan", Age = 20 };Person person2 = new Person { Name = "ZhangSan", Age = 20 };Debug.Log(person1 == person2); // 输出"False"Debug.Log(person1.Equals(person2)); // 输出"True"
}
它们的内容完全相同,但是由于它们是在不同的内存地址上创建的,所以使用 == 运算符比较它们的结果为 False。但使用 Equals 方法比较它们时,结果为 True,因为我们在 Person 类的 Equals 方法中重写了对象的内容比较方式,比较了对象的姓名和年龄是否相同。
另外,使用 Equals 方法还有另一个优点是,如果没有重写 Equals 方法,则它会使用默认的对象内容比较方式,该方式与使用 == 运算符的比较方式相同。因此,即使没有重写 Equals 方法,也可以使用 Equals 方法进行对象内容比较。
总的来说,使用 Equals 方法比较对象的内容更灵活,更具灵活性,因此在 Unity 游戏开发中,使用 Equals 方法比较对象是非常常见的。
相关文章:

【C#Unity题】1.委托和事件在使用上的区别是什么?2.C#中 == 和 Equals 的区别是什么?
1.委托和事件在使用上的区别是什么? 委托和事件是C#中的重要概念,通俗来讲,委托是一个可以指向特定方法的指针,可以将委托分配给不同的脚本,使它们能够完成不同的任务。而事件则是一种使用委托实现的通知机制ÿ…...

FFmpeg5.0源码阅读——内存池AVBufferPool
摘要:FFmpeg中大多数数据存储比如AVFrame,AVPacket都是通过AVBufferRef管理的,而承载数据的结构为AVBuffer。本文主要通过FFmpeg源码来分析下FFmpeg中AVBuffer相关的实现。 关键字:AVBuffer、AVBufferPool、AVBufferPool 1. AVBufferRef 1.…...

Python学习------起步7(字符串的连接、删除、修改、查询与统计、类型判断及字符串字母大小写转换)
目录 前言: 1.字符串的连接 join() 函数 2.字符串的删除&取代 replace()函数 3.字符串的修改&切割 (1)strip() 函数 (2)lstrip()函数 和 rstrip()函数 (3)split()函数-->…...

雪花算法snowflake
snowflake中文的意思是 雪花,雪片,所以翻译成雪花算法。它最早是twitter内部使用的分布式环境下的唯一ID生成算法。在2014年开源。雪花算法产生的背景当然是twitter高并发环境下对唯一ID生成的需求,得益于twitter内部高超的技术,雪…...

Part 4 描述性统计分析(占比 10%)——上
文章目录【后续会持续更新CDA Level I&II备考相关内容,敬请期待】【考试大纲】【考试内容】【备考资料】1、统计基本概念1.1、统计学的含义及应用1.1.1、统计学的含义1.2.1、统计学的应用1.2、统计学的基本概念1.2.1、数据及数据的分类1.2.2、总体和样本1.2.3、…...

Linux系统安全:安全技术和防火墙
目录 一、安全技术 1、安全技术 2、防火墙分类 二、防火墙 1、iptables五表五链 2、黑白名单 3、iptables基本语法 4、iptables选项 5、控制类型 6、隐藏扩展模块 7、显示扩展模块 8、iptables规则保存 9、自定义链使用 一、安全技术 1、安全技术 ①入侵检测系统…...

【干货】Python:turtle库的用法
【干货】Python:turtle库的用法1. turtle库概述2. turtle库与基本绘图2.1 导入库的三种方式2.1.12.1.22.1.32.2 窗体函数2.2 画笔状态函数2.2.1 seed(s)2.2.2 random()2.2.3 randint(a, b)2.2.4 getrandbits(k)2.2.5 randrange(start, stop[ , step])2.2.6 uniform(…...

信息安全与网络安全有什么区别?
生活中我们经常会听到要保障自己的或者企业的信息安全。那到底什么是信息安全呢?信息安全包含哪些内容?与网络安全又有什么区别呢?今天我们就一起来详细了解一下。什么叫做信息安全?信息安全定义如下:为数据处理系统建…...

花了5年时间,用过市面上95%的工具,终于找到这款万能报表工具
经常有粉丝问我有“哪个报表工具好用易上手?”或者是“有哪些适合绝大多数普通职场人的万能报表工具?” 从这里我大概总结出了大家选择报表工具最期望满足的3点: (1)简单易上手:也就是所谓的学习门槛要低…...

ESP32S3系列--SPI主机驱动详解(一)
一、目的SPI是一种串行同步接口,可用于与外围设备进行通信。ESP32S3自带4个SPI控制器外设,其中SPI0/SPI1内部专用,共用一组信号线,通过一个仲裁器访问外部Flash和PSRAM;SPI2/3各自使用一组信号线;开发者可以使用SPI2/3控制外部SPI…...

2023开工开学火热!远行的人们,把淘特箱包送上顶流
春暖花开,被疫情偷走的三年在今年开学季找补回来了。多个数据反馈,居民消费意愿大幅提升。在淘特上,开工开学节点就很是明显:1月30日以来,淘特箱包品类甚至远超2022年双11,成为开年“第一爆品”。与此同时&…...

Intel x86_64 PMU简介
文章目录前言一、性能监控概述二、CPUID information三、架构性能监控3.1 架构性能监控 Version 13.1.1 架构性能监控 Version 1 Facilities3.1.2 预定义的体系结构性能事件3.1.3 cmask demo测试参考资料前言 Intel 64 和 IA-32 架构提供了 PMU(Performance Monito…...

Vue (2)
文章目录1. 模板语法1.1 插值语法1.2 指令语法2. 数据绑定3. 穿插 el 和 data 的两种写法4. MVVM 模型1. 模板语法 root 容器中的代码称为 vue 模板 1.1 插值语法 1.2 指令语法 图一 : 简写 : v-bind: 是可以简写成 : 的 总结 : …...

ESP8266 + STC15基于AT指令通过TCP通讯协议获取时间
ESP8266 + STC15基于AT指令通过TCP通讯协议获取时间 如果纯粹拿32位的ESP8266模块给8位的单片机仅供授时工具使用,有点大材小用了。这里不讨论这个拿esp8266来单独开发使用。本案例只是通过学习esp8266 AT指令功能来验证方案的可行性。 🔖STC15 单片机采用的是:STC15F2K60S…...

谈谈Spring中Bean的生命周期?(让你瞬间通透~)
目录 1.Bean的生命周期 1.1、概括 1.2、图解 2、代码示例 2.1、初始化代码 2.2、初始化的前置方法和后置方法(重写) 2.3、Spring启动类 2.4、执行结果 2.5、经典面试问题 3.总结 1.Bean的生命周期 1.1、概括 Spring中Bean的生命周期就是Bean在…...

如何将VirtualBox虚拟机转换到VMware中
转换前的准备 首先需要你找到你的virtualbox以及VM安装到哪个文件夹里了,需要将这两个文件夹添加进环境变量Path中。 如果你记不清了,可以用everything全局搜索一下“VBoxManage.exe’以及“vmware-vdiskmanager.exe”,看一眼这个程序放到哪…...

洞庭龙梦(开发技巧和结构理论集)
1、经验来源,单一获取方式。进行形态等级展示。唯一游戏系统经验来源。无主线和支线剧情。2、玩家使用流通货币(充值货币),到玩家空间商城充值游戏,两人以上玩家进行游戏,掉落道具。交易系统游戏玩法&#…...

【23种设计模式】创建型模式详细介绍
前言 本文为 【23种设计模式】创建型模式详细介绍 相关内容介绍,下边具体将对单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,具体包括它们的特点与实现等进行详尽介绍~ 📌博主主页&…...

@Bean的处理流程,源码分析@Bean背后发生的事
文章目录写在前面关键类ConfigurationClassPostProcessor1、ConfigurationClassPostProcessor的注册2、ConfigurationClassPostProcessor的处理过程(1)parse方法中,Bean方法的处理(2)注册解析Bean标注的方法写在前面 …...