欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中struct與class的區(qū)別詳解

 更新時(shí)間:2022年06月15日 15:39:39   作者:qq_42987967  
本文主要介紹了C#中struct與class的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.最大的區(qū)別

struct類(lèi)型定義的變量是值類(lèi)型,class定義的變量是引用類(lèi)型。因此struct類(lèi)型定義的對(duì)象是分配在棧上面的,而class定義的對(duì)象是分配在堆上的。

2.struct成員無(wú)法被聲明為protected。

舉例:

struct Test1
{
    protected readonly bool c;//會(huì)報(bào)錯(cuò)
}

3.struct是隱式的sealed類(lèi)

因此struct不能被繼承也無(wú)法繼承其他,因此其成員也不能指定為 abstract、virtual (畢竟被密封了,無(wú)法實(shí)現(xiàn)虛函數(shù)跟抽象函數(shù))。

但是struct可以實(shí)現(xiàn)接口。

interface i1
{
    void fun();
}
struct Test1:i1
{
    public void fun()
    {
        throw new System.NotImplementedException();
    }
}

4.struct中無(wú)法重載默認(rèn)構(gòu)造函數(shù)

struct Test1
{
    public int a ;
    public Test1(int A) //但是可定義非默認(rèn)構(gòu)造函數(shù)
    { 
        a = A; 
    }
    public Test1()//對(duì)默認(rèn)構(gòu)造函數(shù)重載,將報(bào)錯(cuò)
    {
        a = 1;
    }
}

5.關(guān)于對(duì)象的初始化

1)結(jié)構(gòu)體中的變量是不能在結(jié)構(gòu)體中直接賦初始值的,類(lèi)的變量成員可以。

struct Test1
{
    public int a =1;//不允許賦初值,因此是錯(cuò)的
    public int b;//對(duì)的
 
}
class Test2
{
    public int a=1;//對(duì)的
    public int b;//對(duì)的,默認(rèn)賦初值為0 
}

2)當(dāng)使用 New 操作符創(chuàng)建一個(gè)結(jié)構(gòu)對(duì)象時(shí),會(huì)調(diào)用適當(dāng)?shù)臉?gòu)造函數(shù)來(lái)創(chuàng)建結(jié)構(gòu)。與類(lèi)不同,結(jié)構(gòu)可以不使用 New 操作符即可被實(shí)例化。(即不使用new也是真的開(kāi)辟了一個(gè)存儲(chǔ)該struct變量的空間)

3)但是如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被賦值,對(duì)象才被使用。如果使用默認(rèn)構(gòu)造函數(shù)進(jìn)行new,會(huì)對(duì)數(shù)據(jù)進(jìn)行默認(rèn)賦值(int為0,引用類(lèi)型為Null)

struct Test1
{
    public int a =1;
    public string b =1;
}
    void TestFun()
    {
        Test1 test1;
        test1.a = 1,test1.b = "1234";//必須給a跟b都賦值了才能使用test1
        Console.WriteLine(test1.a);
        Test1 test2=new Test1();//test2.a=0,test2.b=Null
    }

4)struct中的構(gòu)造函數(shù)必須為所有數(shù)據(jù)成員賦初值。

struct Test1
{
    public int a ;//不允許賦初值,因此是錯(cuò)的
    public string b;
    public Test1(int A) { 
        a = A;
        b = "4534";//必須對(duì)所有數(shù)據(jù)成員賦初值,否則報(bào)錯(cuò)
    }
}

6.結(jié)構(gòu)體沒(méi)有析構(gòu)函數(shù),也無(wú)法自己去給結(jié)構(gòu)體定義一個(gè)析構(gòu)函數(shù)

畢竟struct是值類(lèi)型,用析構(gòu)函數(shù)也沒(méi)啥鳥(niǎo)用。

struct Test1
{
    ~Test1() { }//錯(cuò)誤的做法,會(huì)報(bào)錯(cuò)
}

到此這篇關(guān)于C#中struct與class的區(qū)別詳解的文章就介紹到這了,更多相關(guān)C# struct與class內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能

    C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能

    最近小編接到一個(gè)功能需要實(shí)現(xiàn)一個(gè)提示框并且能自動(dòng)關(guān)閉的,看到這個(gè)需求真是懵了,四處搜集資料才搞定,接下來(lái)通過(guò)本文給大家分享C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • Unity實(shí)現(xiàn)大轉(zhuǎn)盤(pán)的簡(jiǎn)單筆記

    Unity實(shí)現(xiàn)大轉(zhuǎn)盤(pán)的簡(jiǎn)單筆記

    這篇文章主要為大家分享了Unity實(shí)現(xiàn)大轉(zhuǎn)盤(pán)的簡(jiǎn)單筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 采用C#代碼動(dòng)態(tài)設(shè)置文件權(quán)限

    采用C#代碼動(dòng)態(tài)設(shè)置文件權(quán)限

    在開(kāi)發(fā)中,我們經(jīng)常會(huì)使用IO操作,例如創(chuàng)建,刪除文件等操作。在項(xiàng)目中這樣的需求也較多,我們也會(huì)經(jīng)常對(duì)這些操作進(jìn)行編碼,但是對(duì)文件的權(quán)限進(jìn)行設(shè)置,這樣的操作可能會(huì)手動(dòng)操作,本文介紹一種采用代碼動(dòng)態(tài)對(duì)文件設(shè)置權(quán)限的操作。
    2016-12-12
  • C#獲取串口列表實(shí)現(xiàn)實(shí)時(shí)監(jiān)控串口

    C#獲取串口列表實(shí)現(xiàn)實(shí)時(shí)監(jiān)控串口

    本文主要介紹兩種獲取串口列表的方法,比較簡(jiǎn)單,方便大家使用,另外分享了一個(gè)已封裝的API,需要的朋友可以參考下。
    2016-05-05
  • WPF如何自定義TabControl控件樣式示例詳解

    WPF如何自定義TabControl控件樣式示例詳解

    這篇文章主要給大家介紹了關(guān)于WPF如何自定義TabControl控件樣式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Unity技術(shù)手冊(cè)之Slider滑動(dòng)器使用實(shí)例詳解

    Unity技術(shù)手冊(cè)之Slider滑動(dòng)器使用實(shí)例詳解

    這篇文章主要為大家介紹了Unity技術(shù)手冊(cè)之Slider滑動(dòng)器使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • C#反射使用方法過(guò)程及步驟

    C#反射使用方法過(guò)程及步驟

    這篇文章主要為大家詳細(xì)介紹了C#反射使用方法過(guò)程及步驟,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Unity3D UI Text得分?jǐn)?shù)字增加的實(shí)例代碼

    Unity3D UI Text得分?jǐn)?shù)字增加的實(shí)例代碼

    這篇文章主要介紹了Unity3D UI Text得分?jǐn)?shù)字增加方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C#圖表算法之有向圖

    C#圖表算法之有向圖

    這篇文章介紹了C#圖表算法之有向圖,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#文件非占用讀取與幫助類(lèi)FileHelper

    C#文件非占用讀取與幫助類(lèi)FileHelper

    這篇文章介紹了C#文件非占用讀取與幫助類(lèi)FileHelper,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論