C 高階程式設計筆記之第三章 物件和型別

2022-05-20 17:51:08 字數 3138 閱讀 2353

類與結構的區別是它們在記憶體中的儲存方式訪問方式(類似儲存在堆上的引用型別,而結構是儲存在棧上的值型別)和它們的一些特徵

語法上,類與結構非常相似,主要區別是結構使用關鍵字 struc

t 代替 class 

來宣告。

3.3.1 資料成員

資料成員是包含類資料—字段常量事件的成員。

3.3.2 函式成員

函式成員提供了操作類中資料的某些功能,包括方法屬性建構函式析構函式(終結器)

運算子以及索引器

方法ref 

和 out 

的區別:

ref 

在傳遞之前必須已經被初始化,out 

則不要求。

ref 

的實質是將值型別進行引用傳遞,而 out 

是為了增加返回值。

命名引數:在傳遞引數的過程中可以指定其名字,格式為methodname (parametername : value )

params 

關鍵字: 必須在方法引數的最後面。

方法的過載:不能僅在返回型別上有區別,不能僅根據宣告 ref 

、 out 

或 params 

之間區分。

屬性概念:屬性是乙個或一對方法,在客戶端**看來,它(們)是乙個字段。

get訪問器不帶任何引數,且返回屬性宣告的型別。

set訪問器帶乙個value引數,其型別與宣告的型別相同。

屬性的訪問修飾符:在get和set訪問器中,必須有乙個具備屬性的訪問級別。

建構函式

宣告構造方式就是宣告乙個與包含的類同名的方法,但該方法沒有返回值。

如果提供了帶引數的建構函式,編譯器就不會自動提供預設的建構函式。

(1)靜態建構函式

編寫靜態建構函式的原因:類中有一些靜態欄位或屬性,需要在第一次使用類之前,從外部源中初始化這些欄位和屬性。

.net執行庫沒有確保什麼時候去執行靜態建構函式,所以不應該要求在某個特定時刻執行靜態建構函式中的**。但可以確保的是,它在所有引用前只會呼叫一次。

無參建構函式可以與靜態建構函式在同乙個類中定義。

(2)從建構函式中呼叫其它建構函式

base 

與 this 

關鍵字3.3.3 唯讀字段

readonly 

與 const 

的區別:

readonly 

可以在建構函式中賦值,而 const 

**都不能賦值,只能初始化。

var 

和 new 

關鍵字一起使用可以建立匿名型別,例如。

1

static

void main(string

args)23

4;89

10console.writeline(test.tostring());

1112

13console.writeline(test.name.gettype().tostring());

1415

16console.writeline(test.age.gettype().tostring());

1718

19console.readkey();

2021

22 }

輸出結果如下:

我們並不知道這個物件的型別,編譯器為其「偽造」了乙個名稱,但是只有編譯器才能使用它,我們不能也不應該使用新物件上的任何型別反射,因為這不會得到一致的結果。

1 mystruct mystruct /*

= new mystruct()*/;

2 mystruct.name = "

earl jones";

3 mystruct.age = 17;

覆蓋結構預設的建構函式會報錯:

在**中例項化乙個類或結構時,只要有**引用它,就會形成強引用。

強引用和弱引用的區別是,強引用只要有引用就不會被gc**,而弱引用隨時都可能被gc**,所以使用它的時候必須確定其是否存活。如:

1

myclass myclass;

2 weakreference weakmyclass = new weakreference(new

myclass());3if

(weakmyclass.isalive)4

partial關鍵字可以允許把類、結構、方法或結構放在多個檔案中。

如果宣告類似使用了下面的關鍵字,這些關鍵字就必須應用於同乙個類的所有部分:

所有類都繼承自system.object類。

方法:擴充套件方法用於在某些不能直接修改源**中的類中新增方法。

1

using

system;23

namespace

擴充套件方法414

}1516class

myclass

1722}23

24static

class

addmyclass

2530

31static

public

void sayhi(this

myclass myclass)

3235

}36 }

輸出的結果:

由上得出:

本文部分摘錄自c#高階程式設計第九版,其餘由earl jones整理及總結而成,本人能力有限,如有紕漏望及時指出。

第三章 《類和物件II》

目錄 1.什麼是常物件?使用常物件時要注意什麼?2.什麼是常資料成員?常資料成員怎麼賦初值?3.帶成員初始化列表的建構函式的執行順序是怎樣的?4.在建構函式成員初始化列表中初始化資料成員和在建構函式體中初始化,結果是一樣的?二者在效能方面有什麼區別呢?5.什麼是常成員函式?使用常成員函式要注意什麼?...

第三章 物件導向程式設計

一 go語言物件導向的特點 不支援繼承 虛函式 建構函式 析構函式 隱藏的this指標 整個型別系統通過介面串聯 非侵入式介面 二 型別系統 含義 指乙個語言的型別體系結構,包含以下基本內容 基礎型別,如 byte,int,float32等 復合型別,如 陣列,結構體,指標等 可以指向任意物件的an...

高階程式設計 python 第三章作業

3 2 問候語 繼續使用練習3 1中的列表,但不列印每個朋友的姓名,而為每人列印一條訊息。每條訊息都包含相同的問候語,但抬頭為相應朋友的姓名。源 names baker jesse jimmy print hi names 0 print hi names 1 print hi names 2 輸出...