C 中類和結構的區別!

2021-05-09 22:21:57 字數 2995 閱讀 9292

類和結構的區別

目錄: ø

類和結構的示例比較 ø

類和結構的差別 ø

如何選擇使用類還是使用結構

一類和結構的示例比較

結構示例:

public struct person

}類示例:

public class testtime

}呼叫過程

public class test

}從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是

struct

還是class

的區別,而且使用時,定義

新的結構和定義新的類的方法也非常類似。

二類和結構的區別

1

、值型別和引用型別

結構:結構是值型別;

值型別在堆疊上分配位址,所有的基型別都是結構型別,例如:

int對應

system.int32

結構,string

對應system.string

結構,通過使用結構可以建立更多的值型別。

類:類是引用型別;

引用型別在堆上分配位址。

堆疊的執行效率要比堆的執行效率高,可是堆疊的資源有限,不適合處理大的邏輯複雜的物件。所以結構處理作為基型別對待的小物件,而類處理某個商業邏輯。

賦值操作,因為結構是值型別,所以結構之間的賦值可以建立新的結構,而類是引用型別,類之間的賦值只是複製引用。

說明:

u雖然結構與類的型別不一樣,可是他們的基型別都是物件(

object

),c#

中所有型別的基型別都是

object;

u雖然結構的初始化也使用了

new操作符可是結構物件依然分配在堆疊上而不是堆上; u

結構的宣告:

person myperson=new person()      //

宣告結構

person myperson;

使用new

關鍵後建立結構,呼叫結構的建構函式,對所有字段進行初始化操作(每個字段根據宣告的型別得到預設值);

如果不使用

new,欄位將保持未賦值狀態,且物件不可用。必須初始化所有的資料成員,物件才可用;不能通過屬性和方法進行初始化,因為在初始化所有的資料成員之前,沒用乙個函式成員能被呼叫,所以,資料成員必須宣告為

public的。

注意:當結構體中有屬性時,必須使用

new來建立結構體變數

如:下面**會出錯,使用了未賦值的變數

p public struct person

set }

} class program

}正確**:

public struct person

set 

}public person(int age)}

class program

}2

、繼承性

結構:不能從另外乙個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用

sealed

宣告,可是結構是隱式的

sealed。

:完全可擴充套件的,除非顯示的宣告

sealed

,否則類可以繼承其他類和介面,自身也能被繼承。

說明:

雖然結構不能被繼承

可是結構能夠繼承介面,方法和類繼承介面一樣。

例如:結構實現介面

inte***ce iimage

struct picture : iimage

private int x, y, z;

// other struct members}

3

、內部結構

結構:

u沒有預設的建構函式,但是可以新增建構函式 u

沒有析構函式 u

沒有abstract

和sealed(

因為不能繼承)u

不能有protected

修飾符(

結構成員預設修飾符為私有,跟類相同)u

可以不使用

new初始化 u

在結構中初始化例項欄位是錯誤的

類:

u有預設的建構函式 u

有析構函式 u

可以使用

abstract

和sealedu有

protected

修飾符

u必須使用

new初始化 u

在類中可以初始化例項字段 三

如何選擇類還是結構

結構可以看作是輕量級的類,在效能上要好一點。 u

對於大量邏輯的物件,建立類要比建立結構好一些。 u

結構表示如點、矩形和顏色這樣的輕量物件,例如,如果宣告乙個含有

1000

個點物件的陣列,則將為引用每個物件分配附加的記憶體。在此情況下,結構的成本較低。 u

在表現抽象和多級別的物件層次時,類是最好的選擇。 u

大多數情況下該型別只是一些資料時,結構時最佳的選擇。

C 中類和結構的區別

二 類與結構的差別 1.值型別與引用型別 結構是值型別 值型別在堆疊上分配位址,所有的基型別都是結構型別,例如 int 對應system.int32 結構,string 對應 system.string 結構 通過使用結構可以建立更多的值型別 堆疊的執行效率要比堆的執行效率高,可是堆疊的資源有限,不...

C 中結構和類的區別

一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是struct還是class的區別,而且使用時,定義新...

c 中 結構和類的區別

一 類與結構的差別 1.值型別與引用型別 結構是值型別 值型別在堆疊上分配位址,所有的基型別都是結構型別,例如 int 對應system.int32 結構,通過使用結構可以建立更多的值型別 類是引用型別 引用型別在堆上分配位址 堆疊的執行效率要比堆的執行效率高 因為對於引用型別解引用以訪問它的值需涉...