結構可以實現介面,但它們無法繼承另乙個結構。因此,結構成員無法宣告為 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...