国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

重溫C#中的值類型和引用類型

這篇具有很好參考價(jià)值的文章主要介紹了重溫C#中的值類型和引用類型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在C#中,數(shù)據(jù)類型分為值類型引用類型兩種。 引用類型變量存儲(chǔ)的是數(shù)據(jù)的引用,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)堆中,而值類型變量直接存儲(chǔ)數(shù)據(jù)。對(duì)于引用類型,兩個(gè)變量可以引用同一個(gè)對(duì)象。因此,對(duì)一個(gè)變量的操作可能會(huì)影響另一個(gè)變量引用的對(duì)象。對(duì)于值類型,每個(gè)變量都有自己的數(shù)據(jù)副本,并且對(duì)一個(gè)變量的操作不可能影響另一個(gè)變量。

值類型(Value Type)

所有的值類型都繼承自ValueType類,它通過(guò)重載Object的虛方法來(lái)更好地適應(yīng)值類型。

雖然ValueType是值類型的隱式基類,但不能直接創(chuàng)建繼承自ValueType的類。?

值類型包含以下兩種:

  • ?結(jié)構(gòu)類型(Structure Type),用于封裝數(shù)據(jù)和相關(guān)的功能,包括自定義結(jié)構(gòu)體和內(nèi)置結(jié)構(gòu)體(如:整型、浮點(diǎn)類型、布爾型、字符型和值元組)
  • ?枚舉類型(Enum Type),由一組命名常量定義,表示一個(gè)選項(xiàng)或選項(xiàng)組合。

結(jié)構(gòu)類型直接繼承自System.ValueType,? 而枚舉類型則是繼承自System.Enum。

值類型是可以為空的,用System.Nullable<T> (或T?)泛型類型來(lái)表示,如:int?、bool?。因此,System.Nullable<T>本身也是一種值類型。

public struct Nullable<T> where T : struct

可以使用Struct約束來(lái)指定一個(gè)類型參數(shù)是不可空的值類型(結(jié)構(gòu)類型和枚舉類型都滿足約束)。

值類型不能被繼承,因?yàn)樗兄殿愋妥罱K會(huì)編譯成終結(jié)類(sealed),但結(jié)構(gòu)體可以實(shí)現(xiàn)接口。

下面是一個(gè)自定義的結(jié)構(gòu)體:
public struct Location
{
    public double X;
    public double Y;
    public Location(double x, double y) => (X, Y) = (x, y);
}

?分別實(shí)例化具有相同數(shù)據(jù)的值對(duì)象a和b,進(jìn)行相等判斷,輸出結(jié)果如下:

var a = new Location(1, 2);
var b = new Location(1, 2);
Console.WriteLine(a.Equals(b)); // true
b.Y = 3;
Console.WriteLine(a.Equals(b)); // false

由此可見:值類型相等比較的是數(shù)據(jù)本身。

引用類型(Reference Type)

最常見的引用類型就是類(class),? 還包括字符串、數(shù)組、委托、接口、記錄等。所有引用類型都繼承自O(shè)bject。

字符串(string):一種特殊的引用類型,它不能被繼承,具有不可變性,但用法上更像是值類型。

string a = "123";
string b = a;
a = "456";
Console.WriteLine(a);  // "456"
Console.WriteLine(b);  // "123"

記錄(record): C#9.0中引入,它不是一個(gè)新的語(yǔ)法,而是語(yǔ)法糖。用來(lái)定義一個(gè)引用類型,該類型提供內(nèi)置封裝數(shù)據(jù)功能。

public record Person(string FirstName, string LastName);
下面是一個(gè)自定義的類:
public class Location
{
    public double X;
    public double Y;
    public Location(double x, double y) => (X, Y) = (x, y);
}

同樣分別實(shí)例化具有相同數(shù)據(jù)的引用對(duì)象a和b,進(jìn)行相等判斷,輸出結(jié)果如下:

var a = new Location(1,2);
var b = new Location(1,2);
var c = b;
Console.WriteLine(a == b); // false
Console.WriteLine(a.Equals(b)); // false
Console.WriteLine(b == c); // true

由此可見:引用類型相等比較的是引用地址,而不是數(shù)據(jù)本身。

值類型和引用類型比較

1.?值類型在結(jié)構(gòu)中是堆棧分配或內(nèi)聯(lián)分配的,引用類型是堆分配的。

2. 值類型變量賦值復(fù)制的是對(duì)象本身,而引用類型變量賦值復(fù)制的是對(duì)象的引用。

3. 值類型和引用類型最終都是繼承Object。

4. 值類型中的結(jié)構(gòu)體和引用類型都可以實(shí)現(xiàn)接口。

5. 值類型不能被繼承,因?yàn)樗兄殿愋投际莝ealed,而引用類型可以派生新的類型(string除外)。

6.?值類型在內(nèi)存管理方面具有更好的效率,適合用做存儲(chǔ)數(shù)據(jù)的載體。引用類型支持多態(tài),適合用于定義應(yīng)用程序的行為。

?

參考資料:

Value types - C# reference | Microsoft Learn

Reference types - C# Reference | Microsoft Learn文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-614160.html

到了這里,關(guān)于重溫C#中的值類型和引用類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C#模擬C++模板特化對(duì)類型的值的支持

    C#模擬C++模板特化對(duì)類型的值的支持

    C++的模板相比于C#的泛型,有很多地方都更加的靈活(雖然代價(jià)是降低了編譯速度),比如C++支持變長(zhǎng)參數(shù)模板、支持枚舉、int等類型的值作為模板參數(shù)。 C++支持枚舉、int等類型的值作為模板參數(shù),為C++的靜態(tài)多態(tài)編程提供了很好的幫助,比如根據(jù)枚舉值編譯期確定某個(gè)對(duì)象

    2023年04月17日
    瀏覽(24)
  • c#值類型和引用類型

    c#值類型和引用類型

    1:值類型繼承自system.valueType,引用類型繼承自system.objectType. 值類型: 存儲(chǔ)在棧內(nèi)存中。 包括整數(shù)、浮點(diǎn)數(shù)、字符、布爾值和結(jié)構(gòu)體等。 復(fù)制時(shí)會(huì)創(chuàng)建一個(gè)完全獨(dú)立的副本。 引用類型: 存儲(chǔ)在堆內(nèi)存中,而變量本身存儲(chǔ)在棧內(nèi)存中,指向堆內(nèi)存中的對(duì)象。 包括類、接口、

    2024年01月20日
    瀏覽(20)
  • C# 值類型和引用類型

    傳遞就是拷貝, a = b 意味著在內(nèi)存里我講b的所有復(fù)制了一份(復(fù)制到 a 這里) 類似 C 函數(shù)傳實(shí)參 傳遞的是地址 a = b 意味著我將 a 也指向了 b 所指向的內(nèi)存 類似 C 函數(shù)傳指針

    2024年03月28日
    瀏覽(36)
  • C#中的數(shù)據(jù)類型轉(zhuǎn)換

    C#中的數(shù)據(jù)類型轉(zhuǎn)換

    開發(fā)工具與關(guān)鍵技術(shù): MVC 撰寫時(shí)間:2021/8/18 下面我們來(lái)講C#中數(shù)據(jù)類型的轉(zhuǎn)換; 1.C#中的數(shù)據(jù)類型轉(zhuǎn)換分為兩種:隱式類型轉(zhuǎn)換以及顯式類型轉(zhuǎn)換; (1)隱式類型轉(zhuǎn)換:將存儲(chǔ)范圍小的數(shù)據(jù)類型直接轉(zhuǎn)換為存儲(chǔ)范圍大的數(shù)據(jù)類型。 例如: 隱式轉(zhuǎn)換大致分為以下幾種: 隱式

    2023年04月08日
    瀏覽(22)
  • 【C#學(xué)習(xí)筆記】引用類型(1)

    【C#學(xué)習(xí)筆記】引用類型(1)

    引用類型的變量存儲(chǔ)對(duì)其數(shù)據(jù)(對(duì)象)的引用,而值類型的變量直接包含其數(shù)據(jù)。 對(duì)于引用類型,兩種變量可引用同一對(duì)象;因此,對(duì)一個(gè)變量執(zhí)行的操作會(huì)影響另一個(gè)變量所引用的對(duì)象。 對(duì)于值類型,每個(gè)變量都具有其自己的數(shù)據(jù)副本,對(duì)一個(gè)變量執(zhí)行的操作不會(huì)影響另

    2024年02月14日
    瀏覽(31)
  • 【C#學(xué)習(xí)筆記】引用類型(2)

    【C#學(xué)習(xí)筆記】引用類型(2)

    支持 .NET 類層次結(jié)構(gòu)中的所有類,并為派生類提供低級(jí)別服務(wù)。 這是所有 .NET 類的最終基類;它是類型層次結(jié)構(gòu)的根。 簡(jiǎn)單來(lái)說(shuō),它是萬(wàn)能的,它是所有類型的父類。因?yàn)?NET 中的所有類都派生自 Object,因此 Object 類中定義的每個(gè)方法都可用于系統(tǒng)中的所有對(duì)象。 在 Object

    2024年02月14日
    瀏覽(20)
  • c#獲取Web.Config中的值出現(xiàn)的錯(cuò)誤及解決辦法

    c#獲取Web.Config中的值出現(xiàn)的錯(cuò)誤及解決辦法

    1.錯(cuò)誤提示 2.原因?qū)ふ?問(wèn)題出在Web.Config文件中 圖示如下: 3.改正代碼如下: ettings

    2024年04月11日
    瀏覽(23)
  • Java中的各種引用類型以及部分引用的相關(guān)例子

    Java中的各種引用類型以及部分引用的相關(guān)例子

    在Java中,引用類型主要有四種,分別是:強(qiáng)引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)和虛引用(Phantom Reference)。這些類型通常與垃圾回收機(jī)制有關(guān),用來(lái)描述對(duì)象的生命周期和可達(dá)性。下面詳細(xì)介紹每一種引用類型: 強(qiáng)引用 (Strong Reference) 強(qiáng)

    2024年04月13日
    瀏覽(20)
  • Java中的四種引用類型及其使用方式

    Java中的四種引用類型及其使用方式

    Java中有四種引用類型,分別是強(qiáng)引用(Strong Reference)、軟引用(Soft Reference)、弱引用(WeakReference)、虛引用(PhantomReference)。 這要從Java管理內(nèi)存的方式說(shuō)起。Java為了將程序員從內(nèi)存管理中解救出來(lái),即不讓程序員自己申請(qǐng)堆內(nèi)存(比如C語(yǔ)言程序員需要通過(guò)malloc請(qǐng)求操作系統(tǒng)分配一

    2023年04月09日
    瀏覽(23)
  • Python中的弱引用與基礎(chǔ)類型支持情況探究

    最近有一個(gè)業(yè)務(wù)場(chǎng)景需要用Python自行實(shí)現(xiàn)一個(gè)簡(jiǎn)單的LRU cache,不可避免的接觸到了弱引用這一概念,這里記錄一下。 Python內(nèi)存回收由垃圾回收器自動(dòng)管理,當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)歸0時(shí),其內(nèi)存就可能被回收掉,而引用計(jì)數(shù)器的數(shù)值其實(shí)就是代表有多少個(gè)強(qiáng)引用指向該對(duì)象,

    2024年02月16日
    瀏覽(14)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包