C# 探险之旅:第三十七节 - 类型class之Object:万物之源的奇妙冒险

嘿,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们将深入探索一个极其强大又无处不在的“大佬”——Object 类型。想象一下,它就像是C#世界里的“超级英雄祖先”,几乎所有的类型都得叫它一声“老祖宗”。

Object 类:万物之源

Object 类是C#中所有类的基类。无论你定义什么类,它们都直接或间接地继承自Object类。你可以把Object类看作是所有类的“始祖”,它为所有的对象提供了一些通用的方法和属性,确保每个对象都能执行一些基本的操作。

Object 类的主要成员

Object 类提供了几个非常有用的方法和属性,这些成员在几乎所有对象中都可以使用:

  • ToString():返回对象的字符串表示形式。你可以用它来获取对象的描述信息。
  • Equals(object obj):比较两个对象是否相等。你可以用它来判断两个对象是否相同。
  • GetHashCode():返回对象的哈希码。哈希码用于在哈希表等数据结构中快速查找对象。
  • GetType():返回对象的运行时类型。你可以用它来获取对象的具体类型信息。
  • ReferenceEquals(object objA, object objB):静态方法,用于比较两个对象的引用是否相同。
使用 Object 类:超级英雄的共同技能

假设我们有一个SuperHero类,它代表了一个超级英雄。虽然每个超级英雄都有自己的独特能力,但他们都继承了Object类的一些通用方法。我们可以用这些方法来实现一些常见的操作。

public class SuperHero
{public string Name { get; set; }public int PowerLevel { get; set; }public void UsePower(){Console.WriteLine($"{Name} 使用了超能力!");}// 重写 ToString 方法,返回超级英雄的描述信息public override string ToString(){return $"{Name} (力量等级: {PowerLevel})";}// 重写 Equals 方法,比较两个超级英雄是否相同public override bool Equals(object obj){if (obj is SuperHero otherHero){return this.Name == otherHero.Name && this.PowerLevel == otherHero.PowerLevel;}return false;}// 重写 GetHashCode 方法,确保相同的对象有相同的哈希码public override int GetHashCode(){return HashCode.Combine(Name, PowerLevel);}
}

 在这个例子中,SuperHero类重写了Object类中的ToString()Equals()GetHashCode()方法,以便更好地描述和比较超级英雄。

实战演练:超级英雄的日常

让我们看看如何使用Object类的成员来处理超级英雄的日常事务。假设我们有两个超级英雄,我们可以用ToString()方法来描述他们,用Equals()方法来比较他们是否相同,还可以用GetType()方法来获取他们的类型信息。

SuperHero hero1 = new SuperHero
{Name = "闪电侠",PowerLevel = 100
};SuperHero hero2 = new SuperHero
{Name = "闪电侠",PowerLevel = 100
};SuperHero hero3 = new SuperHero
{Name = "超人",PowerLevel = 200
};// 使用 ToString 方法描述超级英雄
Console.WriteLine(hero1.ToString()); // 输出: 闪电侠 (力量等级: 100)
Console.WriteLine(hero2.ToString()); // 输出: 闪电侠 (力量等级: 100)// 使用 Equals 方法比较超级英雄
Console.WriteLine($"hero1 和 hero2 是否相同: {hero1.Equals(hero2)}"); // 输出: True
Console.WriteLine($"hero1 和 hero3 是否相同: {hero1.Equals(hero3)}"); // 输出: False// 使用 GetType 方法获取超级英雄的类型
Console.WriteLine($"hero1 的类型: {hero1.GetType()}"); // 输出: CSharpAdventure.SuperHero
Console.WriteLine($"hero3 的类型: {hero3.GetType()}"); // 输出: CSharpAdventure.SuperHero// 使用 ReferenceEquals 方法比较对象引用
Console.WriteLine($"hero1 和 hero2 的引用是否相同: {object.ReferenceEquals(hero1, hero2)}"); // 输出: False
public class SuperHero
{public string Name { get; set; }public int PowerLevel { get; set; }public void UsePower(){Console.WriteLine($"{Name} 使用了超能力!");}public override string ToString(){return $"{Name} (力量等级: {PowerLevel})";}public override bool Equals(object obj){if (obj is SuperHero otherHero){return this.Name == otherHero.Name && this.PowerLevel == otherHero.PowerLevel;}return false;}public override int GetHashCode(){return HashCode.Combine(Name, PowerLevel);}
}

我们来看看运行结果吧:

 

小结:成为代码世界的造物主

通过今天的学习,你已经掌握了如何使用Object类及其成员来处理对象的基本操作。Object类为所有的对象提供了通用的功能,确保每个对象都能执行一些基本的操作,比如转换为字符串、比较相等性、获取哈希码和类型信息。

Object类不仅是所有类的基类,还为我们提供了一套强大的工具,帮助我们在编写代码时更加灵活和高效。你可以把Object类看作是你手中的魔法书,里面记载了所有对象的共同技能,让你能够轻松地管理和操作各种类型的对象。

所以,下次当你坐在键盘前,准备编写一些代码时,不妨想想自己是一位造物主,正在精心设计一个充满各种神奇生物的世界。记住,Object类就是你手中的魔法书,让你的代码更加统一和强大。

继续前行吧,勇敢的探险家,C#的奇妙世界还有更多秘密等待你去发现!我们下一节再见!

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

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

相关文章

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制,从而保持照射在样品上的流强稳定性,为分析样品吸收谱提供可靠基准,同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

aws(学习笔记第十八课) 使用aws cdk(python)进行部署

aws(学习笔记第十八课) 使用aws cdk(python)进行部署 学习内容: 使用aws cdk(python)进行部署整体代码(python的通常工程)代码动作 1. 使用aws cdk(python)进行部署 aws cdk的整体架构 前面使用了cloudformation进行了json的aws的各种组件的…

网络基础 - TCP/IP 五层模型

文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数据格式和网络标准数据格式间的转换 实际生活中&#…

MySQL 调优技巧|索引什么时候失效?为什么?

写在前面 优化慢SQL,这是在工作或者面试中都不可避免的问题。这篇文章我们就来讲讲慢SQL的优化的一些方法! 1. 升配 最简单的一步就是升配!!当然在降本增效的当下,很难能将这种单子审批下来了! 2. 索引…

《封装继承与多态》封装的优势

文章目录 封装在面向对象编程中的优势1. 提高代码的可读性和可维护性2. 提高代码的安全性3. 降低代码的复杂性案例举例 封装在敏捷开发和团队合作中的优势1. 促进敏捷开发2. 促进团队合作案例举例 封装在面向对象编程中的优势 封装是面向对象编程(Object-Oriented …

YOLOv5-Backbone模块实现

YOLOv5-Backbone模块实现 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&#xff1a…

软件需求规格说明书文档,系统需求规格说明书下载,软件工程需求规格案例模板参考(word原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需求 3.9 环境需求…

Linux - MySQL迁移至一主一从

Linux - MySQL迁移至一主一从 迁移准备安装MySQL ibd文件迁移原服务器操作目标服务器操作 一主一从增量同步异常解决结尾 首先部分单独安装MySQL,请参考Linux - MySQL安装,迁移数据量比较大约400G左右且网络不通故使用文件迁移,需开启一段时间…

29. Three.js案例-自定义平面图形

29. Three.js案例-自定义平面图形 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它利用 WebGL 技术在浏览器中渲染 3D 图形。 构造器 THREE.WebGLRenderer(parameters : object) 参数类型描述parametersobject可选参数对象&…

大模型运用-Prompt Engineering(提示工程)

什么是提示工程 提示工程 提示工程也叫指令工程,涉及到如何设计、优化和管理这些Prompt,以确保AI模型能够准确、高效地执行用户的指令,如:讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。(如&…

MTK Android12 更换开机LOGO和开机动画

1、路径: (1)device/mediatek/system/common/device.mk (2)vendor/audio-logo/animation/bootanimation.zip (3)vendor/audio-logo/products/resource-copy.mk (4)vendo…

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发,但是由于ALSA驱动框架过于复杂,实现音频编解码芯片的驱动不是一个人能完成的&#xf…

learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)

1.父子组件u-search &#xff08;1&#xff09;父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…

计算机进制的介绍

一.进制介绍 对于整数&#xff0c;有四种表示方式: 1&#xff09;二进制:0,1&#xff0c;满2进1。 在golang中&#xff0c;不能直接使用二进制来表示一个整数&#xff0c;它沿用了c的特点。 参考:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 //赋值…

Transformers参数高效微调之LoRA

简介 LoRA: Low-Rank Adaptation of Large Language Models是微软研究人员为处理微调大语言模型的问题而引入的一项新技术。具有数十亿个参数的强大模型&#xff08;例如 GPT-3&#xff09;为了适应特定任务或领域而进行微调的成本非常高。LoRA 建议冻结预先训练的模型权重并注…

【原生js案例】如何让你的网页实现图片的按需加载

按需加载&#xff0c;这个词应该都不陌生了。我用到你的时候&#xff0c;你才出现就可以了。对于一个很多图片的网站&#xff0c;按需加载图片是优化网站性能的一个关键点。减少无效的http请求&#xff0c;提升网站加载速度。 感兴趣的可以关注下我的系列课程【webApp之h5端实…

博弈论1:拿走游戏(take-away game)

假设你和小红打赌&#xff0c;玩“拿走游戏”&#xff0c;输的人请对方吃饭.... 你们面前有21个筹码&#xff0c;放成一堆&#xff1b;每轮你或者小红可以从筹码堆中拿走1个/2个/3个&#xff1b;第一轮你先拿&#xff0c;第二轮小红拿&#xff0c;你们两个人交替进行;拿走筹码堆…

【论文阅读】IC-Light(ICLR 2025 满分论文)

Scaling In-the-Wild Training for Diffusion-based Illumination Harmonization and Editing by Imposing Consistent Light Transport 原始论文&#xff1a;https://openreview.net/pdf?idu1cQYxRI1H 补充材料&#xff1a;https://openreview.net/attachment?idu1cQYxRI1H&…

Unix 传奇 | 谁写了 Linux | Unix birthmark

注&#xff1a;本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远&#xff0c;文章有点“年头”&#xff0c;但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去&#xff0c;我们才能知其然&#xff0c;更知所以然。总结过去…

记一个framebuffer显示混乱的低级错误

记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实&#xff0c;这个任务上我多卡了两天&#xff0c;差点把我搞死&#xff0c;于此记录为后鉴。 打算用awtk做一个多进程项目&#xff0c;计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …