首頁 >後端開發 >C++ >為什麼不能使用另一個非靜態字段初始化類別字段?

為什麼不能使用另一個非靜態字段初始化類別字段?

Linda Hamilton
Linda Hamilton原創
2025-01-01 10:48:10374瀏覽

Why Can't I Initialize a Class Field Using Another Non-Static Field?

了解類別實例中的欄位初始化器

設計類別時,使用適當的值初始化欄位(尤其是非靜態欄位)至關重要。當您嘗試透過直接存取非靜態類別成員來初始化類別中的實例變數時,會出現此錯誤訊息「欄位初始值設定項目無法引用非靜態欄位、方法或屬性」。

根據您的特定情況,Service 類別包含一個使用dinnerrepository 類別的實例初始化的欄位以及檢索到的dinner 物件的後續分配。但是,這種方法會導致上述錯誤。

欄位初始化的替代解決方案

欄位初始化的一種替代方法是使用實​​例建構函式來設定實例值。透過在Service 類別中宣告一個建構函式並初始化其中的DiningRepository 和Dining 字段,您可以只在建立Service 實例時初始化這些欄位:

public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}

在這種情況下,這些欄位是在對象期間初始化的實例化,確保服務實例在應用程式中使用之前已完全設定。

另一個選項是延遲初始化方法和屬性中的欄位。您可以建立在需要時檢索值的方法或屬性,而不是初始化建構函式中的欄位。這種方法可以更好地控制何時以及如何填充資料。

透過遵循這些準則,您可以有效地初始化類別實例中的非靜態字段,避免出現錯誤「字段初始值設定項無法引用非靜態字段」。 -靜態欄位、方法或屬性。 ”

以上是為什麼不能使用另一個非靜態字段初始化類別字段?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn