ref struct
型に関連するエラーと警告
- CS8343:
ref structs
ではインターフェイスを実装できません - CS8344:
foreach
ステートメントは、非同期または反復子メソッドの列挙子に対して機能できません。型がref struct
であるか、ref struct
を許可する型パラメーターであるためです。 - CS8345: フィールドまたは自動実装プロパティは、それが
ref struct
のインスタンス メンバーである場合を除いて、型にすることができません。 - CS9048:
scoped
修飾子は、参照およびref struct
の値に対してのみ使用できます。 - CS9050:
ref
フィールドはref struct
を参照できません。 - CS9059: ref フィールドは ref struct でのみ宣言できます。
- CS9241: "ref struct" は既に指定されています。
- CS9242: "allows" 制約句は最後に指定する制約でなければなりません。
- CS9243: 他の制約から認識されている型パラメーターの ref struct をクラスにすることはできません。
- CS9244: この型は、
ref struct
でも、ジェネリック型またはメソッドでパラメーターとして使用するために ref struct を許可する型パラメーターでもない可能性があります。 - CS9245: 型では、
ref struct
型に対してインターフェイス メンバーを実装できません。 - CS9246: ref struct を許可する型パラメーターでは、非仮想インスタンス インターフェイス メンバーにアクセスできません。
- CS9247: foreach ステートメントは型の列挙子に対して機能できません。それが ref struct を許可する型パラメーターであり、コンパイル時に
IDisposable
を実装することがわかっていないためです。 - CS9267: 反復子の Element 型は、ref 構造体または ref 構造体を許可する型パラメーターにすることはできません
参照の安全性の違反
- CS8345: フィールドまたは自動実装プロパティは、それが
ref struct
のインスタンス メンバーである場合を除いて、型にすることができません。 - CS9048:
scoped
修飾子は、参照およびref struct
の値に対してのみ使用できます。 - CS9050:
ref
フィールドはref struct
を参照できません。 - CS9059:
ref
フィールドはref struct
でのみ宣言できます。
ref struct
型には ref
フィールドを含めることができます。 他の型では ref
フィールドは許可されません。 コンパイラでは、ref struct
型のインスタンスに関する参照の安全性ルールを適用するために、ref struct
型の宣言と使用に関して制限を実施しています。
- 自動的に実装される
ref
プロパティを含めることができるのは、ref struct
型のみです。 ref struct
型またはref
変数のみにscoped
修飾子を含めることができます。ref
フィールドはref struct
型内でのみ宣言できます。ref
フィールドはref struct
型を参照できません。
これらのルールのいずれかに違反すると、一覧に示されているいずれかのエラーが発生します。 その言語機能を使用する場合は、型を ref struct
に変換します。 そうでない場合は、許可されていないコンストラクトを削除します。
ref struct インターフェイスの実装
- CS8343:
ref structs
ではインターフェイスを実装できません - CS8344:
foreach
ステートメントは、非同期または反復子メソッド内の列挙子に対して機能できません。型がref struct
であるか、ref struct
を許可する型パラメーターであるためです。 - CS9241: "ref struct" は既に指定されています。
- CS9242: "allows" 制約句は最後に指定する制約でなければなりません。
- CS9243: 他の制約から認識されている型パラメーターの ref struct をクラスにすることはできません。
- CS9244: この型は、
ref struct
でも、ジェネリック型またはメソッドでパラメーターとして使用するために ref struct を許可する型パラメーターでもない可能性があります。 - CS9245: 型では、
ref struct
型に対してインターフェイス メンバーを実装できません。 - CS9246: ref struct を許可する型パラメーターでは、非仮想インスタンス インターフェイス メンバーにアクセスできません。
- CS9247: foreach ステートメントは型の列挙子に対して機能できません。それが ref struct を許可する型パラメーターであり、コンパイル時に
IDisposable
を実装することがわかっていないためです。 - CS9267: 反復子の Element 型は、ref 構造体または ref 構造体を許可する型パラメーターにすることはできません
C# 13 より前には、ref struct
型ではインターフェイスを実装できませんでした。コンパイラで CS8343 が生成されます。 C# 13 以降、ref struct
型では、次のルールに従ってインターフェイスを実装できます。
ref struct
は、それが実装するインターフェイスのインスタンスに変換できません。 この制限事項には、パラメーターがインターフェイス型の場合にref struct
型を引数として使用する場合の暗黙的な変換が含まれます。 変換によってボックス化変換が行われるので、参照の安全性に違反します。- インターフェイスを実装する
ref struct
は、すべてのインターフェイス メンバーを実装する "必要があります"。ref struct
は、インターフェイスに既定の実装が含まれるメンバーを実装する必要があります。
C# 13 以降では、ジェネリック型パラメーターに allows ref struct
反制約がある場合に限り、ref struct
をジェネリック型パラメーターの型引数として使用できます。 allows ref struct
反制約を使用する場合は、次のルールに従う必要があります。
ref struct
は型引数として使用します。型パラメーターにはallows ref struct
反制約が "必要" です。allows ref struct
反制約は、そのパラメーターのwhere
句内で最後に指定する必要があります- 型パラメーターのインスタンスを使用する場合は、参照の安全性ルールに従う必要があります。
ref struct
またはref struct
型にできる型引数を、iterator メソッドの要素型として使用することはできません。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET