一、前言
其實(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 =