字段初始化歧義:服務類中的非靜態字段引用
在軟體開發中,我們經常需要初始化類別中的實例字段利用它們的功能。但是,嘗試使用對另一個類別中的非靜態欄位、方法或屬性的參考來初始化實例欄位將導致錯誤「欄位初始值設定項無法引用非靜態欄位、方法或屬性。」
考慮以下範例,其中我們有一個DiningRepository 類別和一個Service 類別:
public class DinnerRepository { DinnerDataContext db = new DinnerDataContext(); public Dinner GetDinner(int id) {...} } public class Service { DinnerRepository repo = new DinnerRepository(); Dinner dinner = repo.GetDinner(5); }
嘗試編譯此程式碼將引發上述錯誤。這是因為 Service 類別中晚餐的欄位初始值設定項目引用了非靜態的儲存庫實例。欄位初始值設定項的範圍有限,無法存取特定於實例的成員。
解決此問題的常見解決方案是將初始化推遲到執行建構函數之後。但是,這種方法創建的是局部變數而不是實例變數。
首選解決方案是在建構函數中初始化字段,允許隱式引用 this 實例。這種方法會建立具有所需行為的實例變數:
public class Service { private DinnerRepository repo; private Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
透過了解欄位初始值設定項目的限制,開發人員可以避免這種常見錯誤並有效管理程式碼中的實例變數。
以上是為什麼無法在 C# 中引用另一個非靜態欄位來初始化非靜態欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!