20250530-C#知識:萬物之父Object

C#知識:萬物之父Object

Object類(即object)是所有類的基類,這里面的方法還是需要好好了解一下。


1、Object類

  • 是頂級父類,其他類默認都是Object類的子類(自定義類也會默認繼承Object類)
  • 可以用Object變量裝載值類型和其他自定義類型對象
  • Object類是引用類型
  • 存在裝箱拆箱
    在這里插入圖片描述
object x = 100; //裝箱
int y = (int)x; //拆箱

2、Object類中的靜態方法

2.1 靜態方法Equals

  • 判斷兩個參數是否相等
  • 調用第一個參數的虛擬Equals方法進行判斷,無論值類型和引用類型
public static bool Equals(object? objA, object? objB);

2.2 靜態方法ReferenceEquals

  • 比較兩個引用類型對象是否相等
  • 傳遞值類型則返回false
public static bool ReferenceEquals(object? objA, object? objB);

3、Object類的成員方法

3.1 普通方法GetType

  • 返回對象類型的Type對象,可用于反射
public extern Type GetType();

3.2 普通方法MemberwiseClone

  • 獲取對象的淺拷貝對象
  • 對象的引用類型成員變量也是直接拷貝,指向堆中相同位置
protected unsafe object MemberwiseClone();

4、Object類的虛擬方法

4.1 虛擬方法Equals

  • 只有一個參數,將調用方法的對象與參數對象進行比較
  • 引用類型比較引用(默認)
  • 值類型比較值是否相等,因為System.ValueType中重寫了該方法
  • 測試了枚舉和結構體,也符合值類型的比較規則
public virtual bool Equals(object? obj)

4.2 虛擬方法GetHashCode

  • 獲取對象哈希值
public virtual int GetHashCode()

4.3 虛擬方法ToString

  • 將對象進行打印輸出時默認調用此方法
public virtual string? ToString()

5、完整測試用例:

