【C#】類和對象的區別

1.區別概述

結構體和類的最大區別是在存儲空間上,前者是值類型,后者是引用類型,它們在賦值上有很大的區別,在類中指向同一塊空間的兩個類的值會隨一個類的改變而改變另一個,請看如下代碼所示:

namespace test1
{//結構體Astruct A{public int a;public A(int a=0){this.a=a;}}//類Bclass B{public int b;public B(int b = 0){this.b = b;}}internal class Program{static void Main(string[] args){A a1 = new A(100);A a2 = a1;B b1=new B(100);B b2 = b1;Console.WriteLine("結構體A");Console.WriteLine("a1.a:{0}",a1.a);Console.WriteLine("a2.a:{0}", a2.a);Console.WriteLine("類B");Console.WriteLine("b1.b:{0}", b1.b);Console.WriteLine("b2.b:{0}", b2.b);a2.a = 200;b2.b = 200;Console.WriteLine("修改后");Console.WriteLine("結構體A");Console.WriteLine("a1.a:{0}", a1.a);Console.WriteLine("a2.a:{0}", a2.a);Console.WriteLine("類B");Console.WriteLine("b1.b:{0}", b1.b);Console.WriteLine("b2.b:{0}", b2.b);}}
}

運行結構如上圖,我們發現修改結構體a2不會改變a1的內容,而修改類b2則會讓b1的內容跟著修改,這是因為類是存在堆上的,將b2=b1時,這兩個類對象同時指向堆上的同一塊空間,這時改變任何一方都會引起另一方的改變。

此外,結構體和類在使用上很類似,結構體甚至可以用面向對象的思想來形容一類對象。

結構體具備著面向對象思想中封裝的特性,但是它不具備繼承和多態的特性,因此大大減少了它的使用頻率。

結構體不具備繼承特性,因此不能使用protected保護訪問修飾符

2.細節區別

1.結構體是值類型,類是引用類型

2.結構體存在棧中,類存在堆中
3.結構體成員不能使用protected訪問修飾符,而類可以

4.結構體成員變量申明不能指定初始值,而類可以
5.結構體不能申明無參的構造函數,而類可以
6.結構體申明有參構造函數后,無參構造不會被頂掉

7.結構體不能申明析構函數,而類可以
8.結構體不能被繼承,而類可以
9.結構體需要在構造函數中初始化所有成員變量,而類隨意
10.結構體不能被靜態static修飾(不存在靜態結構體),而類可以

11.結構體不能在自己內部申明和自已一樣的結構體變量,而類可以
?

3.結構體的特別之處

結構體可以繼承接口,接口是行為的抽象

4.如何選擇結構體和類

1.想要用繼承和多態時,直接淘汰結構體,比如玩家、怪物等等

2.對象時數據集合時,優先考慮結構體,比如位置、坐標等等
3.從值類型和引用類型賦值時的區別上去考慮,比如經常被賦值傳遞的對象,并且改變賦值對象,原對象不想跟著變化時,就用結構體。比如坐標、向量.旋轉等等
?

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

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

相關文章

【漯河市人才交流中心_登錄安全分析報告-Ajax泄漏滑動距離導致安全隱患】

前言 由于網站注冊入口容易被黑客攻擊,存在如下安全問題: 暴力破解密碼,造成用戶信息泄露短信盜刷的安全問題,影響業務及導致用戶投訴帶來經濟損失,尤其是后付費客戶,風險巨大,造成虧損無底洞…

JavaSE:異常

1、什么是異常 在生活當中,不管是人還是動物又或是植物,都會生病;在程序中也是,作為程序猿,雖然我們會盡力將程序寫的完美,可難免會出現一些問題~ 在程序執行過程中,發生的一些不正常行為&…

Windows系統安裝openvino(2024.1.0)

