C# 7.0 添加和增強的功能【基礎篇】( 四 )

 關鍵字以聲明 ref 局部變量 。
public ref Person GetContactInformation(string fname, string lname)// 對 p 進行的操作不會改變原方法的返回值Person p = contacts.GetContactInformation("Brandie", "Best");上面的分配將 p 聲明為本地變量 。它的初始值是通過讀取 GetContactInformation 返回的值進行復制 。之后對 p 的任何分配都不會更改 GetContactInformation 返回的變量值 。變量 p 不再是返回的變量的別名 。
聲明引用本地變量,復制原始值的別名 。在下面的分配中,p 是從 GetContactInformation 返回的變量的別名 。
// 對 p 所做的更改,也會更改從 GetContactInformation 返回的變量ref Person p = ref contacts.GetContactInformation("Brandie", "Best");后續使用 p 等同于使用 GetContactInformation 返回的變量 , 因為 p 是此變量的別名 。
可通過相同方式按引用訪問值 。在某些情況下,按引用訪問值可避免潛在的高開銷復制操作,從而提高性能 。
編譯器對ref變量強制實施范圍規則:ref類型中的ref struct局部變量、ref參數和ref字段 。這些規則可確保引用不會與引用的對象不相稱 。
九、引用返回返回值可以通過引用返回 (ref 返回)。借助引用返回值 , 方法可以將對變量的引用(而不是值)返回給調用方 。然后,調用方可以選擇將返回的變量視為按值返回或按引用返回 。
如果聲明方法返回引用返回值,表明方法返回變量別名 。這樣做通常是為了讓調用代碼有權通過別名訪問此變量(包括修改它) 。因此,方法的引用返回值不得包含返回類型 void 。
引用返回值是指,方法返回對某變量的引用(或別名) 。
返回引用返回值的方法必須滿足以下兩個條件:
??1)方法簽名在返回類型前面有ref關鍵字;
??2)方法主體中的每個 return 語句都在返回實例的名稱前面有 ref 關鍵字 。
public ref Person GetContactInformation(string fname, string lname){return ref p;}十、棄元棄元是一種在應用程序代碼中人為取消使用的臨時虛擬變量 。棄元相當于未賦值的變量;它們沒有值 。
棄元將意圖傳達給編譯器和其他讀取代碼的文件:你打算忽略表達式的結果、元組表達式的一個或多個成員、方法的 out 參數或模式匹配表達式的目標 。
棄元使代碼意圖更加明確 。棄元指示代碼永遠不會使用變量 。它們可以增強其可讀性和可維護性 。
通過將下劃線 (_) 賦給一個變量作為其變量名,指示該變量為一個占位符變量 。
// 以下方法調用返回一個元組,其中第一個值和第二個值為棄元 。// area 是以前聲明的變量 , 設置為由 GetCityInformation 返回的第三個組件(_, _, area) = city.GetCityInformation(cityName);當 _ 是有效棄元時,嘗試檢索其值或在賦值操作中使用它時會生成編譯器錯誤 CS0301:“當前上下文中不存在名稱 "_"” 。出現此錯誤是因為 _ 未賦值 , 甚至可能未分配存儲位置 。如果它是一個實際變量,則不能像之前的示例那樣對多個值使用棄元 。
獨立棄元用來指示要忽略的任何變量 。
一種典型的用法是使用賦值來確保一個參數不為 null 。下面的代碼使用棄元來強制賦值 。賦值的右側使用 Null 合并操作符 , 用于在參數為 null 時引發 System.ArgumentNullException 。此代碼不需要賦值結果 , 因此將對其使用棄元 。
// 使用棄元來強制賦值// 賦值的右側使用 Null 合并操作符,用于在參數為 null 時引發 System.ArgumentNullException// 此代碼不需要賦值結果,因此將對其使用棄元public static void Method(string arg){_ = arg ?? throw new ArgumentNullException(paramName: nameof(arg), message: "arg can't be null");}十一、二進制文本固定值稱為文字 。文字是變量使用的值 。
在 C# 7.0 之前,有六種類型的文字可用 , 它們是一個

推薦閱讀