- 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