最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

最新評(píng)論

新源县| 务川| 钦州市| 通渭县| 张家口市| 高淳县| 五台县| 阳泉市| 琼中| 南澳县| 山丹县| 汕尾市| 富宁县| 社旗县| 谢通门县| 南召县| 金堂县| 庆云县| 平顶山市| 昭通市| 尼玛县| 定南县| 聂拉木县| 郑州市| 长汀县| 勐海县| 新绛县| 当阳市| 皋兰县| 湛江市| 上杭县| 汕头市| 云霄县| 铜梁县| 新乐市| 当涂县| 衡南县| 曲松县| 共和县| 东平县| 哈巴河县|