CLR C 的一些語言特性

2021-09-05 16:11:10 字數 1845 閱讀 8845

1. new和override區別

override在子類中重寫基類的方法;new在子類中為基類同名(virtual)方法新增乙個新的版本,會保留基類的同名(virtual)方法。

如果基類的同名方法不給出new和override修飾符,.net預設採用new的方式,編譯時將產生一條警告資訊。

關於過載:一般有按名稱隱藏和按簽名隱藏兩種策略,c#預設按簽名隱藏,即預設使用hidebysig特性。

2. 建構函式

a) static建構函式.cctor,對型別初始化。在類裡面宣告的靜態變數將由c#編譯器自動編譯到.cctor中,如果有顯示的宣告靜態構造器,也是編譯到.cctor(在.cctor中區域性靜態變數將位於顯示宣告的靜態構造器前面)。

clr有兩種策略決定.cctor的執行時間,第一種是首次使用型別時,第二種是首次使用型別的靜態成員時通過給型別新增beforefieldinit 元資料特性)。c#編譯器對沒有顯示宣告靜態構造器的型別預設設定beforefieldinit特性,對存在顯示靜態構造器的型別不會設定。

b) 類的建構函式.ctor。要注意的一點是clr分配物件時將呼叫深度派生(most-derived)型別的建構函式方法,在派生型別建構函式的最開始位置呼叫基類構造方法,不管在派生型別本身還是基類的建構函式中,物件的實際型別都是派生型別。在這樣的機制下,有些問題需要謹慎處理,例如如果基類在建構函式中呼叫被override過的virtual方法,而這時派生類的建構函式並沒有執行。

3. abstract, virtual

abstract的類不能例項化,只能用於子類繼承。

abstract的方法隱式的就是乙個virtual方法;abstract的方法子類必須實現;abstract方法只能有宣告,不能包含實現。

virtual方法提供給子類override;可以包含實現。

4. as和強制型別轉換

強制型別轉換:myclass myclass=(myclass)obj; 使用as:myclass myclass=obj as myclass;

區別在於,如果obj不能被轉換成myclass型別,強制型別轉換會丟擲異常,而使用as時不會有異常,只是轉換結果(myclass變數)的值為null。

強制型別轉換使用castclass操作碼(opcode)實現,as轉換、is判斷使用isinst操作碼實現。這兩個操作碼都使用型別的元資料資訊,將物件轉換成給定型別放在當前計算堆疊上,只不過無法轉換時乙個拋異常,另乙個將null放在堆疊中。

關於型別轉換:每個物件通過header中的型別控制代碼引用型別元資料,在型別元資料中有乙個inte***ce table,指示型別實現了哪些介面(每個項都包含指向介面元資料的型別指標),乙個基類型別元資料指標,在介面、繼承體系之間的型別相容性測試主要基於這些資訊進行。型別轉換另外需要考慮的,是型別是否有過載隱式、顯示型別轉換操作等。

5. 修飾符

private,只能在同乙個類中呼叫。

protected,可在派生類中呼叫,無論派生型別是否在同乙個assembly中。

internal,只能在同乙個assembly中呼叫。

protected internal,可以在任何assembly的派生型別中呼叫,也可由同乙個assembly中的任何型別呼叫。

6. readonly / const區別

const在編譯之後將常量編譯到指令流中,只在元資料保留有常量名和值的資訊。readonly的變數只能在宣告時提供初始化值,或者在建構函式中初始化,之後變數的值不再允許修改。

7. ref和out區別

都是表示引用方式傳遞引數,out明確要求呼叫者進行初始化,ref對呼叫方和被呼叫方都沒有明確的職責要求。因此對於out型的引數,如果在呼叫之前沒有初始化賦值,會產生乙個編譯器錯誤。

python 的一些特性

class student object say this is a student class def init self,name,age 構造器 self.name name self.age age classmethod 類方法 def showclassmethod cls print ...

https的一些特性

支援客戶 伺服器模式 簡單快速 客戶向服務端請求服務時,只需傳送請求方式和路徑。靈活 允許傳輸任意型別的資料物件。由content type加以標記。無連線 每次響應乙個請求,響應完成以後就斷開連線。無狀態 伺服器不儲存瀏覽器的任何資訊。每次提交的請求之間沒有關聯。持續性瀏覽器和伺服器建立tcp連線...

CSS的一些特性

text indent 20px 2em 2rem em 相對于父元素字型大小的參考單位 text indent 999 隱藏文字的另外做法層疊性,繼承性 inherit 優先順序 繼承性 text line height,font color color 1.屌絲程式設計師表示法 red,blue...