二十六 使用String型別 一

2022-01-30 20:51:12 字數 1429 閱讀 7039

string型別是乙個引用型別,直接派生自object,因此string物件總是存在於堆上,而不是執行緒堆疊上。

許多程式語言(包括c#)都將string視為乙個基元型別,也就是說編譯器允許在源**中直接表示直接量字串,編譯器將這些直接量字串放到模組的元資料中,並在執行時載入並引用它們。

在c#中不能通過new關鍵字操作符在乙個直接量字串的基礎上構造乙個string物件:

using

system;

public

sealed

class

program

}必須使用以下簡化的寫法:

using

system;

public

sealed

class

program

}編譯上面**,檢視其il**

如下:.method 

public

hidebysig 

static

void

main() cil managed //

end of method program::main

il指令newobj用於構造乙個物件的新例項,然而在上面的il**中並沒有發現newobj指令,只有乙個特殊的il指令ldstr(load string),它使用從元資料獲取的乙個直接量字串來構造乙個string物件。

如果使用不安全**,那麼可以在乙個char*或者sbyte*的基礎上構造乙個string物件,因此,可以使用new的操作符,並呼叫string提供的、能接受char*或sbyte*引數的某個構造器,這些構造器將建立乙個string物件,根據乙個由char例項或者signed位元組構成的陣列來初始化字串。

可以使用c#的+操作符將幾個字串連線成乙個,如下:

//三個直接量字串連線成乙個直接量字串

string

s = 

"hellow"

+ " "

+ "world"

;上面**中,由於所有字串都是直接量,所以c#

編譯器會在編譯時連線它們,最統終會將乙個字串(hellow word)放到模組的元資料中。如果對非直接量字串使用+操作符,那麼連線會在執行時進行,它會在垃圾收集堆上建立多個字串物件,此種情況應該使用stringbuilder型別。

c#提供了@字元來宣告字串方法,採用這種方法叫做「逐字字串」,引號之間的所有字元都會被字串的一部分,通常用於表示檔案目錄或者正規表示式,如下,寫法不一樣,但是它們在程式集的元資料中生成完全一致的字串:

//   \當作轉義字元

string

s = 

"c:\\windows\\system32\\notepad.exe"

;//  \當作字串的一部分

string

s = 

@"c:\windows\system32\notepad.exe"; 

二十六 遮蔽中斷

1.6410和210採用向量中斷,由硬體執行。有兩組中斷源,相應的控制暫存器也有多個 2.6410和210使能和遮蔽是分開的暫存器 3.遮蔽控制暫存器的讀寫操作從而遮蔽中斷,都是寫入全1 4.6410的 遮蔽中斷,要操作兩個暫存器,目的是將使能中斷暫存器的相關位清除 define vic0inten...

二十六 裝飾器

裝飾器 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強 no...

每日程式設計(二十六)

如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1,1,5 1,5,1 分析 很明顯從後想前遍歷,直到找到乙個前面的數比後面的小,然後在...