一、openvino下載: 下載地址:下載英特爾發行版 OpenVINO 工具套件 (intel.cn) 下載完之后將壓縮包解壓,然后重命名文件夾為openvino_2024.1.0。 二、環境配置 以python環境為例:(建議使用moniconda虛擬環境來安裝&am…

Android 圖表開發開源庫 MPAndroidChart 使用總結

1. 引言 電視項目中需要一個折線圖表示節電數據變化情況,類比 H5 來說,Android 中也應該有比較成熟的控件,經過調研后,發現 MPAndroidChart 功能比較強大,網上也有人說可能是目前 Android 開發最好用的一個三方庫了&a…

【力扣】LCR 130. 衣櫥整理

一、題目描述 二、算法思路 這是?道非常典型的「搜索」類問題。 我們可以通過「深搜」或者「寬搜」,從 [0, 0] 點出發,按照題目的要求(選擇 向右移動一格 或 向下移動一格,但不能移動到衣柜之外 )一直往 [m - 1, …

詳解Spring IoCDI(二)

目錄 承接上文:詳解Spring IoC&DI (一) 1.IoC詳解 1.1方法注解Bean 1.2方法注解要配合類注解使用 1.3定義多個對象 1.4重命名Bean 1.5掃描路徑 2.DI詳解 2.1DI與IoC的關系 2.2屬性注入 2.3構造方法注入 2.4Setter注入 2.5 三…

代碼隨想錄算法訓練營第四十五天|1049.最后一塊石頭的重量II、494.目標和、 474.一和零

1049.最后一塊石頭的重量II 文檔講解:代碼隨想錄 題目鏈接:. - 力扣(LeetCode) 本題其實就是盡量讓石頭分成重量相同的兩堆,相撞之后剩下的石頭最小,這樣就化解成01背包問題了。 和昨天講解的416. 分割等和…

visual studio code 全局搜索

VScode寫代碼的時候,會經常性的需要進行查找代碼,那么怎么在Visual Studio Code中進行查找呢,下面就來大家vscode全局搜索的方法。 想要在vscode全局搜索進行全局搜索,使用快捷鍵CTRLSHIFTF即可進行搜索,也可以在左邊…

哪吒監控+cfcdn+ 反代grp端口

哪吒監控cfcdn 反代grp端口 背景: 哪吒監控:感覺VPS線路不穩定,為了打消自己潛意識,希望量化延遲。 cfcdn:隱藏真實站點,保障小雞隱秘安全 反代grpc端口: 反代grpc到支持https(TLS)的端口,這…

Tomcat啟動閃退問題及解決方法

Tomcat啟動閃退問題可能由多種原因引起,以下是一些常見的原因及相應的解決方法,按照清晰的結構進行歸納: 一、環境變量問題 Java環境問題:Tomcat依賴于Java環境,如果JDK未正確安裝或環境變量配置不正確,會…

Elasticsearch 認證模擬題 - 3

1、題目 有一索引有 3 個字段,請寫一個查詢去匹配這三個字段,并且將三個字段的評分相加作為最后的總評分 # 創建索引 PUT task {"mappings": {"properties": {"fielda":{"type": "text"},"fie…

TrueNAS開啟SSH登錄ROOT

簡介: 從 SCALE Bluefin 22.12.0 開始,為了加強安全性并遵守聯邦信息處理標準 (FIPS),root帳戶登錄已被棄用。所有 TrueNAS 用戶都應創建具有所有必需權限的本地管理員帳戶,并開始使用它來訪問 TrueNAS。當根用戶密碼被禁用時,只有管理用戶帳戶才能登錄 TrueNAS Web 界面。…

從零學算法2965

2965. 找出缺失和重復的數字 給你一個下標從 0 開始的二維整數矩陣 grid,大小為 n * n ,其中的值在 [1, n2] 范圍內。除了 a 出現 兩次,b 缺失 之外,每個整數都 恰好出現一次 。 任務是找出重復的數字a 和缺失的數字 b 。 返回一個…

輪狀病毒簡介-卡梅德生物

輪狀病毒是一種非常常見的病毒,主要影響嬰幼兒和小孩,引起嚴重的胃腸炎,表現為嚴重腹瀉、嘔吐、發燒和脫水。這種病毒全球流行,是全世界五歲以下兒童因腹瀉導致死亡的主要原因之一。輪狀病毒屬于Reoviridae家族,具有雙…

邏輯回歸【python,機器學習,算法】

邏輯回歸是一種有監督的學習分類算法,用于預測目標變量的概率。目標或因變量的性質是二分法的,這意味著將只有兩個可能的類。主要解決二分類問題。 主要步驟有三個: 求線性回歸曲線。通過 sigmoid 函數將線性回歸曲線轉為 0-1 范圍函數。 …

機器學習-11-使用kaggle命令下載數據集和操作指南

參考kaggle API 命令下載數據集 參考Kaggle操作完整指南(2023版) 參考Kaggle如何入門? 1 kaggle操作指南 Kaggle 是一個流行的數據科學競賽平臺。由 Goldbloom 和 Ben Hamner 創建于 2010 年。為什么這兩個家伙要創立這樣一個平臺呢? 數據科學社區一直有這樣一個難題:對…

低代碼開發平臺(Low-code Development Platform)的模塊組成部分

低代碼開發平臺(Low-code Development Platform)的模塊組成部分主要包括以下幾個方面: 低代碼開發平臺的模塊組成部分可以按照包含系統、模塊、菜單組織操作行為等維度進行詳細闡述。以下是從這些方面對平臺模塊組成部分的說明: …

docker安裝mysql8和mysql5.7

1.docker安裝mysql5.7,請點擊此鏈接 2.docker安裝mysql8并掛載數據卷 docker pull mysql:8.0 docker run --name mysql8 -e MYSQL_ROOT_PASSWORDmy-secret-pw -d mysql:8.0 docker run --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -v /mqq/mysql8/datadir:/var/lib/mysql -d…

虛擬dom的理解

由普通的js對象來描述dom對象,是對于真實dom的映射,因為不是真實的dom對象所以叫虛擬dom。因為js處理數據的速度比操作dom的速度更快,性能更好,所以讓現代這些react vue 等框架都采用了虛擬dom。 key值是唯一性的,在虛擬dom樹進行…

【喜報】科大睿智服務企業通過CMMI3級認證

?北京建投科信科技發展股份有限公司(以下簡稱“北京建投科技” )前身為北京銀帝科技發展公司,成立于1993年,注冊資本6,000萬元,為中國建銀投資有限責任公司(簡稱“中國建投”)的成員企業建投華…