1. 程式人生 > >【知識積累】C#中結構體和類的區別

【知識積累】C#中結構體和類的區別

【類】

    類是對現實生活中一類具有共同特徵的事物的抽象。類的實質是一種資料型別,類似於int、char等基本型別,不同的是它是一種複雜的資料型別。因為它的本質是型別,而不是資料,所以不存在於記憶體中,不能被直接操作,只有被例項化為物件時,才會變得可操作。

    類的內部封裝了方法,用於操作自身的成員。類是對某種物件的定義,具有行為。它描述一個物件能夠做什麼以及做的方法。它們是可以對這個物件進行操作的程式的過程。包含有關物件動作方式的資訊,包括它的名稱、方法、屬性、事件。

    類的構成包括資料成員和成員函式。資料成員對應類的屬性,類的資料成員也是一種資料型別,並不需要分配記憶體。成員函式則用於操作類的各項屬性,是一個類具有的特有的操作。類和外界發生互動的操作稱為介面。

    類的定義:

<pre name="code" class="html">class  類名
{
public:
公有成員
private:
私有成員

protected:
保護成員
};
     類的例項化:

Dog dog=new Dog();

【結構體】

結構是使用struct關鍵字定義的,與類類似,都表示可以包含資料成員和函式成員的資料結構。

結構的特徵:

結構的例項可以不使用new運算子;在結構宣告中,除非欄位被宣告為const或static,否則無法初始化。

結構可以實現介面,但是不能從另一個結構或類繼承,而且不能作為一個類的基類。

結構的定義:

struct A
{
   public int X;
}

二者區別:

1、語法定義不同:

定義類,使用關鍵字class;定義結構使用關鍵字struct。

在結構體重可以宣告欄位,但是宣告欄位的時候不可以給其賦初始值。類卻沒問題。

總體上來說,從語法上看,它們的語法都是大同小異,類裡面的成員幾乎都可以定義在結構體中(解構函式除外。)

2、關於建構函式:

在類裡面,對於隱式的建構函式,如果我們沒有為類寫任何建構函式,那麼C#編譯器就會自動生成一個不帶參的隱式建構函式,一旦這個類裡面寫了任何建構函式,這個隱式建構函式就會不再自動生成。

在結構中,也存在一個隱式的建構函式,並且不可以在這個類中再手動為結構新增一個無參的建構函式。同時,結構體中的所有欄位必須要被賦值。

3、代表型別:

類是引用型別,引用型別的變數中儲存的物件是堆空間中的地址,(空間大,速度慢)

結構體是值型別,當其作為一個區域性變數的時候,變數是儲存在棧空間中的。(空間小,速度快)

4、適用場景:

struct型別適合表示如點、矩形和顏色這樣的輕量級物件。同時,我們在變數傳值的時候,希望傳遞物件的拷貝而不是物件的引用地址,這個時候需要適用結構。

類主要是用來表示包含多個屬性等的重量級物件。可以包含資料成員和函式成員的資料結構。