当前位置: 首页 > news >正文

枣庄三合一网站开发石家庄网络推广平台

枣庄三合一网站开发,石家庄网络推广平台,企业做可信网站认证的好处,2017年做网站维护总结1.委托和事件在使用上的区别是什么? 委托和事件是C#中的重要概念,通俗来讲,委托是一个可以指向特定方法的指针,可以将委托分配给不同的脚本,使它们能够完成不同的任务。而事件则是一种使用委托实现的通知机制&#xff…

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 方法比较对象是非常常见的。

http://www.hkea.cn/news/956165/

相关文章:

  • 电子元器件商城网站建设百度开户怎么开
  • 企业网站开发基本流程百度博客收录提交入口
  • 甘特图模板关于网站建设微信营销模式
  • 网站建设的swot分析长尾关键词挖掘精灵
  • 发布自己的做家教的网站网店运营推广登录入口
  • b s网站系统如何做性能测试百度推广运营怎么做
  • 洛阳seo外包公司费用seo的中文意思
  • 政府网站建设遵循的原则seo网站内容优化
  • java做网站具体步骤邵阳seo优化
  • 自己做的网站如何放进服务器今天今日头条新闻
  • 男装网站的网站建设背景惠州seo按天计费
  • 如何快速提高网站排名互联网项目推广
  • icp备案网站名称更改成都网站设计
  • 企业网站建设需求分析seo排名资源
  • python基础教程雪峰东莞搜索seo网站关键词优化
  • b2b网站开发供应商小程序开发教程全集免费
  • 用自己的手机做网站外链网站是什么
  • 市场调研公司介绍网站推广优化公司
  • 玉溪人民政府网站建设现状新网站seo
  • 湖南餐饮网站建设2023北京封控了
  • 重庆网站设计人员外贸网站搭建推广
  • 局域网内的网站建设西安网站建设公司排名
  • 普通网站报价多少中南建设集团有限公司
  • 蚌埠做网站哪家好全网营销国际系统
  • 沈阳市网站制作谷歌香港google搜索引擎入口
  • 做美食网站的背景高端网站建设制作
  • 文件什么上传到wordpress泉州seo技术
  • 网站地址地图怎么做网页制作的软件有哪些
  • 如何用万网建设网站口碑营销策划方案
  • 做网站的基础架构东莞seo建站公司