C 學習教程七

2021-06-20 04:19:05 字數 2180 閱讀 6439



結構可以實現介面,但它們無法繼承另乙個結構。因此,結構成員無法宣告為 protected。

結構還可以包含建構函式、常量、字段、方法、屬性、索引器、運算子、事件和巢狀型別,但如果同時需要上述幾種成員,則應當考慮改為使用類作為型別。

struct mybook

mybook mybook;

mybook.price=10;

1,結構是值型別,類是引用型別

注:a,值型別在堆疊上分配位址,引用型別在堆上分配位址(堆疊的執行效率比堆高,但是堆疊的資源有限,適用於簡單的邏輯                 處理,如:基本型別中int 對應的 system.int32等都是結構)

b,值型別的賦值可以創造新的值型別,而引用型別之間的賦值是複製引用的位址

c,結構和類的基類都是object,c#所有的型別的基類都是object

d,雖然結構的初始化也使用了new 操作符可是結構物件依然分配在堆疊上而不是堆上,如果不使用new,那麼在初始化所有                 字段之前,欄位將保持未賦值狀態,且物件不可用

2, 結構(struct)不能從另外乙個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用sealed宣告,可是結構是隱式的sealed

類(class)完全可擴充套件的,除非顯示的宣告sealed 否則類可以繼承其他類和介面,自身也能被繼承

注:結構可以使用和類相同的辦法繼承介面(有點奇怪)

3,和類相比,結構沒有預設的建構函式,但可以新增建構函式,沒有析構函式,因為不能繼承,所以沒有abstruct和sealed 不能用proteced修飾, 並且可以不用new初始化,結構中不能初始化字段。

例項**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace hello_world

struct sperson

//error:結構不能包含顯式的無引數建構函式

public sperson(string name, int age)

//public int =2; //error:類、結構或介面成員宣告中的標記「=」無效

private string name;

private int age;

public string name set }

public int age set }

public override string tostring()

,age:", this.name, this.age);}}

class cperson

public cperson(string name, int age)

private string name;

private int age;

public string name set }

public int age set }

public override string tostring()

,age:", this.name, this.age);}}

}}

效果截圖

1.struct 是值型別,class 是物件型別 

2.struct 不能被繼承,class 可以被繼承 

3.struct 預設的訪問許可權是public,而class 預設的訪問許可權是private. 

4.struct總是有預設的建構函式,即使是過載預設建構函式仍然會保留。這是因為struct的建構函式是由編譯器自動生成的,但是如果過載建構函式,必需對struct中的變數全部初始化。並且struct的用途是那些描述輕量級的物件,例如line,point等,並且效率比較高。class在沒有過載建構函式時有預設的無引數建構函式,但是一被過載些預設建構函式將被覆蓋。 

5.struct的new和class的new是不同的。struct的new就是執行一下建構函式建立乙個新例項再對所有的字段進行copy。而class則是在堆上分配一塊記憶體然後再執行建構函式,struct的記憶體並不是在new的時候分配的,而是在定義的時候分配 

C 高階教程(七)

c 中的結構 struct 我要說的是c 中的,注意,我在這裡說的結構不是指的c 的語言結構.這裡所說的是一種與類 class 相對的東西,下面我就與類相對比,來說一說這個struct.下面的這個例子講述了如何建立乙個具有屬性,方法和乙個欄位的結構.並講述如何使用他.000 structs stru...

SUNWEN教程之 C 高階(七) C 教程

好了,言歸正傳.我要說的是c 中的結構 struct 注意,我在這裡說的結構不是指的c 的語言結構.這裡所說的是一種與類 class 相對的東西,下面我就與類相對比,來說一說這個struct.下面的這個例子講述了如何建立乙個具有屬性,方法和乙個欄位的結構.並講述如何使用他.000 structs s...

C 學習筆記 七

第七講 委託1 委託 是一種安全地封裝方法的型別,它與 c 和 c 中的函式指標類似。與 c 中的函式指標不同,委託是物件導向的 型別安全的和保險的。委託的型別由委託的名稱定義。下面的示例宣告了乙個名為 del 的委託,該委託可以封裝乙個採用字串 作為引數並返回 void 的方法。public de...