C 中Struct與Class的區別

2022-08-23 16:36:10 字數 3083 閱讀 6855

class和struct最本質的區別是class是引用型別,而struct是值型別,它們在記憶體中的分配情況有所區別。

什麼是class?

class(類)是物件導向程式設計的基本概念,是一種自定義資料結構型別,通常包含字段、屬性、方法、屬性、建構函式、索引器、操作符等。在.net中,所有的類都最終繼承自system.object類,因此是一種引用型別,也就是說,new乙個類的例項時,在堆疊(stack)上存放該例項在託管堆(managed heap)中的位址,而例項的值儲存在託管堆(managed heap)中。

什麼是struct?

1,class 是引用型別,structs是值型別

既然class是引用型別,class可以設為null。但是我們不能將struct設為null,因為它是值型別。

namespaceax

}}public structstructa

public classclassa

2,當你例項化乙個class,它將建立在堆上。而你例項化乙個struct,它將建立在棧上

3,你使用的是乙個對class例項的引用。而你使用的不是對乙個struct的引用。(而是直接使用它們)

4,當我們將class作為引數傳給乙個方法,我們傳遞的是乙個引用。struct傳遞的是值而非引用。

5,structs 不可以有初始化器,class可以有初始化器。

public structstructa

public classclassa

6,classes 可以有明顯的無引數構造器,但是struct不可以

public structstructa

public structa(int paraa) //ok

}public classclassa

}

7,類使用前必須new關鍵字例項化,struct不需要

publicform3()

8,class支援繼承和多型,struct不支援. 注意:但是struct 可以和類一樣實現介面

9,既然struct不支援繼承,其成員不能以protected 或protected internal 修飾

10,class的構造器不需要初始化全部字段,struct的構造器必須初始化所有字段

public structstructa

//public structa(int paraa) //ok

////public structa(int paraa, int parab) //錯誤:在控制返**用方之前,字段「structa.b」必須被完全賦值

//}public classclassa

}

11,class可以定義析構器,但是struct不可以

12,class比較適合大的和複雜的資料,struct適用於作為經常使用的一些資料組合成的新型別。

適用場合:struct有效能優勢,class有物件導向的擴充套件優勢。

用於底層資料儲存的型別設計為struct型別,將用於定義應用程式行為的型別設計為class。如果對型別將來的應用情況不能確定,應該使用class。

class和struct最本質的區別是class是引用型別,而struct是值型別,它們在記憶體中的分配情況有所區別。

什麼是class?

class(類)是物件導向程式設計的基本概念,是一種自定義資料結構型別,通常包含字段、屬性、方法、屬性、建構函式、索引器、操作符等。在.net中,所有的類都最終繼承自system.object類,因此是一種引用型別,也就是說,new乙個類的例項時,在堆疊(stack)上存放該例項在託管堆(managed heap)中的位址,而例項的值儲存在託管堆(managed heap)中。

什麼是struct?

1,class 是引用型別,structs是值型別

既然class是引用型別,class可以設為null。但是我們不能將struct設為null,因為它是值型別。

namespaceax

}}public structstructa

public classclassa

2,當你例項化乙個class,它將建立在堆上。而你例項化乙個struct,它將建立在棧上

3,你使用的是乙個對class例項的引用。而你使用的不是對乙個struct的引用。(而是直接使用它們)

4,當我們將class作為引數傳給乙個方法,我們傳遞的是乙個引用。struct傳遞的是值而非引用。

5,structs 不可以有初始化器,class可以有初始化器。

public structstructa

public classclassa

6,classes 可以有明顯的無引數構造器,但是struct不可以

public structstructa

public structa(int paraa) //ok

}public classclassa

}

7,類使用前必須new關鍵字例項化,struct不需要

publicform3()

8,class支援繼承和多型,struct不支援. 注意:但是struct 可以和類一樣實現介面

9,既然struct不支援繼承,其成員不能以protected 或protected internal 修飾

10,class的構造器不需要初始化全部字段,struct的構造器必須初始化所有字段

public structstructa

//public structa(int paraa) //ok

////public structa(int paraa, int parab) //錯誤:在控制返**用方之前,字段「structa.b」必須被完全賦值

//}public classclassa

}

11,class可以定義析構器,但是struct不可以

12,class比較適合大的和複雜的資料,struct適用於作為經常使用的一些資料組合成的新型別。

適用場合:struct有效能優勢,class有物件導向的擴充套件優勢。

用於底層資料儲存的型別設計為struct型別,將用於定義應用程式行為的型別設計為class。如果對型別將來的應用情況不能確定,應該使用class。

C 中class與struct的區別

類與結構的例項比較 類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 類示例 呼叫過程 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class 的區別,而且使用時,定義新的結構和定義新的類的方法也非常類似。那麼類和結構的具體區別...

C 中class與struct的區別

一 類與結構的示例比較 結構示例 類示例 呼叫過程 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class 的區別,而且使用時,定義新的結構和定義新的類的方法也非常類似。那麼類和結構的具體區別是什麼呢?二 類與結構的差別 1.值型別與引用型別 結構...

C 中struct與class的區別

1。字面上的區別 在字面上struct是structure的縮寫,通常叫做 結構體 在c語言裡用於將多種資料 多個變數組織在一起,便於表達比較複雜的資料型別,在c 中為了相容c語言保留了該關鍵字,並且保留了c語言中的所有功能。雖然在字面上struct與class的含義不一樣,但在c 中其功能基本是相...