首頁 > 後端開發 > C++ > 為什麼我無法在 C# 欄位初始值設定項中引用非靜態成員?

為什麼我無法在 C# 欄位初始值設定項中引用非靜態成員?

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

Why Can't I Reference Non-Static Members in C# Field Initializers?

欄位初始值設定項無法引用非靜態成員:詳細說明

嘗試使用欄位初始值設定項初始化類別的欄位時,遵守某些限制很重要。如問題所指出的,在欄位初始值設定項中引用非靜態成員會導致錯誤。

提供的程式碼說明了 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中文網其他相關文章!

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