共用方式為


ref struct 型別相關聯的錯誤和警告

  • CS8343ref structs 無法實作介面
  • CS8344foreach 陳述式無法在非同步的列舉程式或迭代器方法上運作,因為型別是 ref struct 或是允許 ref struct 的型別參數。
  • CS8345欄位或自動實作屬性不可為型別,除非它是 ref struct 的執行個體成員。
  • CS9048scoped 修飾元只能用於 refs 和 ref struct 值。
  • CS9050A ref 欄位無法參考 ref struct
  • CS9059ref 欄位只能在 ref struct 中宣告。
  • CS9241已指定 'ref struct'。
  • CS9242'allows' 條件約束子句必須是最後一個指定的條件約束。
  • CS9243無法允許其他條件約束已知型別參數的 ref struct 成為類別。
  • CS9244型別可能不是 ref struct 或允許 ref struct 的型別參數,以便在泛型型別或方法中使用它作為參數。
  • CS9245型別無法實作 ref struct 型別的介面成員。
  • CS9246在允許 ref struct 的型別參數上無法存取非虛擬執行個體介面成員。
  • CS9247foreach 陳述式無法在型別的列舉程式上運作,因為它是允許 ref struct 的型別參數,而且在編譯時不確定要實作 IDisposable
  • CS9267反覆運算器的元素類型可能不是 ref 結構或允許 ref 結構的類型參數

ref 安全違規

  • CS8345欄位或自動實作屬性不可為型別,除非它是 ref struct 的執行個體成員。
  • CS9048scoped 修飾元只能用於 refs 和 ref struct 值。
  • CS9050ref 欄位無法參考 ref struct
  • CS9059ref 欄位只能在 ref struct 中宣告。

ref struct 型別可以包含 ref 欄位。 其他型別不是允許的 ref 欄位。 編譯器會對宣告強制執行限制並使用 ref struct 型別,以在任何 ref struct 型別的執行個體上強制執行 ref 安全規則:

  • 只有 ref struct 類型可以包含自動實作 ref 的屬性。
  • 只有 ref struct 型別或 ref 變數才能有 scoped 修飾元。
  • ref 欄位只能在 ref struct 型別中宣告。
  • ref 欄位無法參考 ref struct 型別/

違反上述任何規則會產生其中一個列出的錯誤。 如果您打算使用該語言功能,請將型別轉換成 ref struct。 否則,移除不允許的建構。

ref struct 介面實作

  • CS8343:ref structs 無法實作介面
  • CS8344foreach 陳述式無法在非同步的列舉程式或迭代器方法上運作,因為型別是 ref struct 或是允許 ref struct 的型別參數。
  • CS9241已指定 'ref struct'。
  • CS9242'allows' 條件約束子句必須是最後一個指定的條件約束。
  • CS9243無法允許其他條件約束已知型別參數的 ref struct 成為類別。
  • CS9244型別可能不是 ref struct 或允許 ref struct 的型別參數,以便在泛型型別或方法中使用它作為參數。
  • CS9245型別無法實作 ref struct 型別的介面成員。
  • CS9246在允許 ref struct 的型別參數上無法存取非虛擬執行個體介面成員。
  • CS9247foreach 陳述式無法在型別的列舉程式上運作,因為它是允許 ref struct 的型別參數,而且在編譯時不確定要實作 IDisposable
  • CS9267反覆運算器的元素類型可能不是 ref 結構或允許 ref 結構的類型參數

在 C# 13 之前,ref struct 型別無法實作介面;編譯器會產生 CS8343。 從 C# 13 開始,ref struct 型別可以實作介面,受限於下列規則:

  • ref struct 無法轉換成它所實作之介面的執行個體。 參數若為介面型別,當您使用 ref struct 型別作為引數時,此限制會包括隱含轉換。 轉換會導致 Boxing 轉換,這違反了 ref 安全。
  • 實作介面的 ref struct 必須實作所有介面成員。 ref struct 必須實作介面包含預設實作的成員。

從 C# 13 開始,唯有泛型型別參數具有 allows ref struct 反條件約束,ref struct 才能作為泛型型別參數的型別引數。 當您使用 allows ref struct 反條件約束時,必須遵循下列規則:

  • ref struct 作為型別引數使用,型別參數「必須」具有 allows ref struct 反條件約束。- allows ref struct 反條件約束必須是該參數的最後一個 where 子句
  • 使用型別參數必須遵循 ref 安全規則的執行個體。
  • ref struct或可以是ref struct型別的型別自變數不能當做反覆運算器方法元素類型使用。