一、前言

其實(shí)說到ref,很多同學(xué)對(duì)它已經(jīng)有所了解,ref是C# 7.0的一個(gè)語(yǔ)言特性,它為開發(fā)人員提供了返回本地變量引用和值引用的機(jī)制。
Span也是建立在ref語(yǔ)法基礎(chǔ)上的一個(gè)復(fù)雜的數(shù)據(jù)類型,在文章的后半部分,我會(huì)有一個(gè)例子說明如何使用它。

回到目錄

二、ref關(guān)鍵字

不論是ref還是out關(guān)鍵,都是一種比較難以理解和操作的語(yǔ)言特性,如C語(yǔ)言中操作指針一樣,這樣的高級(jí)語(yǔ)法總是什么帶來(lái)一些副作用,但是我不認(rèn)為這有什么,而且不是每一個(gè)C#開發(fā)者都要對(duì)這些內(nèi)部運(yùn)行的機(jī)制有著深刻的理解,我覺得不論什么復(fù)雜的東西只是為人們提供了一個(gè)自由的選擇,風(fēng)險(xiǎn)和靈活性永遠(yuǎn)是不能兼容的。

來(lái)看幾個(gè)例子來(lái)說明引用與指針的相同性,當(dāng)然下面的使用方式早在C# 7.0之前就可以使用了:

public static void IncrementByRef(ref int x){
    x++;
}public unsafe static void IncrementByPointer(int* x){
   (*x)++;
}

上面兩個(gè)函數(shù)分別是使用ref和非安全指針來(lái)完成參數(shù)+1。

int i = 30;
IncrementByRef(ref i);// i = 31unsafe{
   IncrementByPointer(&i);
}// i = 32

下面是C# 7.0提供的特性:

1.ref locals (引用本地變量)

int i = 
        
		

網(wǎng)友評(píng)論