欄位初始值設定項無法引用非靜態成員:詳細說明
嘗試使用欄位初始值設定項初始化類別的欄位時,遵守某些限制很重要。如問題所指出的,在欄位初始值設定項中引用非靜態成員會導致錯誤。
提供的程式碼說明了 Service 類別中的此問題:
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
發生錯誤是因為欄位不允許初始值設定項引用類別的非靜態成員。這包括實例變數、方法和屬性。
替代解決方案:
答案中提出的替代方案包括:
使用建構函式初始化:
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
使用本地變數:
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
但是,需要注意的是後一種方法僅創建局部變數而不是實例
字段初始值設定項的限制:
根據C# 4 規格(第 10.5.5.2 節),欄位初始值設定項無法引用正在建立的實例。因此,禁止在欄位初始值設定項目中透過簡單名稱直接引用實例成員。
總結:
為了避免「欄位初始值設定項無法引用非靜態欄位」 、方法或屬性」錯誤,因此有必要了解欄位初始值設定項的限制並採用適當的替代方法,例如建構函式初始化或使用局部變數。
以上是為什麼我無法在 C# 欄位初始值設定項中引用非靜態成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!