首頁 > 後端開發 > C++ > 為什麼無法在 C# 中引用另一個非靜態欄位來初始化非靜態欄位?

為什麼無法在 C# 中引用另一個非靜態欄位來初始化非靜態欄位?

Susan Sarandon
發布: 2024-12-31 13:08:10
原創
341 人瀏覽過

Why Can't I Initialize a Non-Static Field with a Reference to Another Non-Static Field in C#?

字段初始化歧義:服務類中的非靜態字段引用

在軟體開發中,我們經常需要初始化類別中的實例字段利用它們的功能。但是,嘗試使用對另一個類別中的非靜態欄位、方法或屬性的參考來初始化實例欄位將導致錯誤「欄位初始值設定項無法引用非靜態欄位、方法或屬性。」

考慮以下範例,其中我們有一個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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板