namespace LearnObject
{enum Daily{Eat,Sleep}struct Point{public int x;public int y;public Point():this(0,0) { }public Point(int x, int y){this.x = x;this.y = y;}}class Student{public string name;public int age;public Teacher teacher;public Student():this("張飛",18, new Teacher()) { }public Student(string name, int age){this.name = name;this.age = age;this.teacher = new Teacher();}public Student(string name, int age, Teacher teacher) : this(name, age){this.teacher = teacher;}public override bool Equals(Object? a){if (a != null && a is Student){Student other = a as Student;return this.name.Equals(other.name) && this.age == other.age;}return false;}public override int GetHashCode(){Console.WriteLine($"重寫之前的哈希值: {base.GetHashCode()}");return 10086;   //自定義哈希邏輯}public override string ToString(){return $"自定義輸出,學生的名字:{this.name},年齡:{this.age} \n" ;}public Student ShallowClone() => this.MemberwiseClone() as Student;}class Student2{public string name;public int age;public Teacher teacher;public Student2() : this("張飛", 18, new Teacher()) { }public Student2(string name, int age){this.name = name;this.age = age;this.teacher = new Teacher();}public Student2(string name, int age, Teacher teacher) : this(name, age){this.teacher = teacher;}public Student2 ShallowClone() => this.MemberwiseClone() as Student2;}class Teacher{public string name;public Teacher() { this.name = "諸葛亮"; }public Teacher(string name){this.name = name;}   }internal class Program{static void Main(string[] args){object x = 100; //裝箱int y = (int)x; //拆箱Student student1 = new Student();Student student2 = new Student();Student2 student3 = new Student2();Student2 student4 = new Student2();Console.WriteLine(Equals(student1, student2));  //True  //因為Student中Equals方法被重寫了Console.WriteLine(Equals(student3, student4));  //False //因為Student2默認比較的是引用Console.WriteLine(ReferenceEquals(student1, student2)); //FalseConsole.WriteLine(ReferenceEquals(5, 5));Point point1 = new Point(1, 1); //測試結構體Point point2 = new Point(1, 1);Daily daily1 = Daily.Sleep; //測試枚舉Daily daily2 = Daily.Sleep;Console.WriteLine(ReferenceEquals(point1, point2)); //FalseConsole.WriteLine(Equals(point1, point2));  //TrueConsole.WriteLine(ReferenceEquals(daily1, daily2)); //FalseConsole.WriteLine(Equals(daily1, daily2));  //TrueType type = student1.GetType();Console.WriteLine(type.ToString()); //LearnObject.StudentStudent student5 = new Student("關羽",20, new Teacher("諸葛亮"));Student student6 = student5.ShallowClone();Console.WriteLine("修改前");Console.WriteLine($"學生5:{student5.name}的老師是{student5.teacher.name}");   //學生5:關羽的老師是諸葛亮Console.WriteLine($"學生6:{student6.name}的老師是{student6.teacher.name}");   //學生6:關羽的老師是諸葛亮student6.name = "劉備";student5.teacher.name = "龐士元";Console.WriteLine("學生6修改后");Console.WriteLine($"學生5:{student5.name}的老師是{student5.teacher.name}");   //學生5:關羽的老師是龐士元Console.WriteLine($"學生6:{student6.name}的老師是{student6.teacher.name}");   //學生6:劉備的老師是龐士元Student student7 = new Student();Student2 student8 = new Student2();Console.WriteLine(student7.GetHashCode());  //10086 Console.WriteLine(student8.GetHashCode());  //18643596Console.WriteLine(student7.ToString()); //自定義輸出,學生的名字:張飛,年齡:18Console.WriteLine(student8.ToString()); //LearnObject.Student2}}
}

6、參考資料:

  1. 《唐老獅C#》

本篇結束,感想您的閱閱閱閱閱閱閱閱閱讀~

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83346.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蘋果應用開發詳細教程(2025最新版)

蘋果應用開發詳細教程(2025最新版) 第一階段:開發環境搭建 硬件準備 Mac電腦(macOS Monterey 12或更高版本)iPhone/iPad(真機調試建議iOS 16+)軟件安裝 # 通過App Store安裝Xcode xcode-select --installXcode 15+(包含Swift 5.9編譯器)安裝CocoaPods(依賴管理工具)…

flutter項目遷移空安全

重中之重 備份好項目文件,甚至連已經加載好的flutter庫也可以備份。環境包升級 2.1 不要直接換成flutter:3.0以上的版本,這樣做既有基本的庫兼容問題,又有空安全下的語法問題(整個項目中需要增加 late、?、!的語法錯誤,一片報錯的…

架構師面試題整理

以下是從提供的HTML代碼中提取的所有class"title-txt"的文本內容,已排除重復項并按順序整理: 緩存專題 實戰解決大規模緩存擊穿導致線上數據庫壓力暴增面試常問的緩存穿透是怎么回事基于DCL機制解決突發性熱點緩存并發重建問題實戰Redis分布…

pytest 中 fixture 與類繼承交互導致的問題

文章目錄 問題分析將屬性綁定到 **類** 上使用 scopefunction 解決方法為什么有兩個不同的對象核心原因:fixture 的執行上下文scopefunction 的情況scopeclass 的情況 為什么 pytest 要這樣做?這是 pytest 的設計局限 總結 本文探討 Pytest 中 fixture 作…

uniapp+ts模擬popup彈出框(下拉框)

效果圖&#xff08;未展開的樣子&#xff09;&#xff1a; 效果圖&#xff08;展開的樣子&#xff09;&#xff1a; 子組件代碼&#xff1a; <!--* Date: 2024-04-26 14:30:00* LastEditTime: 2025-05-29 09:01:06* Description: 技術服務 --> <template><view …

中小型企業大數據平臺全棧搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆級配置指南

目錄 背景?一、環境規劃與依賴準備?1. 服務器規劃(3節點集群)2. 系統與依賴?3. Hadoop生態組件版本與下載路徑4. 架構圖二、Hadoop(HDFS+YARN)安裝與配置?1. 下載與解壓(所有節點)2. HDFS高可用配置3. YARN資源配置?4. 啟動Hadoop集群三、MySQL安裝與Hive元數據配置…

谷粒商城-分布式微服務項目-高級篇[三]

十五、商城業務-支付 15.1 支付寶支付 15.1.1 進入“螞蟻金服開放平臺” 支付寶開放 平臺地址&#xff1a; 支付寶開放平臺 15.1.2 下載支付寶官方 demo&#xff0c;進行配置和測試 開發者文檔&#xff1a;支付寶開放平臺文檔中心 電腦網站支付文檔&#xff1a;小程序文…

DeepSeek 賦能低空經濟:無人機智能調度的破局之道

目錄 一、引言二、DeepSeek 技術探秘2.1 DeepSeek 技術核心要點2.2 與傳統技術對比優勢 三、低空經濟無人機調度挑戰剖析3.1 飛行控制困境3.2 數據處理難題3.3 系統集成阻礙 四、DeepSeek 應用方案與成果4.1 智能調度與路徑規劃4.2 自主飛行與協同控制4.3 通信與數據鏈優化4.4 …

【Kubernetes】ubuntu20.04通過kubeadm + Docker安裝k8s

Kubernetes v1.24集群安裝配置步驟總結 一、環境準備 &#xff08;一&#xff09;系統要求 運行兼容deb/rpm的Linux操作系統&#xff08;如Ubuntu或CentOS&#xff09;的計算機&#xff0c;1臺或多臺。每臺機器內存2GB以上&#xff0c;內存不足會限制應用運行。控制平面節點…

計算機視覺NeRF

NeRF與3DGS學習 NeRF計算機視覺的問題NeRF定義神經輻射場場景表示基于輻射場的體渲染分層采樣優化神經輻射場 基礎知識初始化SFM基礎矩陣 & 本質矩陣 & 單應矩陣從已經估得的本質矩陣E&#xff0c;恢復出相機的運動R,tSVD 分解 NeRF NeRF資源 計算機視覺的問題 計算…

工業手持PDA終端,有哪些作用?

工業手持PDA終端&#xff08;便攜式數據采集終端&#xff09;&#xff0c;是專為工業場景設計的智能化工具&#xff0c;擁有強大的數據采集和處理能力。通過內置的條碼掃描功能&#xff0c;PDA能夠快速準確地獲取信息&#xff0c;避免了人工錄入可能出現的錯誤&#xff0c;大大…

Spark-TTS: AI語音合成的“變聲大師“

嘿&#xff0c;各位AI愛好者&#xff01;還記得那些機器人般毫無感情的合成語音嗎&#xff1f;或者那些只能完全模仿但無法創造的語音克隆&#xff1f;今天我要介紹的Spark-TTS模型&#xff0c;可能會讓這些問題成為歷史。想象一下&#xff0c;你可以讓AI不僅說出任何文字&…

C++鏈式調用與Builder模式

在C++中實現鏈式調用(如 a.b().c().d())的關鍵是讓每個成員函數返回對象的引用(通常是 *this),從而允許連續調用其他成員函數。這種模式常見于方法鏈(Method Chaining)或流式接口(Fluent Interface)。下面是實現鏈式調用的具體方法和示例: 實現原理 返回對象引用:每…

SQL的查詢優化

1. 查詢優化器 1.1. SQL語句執行需要經歷的環節 解析階段&#xff1a;語法分析和語義檢查&#xff0c;確保語句正確&#xff1b;優化階段&#xff1a;通過優化器生成查詢計劃&#xff1b;執行階段&#xff1a;由執行器根據查詢計劃實際執行操作。 1.2. 查詢優化器 查詢優化器…

結構型設計模式之橋接模式

文章目錄 1. 橋接模式概述2. 模式結構3. 橋接模式的優缺點優點缺點 4. 橋接模式的應用場景5. C#代碼示例5.1 簡單示例 - 形狀與顏色5.2 更復雜的示例 - 跨平臺消息發送系統 6. 橋接模式與其他模式的比較7. 真實世界中的橋接模式應用7.1 數據庫驅動7.2 UI框架中的渲染機制 8. 橋…

SolidWorks建模(U盤)- 多實體建模拆圖案例

這個U盤模型并不是一個多裝配體&#xff0c;它是一個多實體零件&#xff0c;它是在零件模式下創建的這些多實體的零部件。按右鍵解除爆炸就可以裝配到一起&#xff0c;再按右鍵爆炸&#xff0c;就能按照之前移動的位置進行炸開 爆炸視圖直接展示 模型案例和素材或取&#xff08…

計算機組成原理核心剖析:CPU、存儲、I/O 與總線系統全解

引言 在當今數字化時代&#xff0c;計算機已經滲透到我們生活的方方面面&#xff0c;從智能手機到超級計算機&#xff0c;從智能家居到自動駕駛汽車。然而&#xff0c;你是否曾好奇過&#xff0c;這些功能強大的設備內部究竟是如何工作的&#xff1f;是什么讓計算機能夠執行各種…

SystemVerilog—Interface語法(二)

在SystemVerilog中&#xff0c;接口&#xff08;interface&#xff09;是一種封裝信號集合、協議邏輯和通信行為的復合結構。其核心定義內容可分為以下十類&#xff1a; 1. 信號聲明 基礎信號&#xff1a;可定義邏輯&#xff08;logic&#xff09;、線網&#xff08;wire&…

DAY43打卡

浙大疏錦行 kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 進階&#xff1a;并拆分成多個文件 fruit_cnn_project/ ├─ data/ # 存放數據集&#xff08;需手動創建&#xff0c;后續放入圖片&#xff09; │ ├─ train/ …

[藍橋杯C++ 2024 國 B ] 立定跳遠(二分)

題目描述 在運動會上&#xff0c;小明從數軸的原點開始向正方向立定跳遠。項目設置了 n n n 個檢查點 a 1 , a 2 , ? , a n a_1, a_2, \cdots , a_n a1?,a2?,?,an? 且 a i ≥ a i ? 1 > 0 a_i \ge a_{i?1} > 0 ai?≥ai?1?>0。小明必須先后跳躍到每個檢查…