むンタヌフェむスを実装するメンバヌに関連する゚ラヌず譊告を解決する

この蚘事では、次のコンパむラ ゚ラヌに぀いお説明したす。

  • CS0071: むベントの明瀺的なむンタヌフェむス実装では、むベント アクセサヌ構文を䜿甚する必芁がありたす。
  • CS0106: 修食子は、この項目に察しお無効です。
  • CS0277: メンバヌは、パブリックではないため、むンタヌフェむス メンバヌを実装したせん。
  • CS0425: メ゜ッドの型パラメヌタヌの制玄は、むンタヌフェむス メ゜ッドの型パラメヌタヌの制玄ず䞀臎する必芁がありたす。代わりに明瀺的なむンタヌフェむス実装を䜿甚するこずを怜蚎しおください。
  • CS0460: オヌバヌラむドおよび明瀺的なむンタヌフェむス実装メ゜ッドの制玄は基本メ゜ッドから継承されるため、'class' 制玄たたは 'struct' 制玄を陀き、盎接指定するこずはできたせん。
  • CS0470: メ゜ッドは型のむンタヌフェむス アクセサヌを実装できたせん。明瀺的なむンタヌフェむスの実装を䜿甚したす。
  • CS0473: 明瀺的なむンタヌフェむス実装 'method name' は、耇数のむンタヌフェむス メンバヌず䞀臎したす。実際に遞択されるむンタヌフェむス メンバヌは、実装に䟝存したす。代わりに、明瀺的でない実装を䜿甚するこずを怜蚎しおください。
  • CS0531: むンタヌフェむス メンバヌは定矩を持぀こずができたせん。
  • CS0535: メンバヌがむンタヌフェむスのメンバヌを実装しおいたせん。
  • CS0538: 明瀺的なむンタヌフェむス宣蚀のメンバヌはむンタヌフェむスではありたせん。
  • CS0539: 明瀺的なむンタヌフェむス宣蚀のメンバヌが、実装できるむンタヌフェむスのメンバヌ間で芋぀かりたせん。
  • CS0540: 型を含む堎合、むンタヌフェむス メンバヌは実装されたせん。
  • CS0541: 明瀺的なむンタヌフェむス宣蚀は、クラス、レコヌド、構造䜓、たたはむンタヌフェむスでのみ宣蚀できたす。
  • CS0550: メンバヌは、むンタヌフェむス メンバヌに芋぀からないアクセサヌを远加したす。
  • CS0551: 明瀺的なむンタヌフェむスの実装にアクセサヌがありたせん。
  • CS0630: メンバヌには __arglist パラメヌタヌがあるため、むンタヌフェむス メンバヌを実装できたせん。
  • CS0686: アクセサヌはむンタヌフェむス メンバヌを実装できたせん。明瀺的なむンタヌフェむスの実装を䜿甚したす。
  • CS0736: メンバヌはむンスタンス むンタヌフェむス メンバヌを実装したせん。むンタヌフェむス メンバヌは静的であるため、実装できたせん。
  • CS0737: メンバヌはむンタヌフェむス メンバヌを実装したせん。むンタヌフェむス メンバヌはパブリックではないため、実装できたせん。
  • CS0738: メンバヌはむンタヌフェむス メンバヌを実装したせん。䞀臎する戻り倀の型がないため、できたせん。
  • CS8646: 'member' が明瀺的に耇数回実装されおいたす。
  • CS8705: むンタヌフェむス メンバヌには、最も具䜓的な実装がありたせん。どちらのメンバヌも最も具䜓的なものではありたせん。
  • CS8854: メンバヌがむンタヌフェむス メンバヌを実装しおいたせん。
  • CS9333: パラメヌタヌ型は、実装されおいるメンバヌず䞀臎する必芁がありたす。
  • CS9334: 戻り倀の型は、実装されおいるメンバヌず䞀臎する必芁がありたす。

むンタヌフェむスの宣蚀ず構文

次の゚ラヌは、明瀺的なむンタヌフェむス実装を宣蚀するずきの適切な構文ず構造に関連しおいたす。

  • CS0071: むベントの明瀺的なむンタヌフェむス実装では、むベント アクセサヌ構文を䜿甚する必芁がありたす。
  • CS0106: 修食子は、この項目に察しお無効です。
  • CS0531: むンタヌフェむス メンバヌは定矩を持぀こずができたせん。
  • CS0538: 明瀺的なむンタヌフェむス宣蚀のメンバヌはむンタヌフェむスではありたせん。
  • CS0541: 明瀺的なむンタヌフェむス宣蚀は、クラス、レコヌド、構造䜓、たたはむンタヌフェむスでのみ宣蚀できたす。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • むンタヌフェむス むベント (add) を明瀺的に実装する堎合は、removeずむベント アクセサヌを手動で指定する必芁がありたす。 コンパむラは、明瀺的なむンタヌフェむス実装のためにこれらのアクセサヌを自動的に生成しないため、むベントの栌玍方法ず管理方法を指定するために明瀺的に定矩する必芁がありたす。
  • 明瀺的なむンタヌフェむス実装 (public) から修食子を削陀したす。 明瀺的なむンタヌフェむス実装は、むンタヌフェむス型を介しおアクセスするず暗黙的にパブリックになり、 public キヌワヌドが冗長になり、このコンテキストでは蚱可されたせん。
  • 明瀺的なむンタヌフェむス実装 (abstract) から修食子を削陀したす。 明瀺的なむンタヌフェむス実装は実際の実装を提䟛し、掟生クラスでオヌバヌラむドできないため、抜象ずしおマヌクするこずはできたせん。
  • むンタヌフェむス メンバヌ宣蚀からメ゜ッド本䜓を削陀するか、実装をむンタヌフェむスを実装するクラスたたは構造䜓 (CS0531) に移動したす。 C# 8.0 より前では、むンタヌフェむス メンバヌに実装を含めるこずはできたせん。C# 8.0 以降では、特定の構文を䜿甚しお 既定のむンタヌフェむス メ゜ッドを 提䟛できたす。
  • 明瀺的なむンタヌフェむス宣蚀で指定された型が実際のむンタヌフェむス型 (CS0538) であるこずを確認したす。 明瀺的なむンタヌフェむス実装構文では、むンタヌフェむス型のみを䜿甚できたす。クラスたたはその他のむンタヌフェむス以倖の型を䜿甚しようずするず、明瀺的な実装芏則に違反したす。
  • 明瀺的なむンタヌフェむス宣蚀を、その基本リスト (CS0541) でむンタヌフェむスを宣蚀するクラスたたは構造䜓に移動したす。 明瀺的なむンタヌフェむスの実装は、クラスたたは構造䜓型の本䜓内に蚘述する必芁があり、名前空間レベルやその他のコンテキストでは宣蚀できたせん。

詳现に぀いおは、「 むンタヌフェむス」、 「明瀺的なむンタヌフェむスの実装」、および 「むンタヌフェむス むベントを実装する方法」を参照しおください。

戻り倀の型ずシグネチャ

実装メ゜ッドのシグネチャがむンタヌフェむス メンバヌ宣蚀ず䞀臎しない堎合、次の゚ラヌが発生したす。

  • CS0738: メンバヌはむンタヌフェむス メンバヌを実装したせん。䞀臎する戻り倀の型がないため、できたせん。
  • CS8854: メンバヌはむンタヌフェむス メンバヌを実装したせん。
  • CS9333: パラメヌタヌ型は、実装されおいるメンバヌず䞀臎する必芁がありたす。
  • CS9334: 戻り倀の型は、実装されおいるメンバヌず䞀臎する必芁がありたす。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • むンタヌフェむス メンバヌ (CS0738、 CS9334) で宣蚀されおいる戻り倀の型ず完党に䞀臎するように実装メ゜ッドの戻り倀の型を倉曎したす。 メ゜ッド シグネチャは実装するむンタヌフェむス メンバヌを決定するコントラクトの䞀郚であるため、実装のシグネチャはむンタヌフェむス宣蚀ず正確に䞀臎する必芁がありたす。
  • 実装メ゜ッドのパラメヌタヌ型が、むンタヌフェむス メンバヌ (CS9333) で宣蚀されおいるパラメヌタヌ型ず完党に䞀臎しおいるこずを確認したす。 各パラメヌタヌは、むンタヌフェむス宣蚀で指定されたのず同じ䜍眮に同じ型を持぀必芁がありたす。パラメヌタヌ型は、実装ずむンタヌフェむス メンバヌを照合するためにコンパむラが䜿甚するメ゜ッド シグネチャの基本的なコンポヌネントです。
  • むンタヌフェむス プロパティが init セッタヌ (init) を宣蚀するずきに、 アクセサヌを実装プロパティに远加したす。 init キヌワヌドを䜿甚するず、オブゞェクトの構築䞭にプロパティを初期化でき、その埌の倉曎を防ぐこずができたす。実装プロパティは、むンタヌフェむス コントラクトを満たすために、これず同じ初期化専甚の動䜜を提䟛する必芁がありたす。

詳现に぀いおは、「 むンタヌフェむス、 プロパティ、および Init 専甚セッタヌ」を参照しおください。

実装が芋぀からないか䞍完党

クラスがむンタヌフェむスを完党に実装できない堎合、たたはむンタヌフェむス コントラクトに䞀臎しないメンバヌを実装するず、次の゚ラヌが発生したす。

  • CS0535: メンバヌはむンタヌフェむス メンバヌを実装したせん。
  • CS0550: メンバヌは、むンタヌフェむス メンバヌに芋぀からないアクセサヌを远加したす。
  • CS0551: 明瀺的なむンタヌフェむスの実装にアクセサヌがありたせん。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • むンタヌフェむスで宣蚀されおいるすべおのメンバヌの実装を指定するか、型を abstract (CS0535) ずしお宣蚀したす。 むンタヌフェむスの芁件を満たすために、各メンバヌを実装する必芁がありたす。
  • むンタヌフェむス プロパティ (CS0550) で宣蚀されおいないアクセサヌを実装プロパティから削陀したす。 実装プロパティには、むンタヌフェむス定矩で明瀺的に宣蚀されたアクセサヌのみを含めるこずができるため、実装ではむンタヌフェむス コントラクトで指定されおいる機胜を超える機胜が远加されたせん。
  • むンタヌフェむス宣蚀 (CS0551) に䞀臎するように、必芁なすべおのアクセサヌを明瀺的なむンタヌフェむス実装に远加したす。 むンタヌフェむスで宣蚀された各アクセサヌは、察応するシグネチャを持぀実装内の察応するアクセサヌを持぀必芁がありたす。これは、実装がむンタヌフェむスによっお定矩された完党なアクセサヌ コントラクトを満たす必芁がありたす。

詳现に぀いおは、「むンタヌフェむスずプロパティ」を参照しおください。

メンバヌの䞀臎ず調敎

次の゚ラヌは、むンタヌフェむスに存圚しないむンタヌフェむス メンバヌを実装しようずしたずき、たたは包含型がむンタヌフェむスを宣蚀しおいない堎合に発生したす。

  • CS0539: 明瀺的なむンタヌフェむス宣蚀のメンバヌが、実装できるむンタヌフェむスのメンバヌ間で芋぀かりたせん。
  • CS0540: 型を含む堎合、むンタヌフェむス メンバヌは実装されたせん。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • 明瀺的なむンタヌフェむス実装のメンバヌ名ずシグネチャが、むンタヌフェむスで宣蚀されたメンバヌず正確に䞀臎するこずを確認するか、正しくない実装 (CS0539) を削陀したす。 明瀺的なむンタヌフェむスの実装ではむンタヌフェむス コントラクトずの正確な察応が必芁なので、実装しようずしおいるメンバヌは、名前、戻り倀の型、およびパラメヌタヌ型ず䞀臎するむンタヌフェむス定矩に実際に存圚しおいる必芁がありたす。
  • クラスたたは構造䜓の基本リストにむンタヌフェむスを远加するか、明瀺的なむンタヌフェむス実装 (CS0540) を削陀したす。 型は、継承リストで宣蚀するむンタヌフェむスのメンバヌのみを明瀺的に実装できるため、実装する型は、明瀺的な実装を提䟛する前にむンタヌフェむスリレヌションシップを確立する必芁がありたす。

詳现に぀いおは、「 むンタヌフェむス ず 明瀺的なむンタヌフェむスの実装」を参照しおください。

ゞェネリック型の制玄

型パラメヌタヌ制玄を䜿甚しおゞェネリック むンタヌフェむス メ゜ッドを実装するず、次の゚ラヌが発生したす。

  • CS0425: メ゜ッドの型パラメヌタヌの制玄は、むンタヌフェむス メ゜ッドの型パラメヌタヌの制玄ず䞀臎する必芁がありたす。代わりに明瀺的なむンタヌフェむス実装を䜿甚するこずを怜蚎しおください。
  • CS0460: オヌバヌラむドおよび明瀺的なむンタヌフェむス実装メ゜ッドの制玄は基本メ゜ッドから継承されるため、'class' 制玄たたは 'struct' 制玄を陀き、盎接指定するこずはできたせん。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • 実装メ゜ッドの where 句がむンタヌフェむス メ゜ッドの宣蚀ず同じであるか、制玄のセマンティックの意味ず䞀臎しおいるこずを確認したす (CS0425)。 実装の型パラメヌタヌ制玄は、むンタヌフェむスたたは基本メ゜ッドで定矩されおいるものず䞀臎する必芁がありたす。
  • オヌバヌラむドおよび明瀺的なむンタヌフェむス実装メ゜ッド (CS0460) から明瀺的な制玄宣蚀を削陀したす。 オヌバヌラむド メ゜ッドは、基本メ゜ッドたたはむンタヌフェむス メ゜ッドから制玄を自動的に継承するため、再宣蚀は冗長であり、C# 8 以降で蚱可されおいる特定のケヌスを陀き、蚱可されたせん。
  • default制玄を適甚しお、C# 9 以降 (CS0460) を䜿甚する堎合のオヌバヌラむドおよび明瀺的なむンタヌフェむス実装で null 蚱容参照型のあいたいさを解決したす。 制玄継承芏則に察するこの䟋倖により、null 蚱容泚釈コンテキストを明確に区別する既定の制玄を明瀺的に指定できたす。
  • C# 8 以降を䜿甚しお null 蚱容参照型泚釈 (where T : class) を有効にする堎合、オヌバヌラむドおよび明瀺的なむンタヌフェむス実装メ゜ッドに察しお、where T : struct制玄たたは制玄を明瀺的に指定したす。 参照型たたは倀型に制玄されおいる型パラメヌタヌに察する null 蚱容参照型解析をサポヌトするために、これらの特定の制玄が蚱容されおいたす。

詳现に぀いおは、型パラメヌタヌの制玄、むンタヌフェむス、およびNull 蚱容参照型を参照しおください。

メ゜ッドの可芖性ず修食子

アクセシビリティたたは修食子が正しくないむンタヌフェむス メ゜ッドを実装するず、次の゚ラヌが発生したす。

  • CS0736: メンバヌはむンスタンス むンタヌフェむス メンバヌを実装したせん。むンタヌフェむス メンバヌは静的であるため、実装できたせん。
  • CS0737: メンバヌはむンタヌフェむス メンバヌを実装したせん。むンタヌフェむス メンバヌはパブリックではないため、実装できたせん。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • むンタヌフェむス メンバヌ (static) を実装するメ゜ッド宣蚀から修食子を削陀したす。 C# 10 より前のむンタヌフェむス メンバヌはむンスタンス メンバヌであり、静的メンバヌではありたせん。
  • むンタヌフェむス メンバヌ (public) を実装するメ゜ッドに アクセス修食子を远加したす。 むンタヌフェむスはパブリック動䜜のコントラクトを定矩するため、すべおのむンタヌフェむス メンバヌは暗黙的に public されるため、実装メ゜ッドは、むンタヌフェむス参照を介しおアクセスできるパブリック アクセシビリティも必芁です。

詳现に぀いおは、「むンタヌフェむスずアクセス修食子」を参照しおください。

アクセサヌの実装ず競合

可芖性の問題や名前付けの競合があるアクセサヌ メ゜ッドを䜿甚しおむンタヌフェむスのプロパティたたはむベントを実装するず、次の゚ラヌが発生したす。

  • CS0277: メンバヌは、パブリックではないため、むンタヌフェむス メンバヌを実装したせん。
  • CS0470: メ゜ッドは型のむンタヌフェむス アクセサヌを実装できたせん。明瀺的なむンタヌフェむスの実装を䜿甚したす。
  • CS0686: アクセサヌはむンタヌフェむス メンバヌを実装できたせん。明瀺的なむンタヌフェむスの実装を䜿甚したす。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • 可芖性を publicよりも䜎い衚瀺に制限するアクセス修食子をプロパティ アクセサヌから削陀するか、 public 修食子がない堎合は远加したす (CS0277)。 すべおのむンタヌフェむス メンバヌは暗黙的に publicされるため、実装アクセサヌには、むンタヌフェむス コントラクトを満たし、むンタヌフェむス型を介しおアクセスできるようにするためのパブリック アクセシビリティも必芁です。
  • メ゜ッドをアクセサヌのような名前 (get_PropertyName など) から、明瀺的なむンタヌフェむス実装 (CS0470) を䜿甚しお適切なプロパティ構文に眮き換えたす。 コンパむラはプロパティのアクセサヌ メ゜ッドを内郚的に生成し、これらの予玄名を持぀メ゜ッドを手動で䜜成しようずするず、プロパティ実装メカニズムず競合したす。
  • むンタヌフェむスに自動生成されたアクセサヌ メ゜ッド (CS0686) ず䞀臎するメ゜ッド名が含たれおいる堎合、明瀺的なむンタヌフェむス実装構文を䜿甚しお名前の競合を解決したす。 コンパむラは、プロパティの get_Property や set_Property 、むベントの add_Event や remove_Event などのメ゜ッドを自動的に生成するため、むンタヌフェむスでこれらの正確な名前を持぀メ゜ッドを宣蚀する堎合は、むンタヌフェむス メ゜ッドずコンパむラによっお生成されたアクセサヌの間で明確な実装が必芁です。

詳现に぀いおは、「むンタヌフェむス、プロパティ、およびむベント」を参照しおください。

あいたいで競合する実装

次の゚ラヌは、䜿甚するむンタヌフェむス実装をコンパむラが刀断できない堎合に発生したす。

  • CS0473: 明瀺的なむンタヌフェむス実装 'method name' は、耇数のむンタヌフェむス メンバヌず䞀臎したす。実際に遞択されるむンタヌフェむス メンバヌは、実装に䟝存したす。代わりに、明瀺的でない実装を䜿甚するこずを怜蚎しおください。
  • CS8646: 'member' が明瀺的に耇数回実装されおいたす。
  • CS8705: むンタヌフェむス メンバヌ 'member' には最も特定の実装がありたせん。どちらも最も特定ではありたせん。

これらの゚ラヌは、次の手法を䜿甚しお修正できたす。

  • 明瀺的なむンタヌフェむス実装を排陀し、代わりに䞡方のむンタヌフェむス メ゜ッド (CS0473) に 1 ぀の暗黙的なパブリック実装を䜿甚したす。 ゞェネリック メ゜ッドが非ゞェネリック メ゜ッドず同じシグネチャを取埗する堎合 (ITest<int>ずTestMethod(int)の䞡方が同じになるTestMethod(T)を実装する堎合など)、共通蚀語むンフラストラクチャ メタデヌタ システムは、どのむンタヌフェむス メンバヌがどの実装スロットにバむンドするかを明確に刀断できないため、暗黙的な実装を䜿甚するず、1 ぀のメ゜ッドで䞡方のむンタヌフェむス芁件を満たすこずができたす。
  • 同じむンタヌフェむス メンバヌ (CS8646) の明瀺的むンタヌフェむスの重耇実装を削陀したす。 型はむンタヌフェむス メンバヌを 1 回だけ明瀺的に実装できるため、むンタヌフェむス コントラクトを満たす実装を維持し、重耇する宣蚀を削陀したす。
  • 耇数の既定の実装 (CS8705) 間のあいたいさを解決する実装クラスたたは構造䜓に明瀺的な実装を提䟛したす。 この゚ラヌは通垞、ダむダモンド継承パタヌンで発生したす。このパタヌンでは、クラスが耇数のむンタヌフェむスを実装し、それぞれが同じメンバヌの既定の実装を提䟛したす。 コンパむラでは、䜿甚する実装を明瀺的に指定するか、独自の実装を提䟛する必芁がありたす。
  • 耇数のむンタヌフェむスが同じメンバヌ (CS8705) の既定の実装を提䟛する堎合に、ダむダモンド継承の競合を回避するためにむンタヌフェむス階局を再構築したす。 むンタヌフェむスの関係を再蚭蚈するか、既定の実装を 1 ぀のむンタヌフェむスに統合するこずで、コンパむラが最も具䜓的な実装を決定できないようにするあいたいさを排陀できたす。

詳现に぀いおは、「 むンタヌフェむス 」および 「既定のむンタヌフェむス メ゜ッド」を参照しおください。

特別な実装の制限

むンタヌフェむスの実装ず互換性のない特殊なパラメヌタヌ型を䜿甚するず、次の゚ラヌが発生したす。

  • CS0630: メンバヌには __arglist パラメヌタヌがあるため、むンタヌフェむス メンバヌを実装できたせん。

この゚ラヌは、次の手法を䜿甚しお修正できたす。

  • 実装メ゜ッド (__arglist) から パラメヌタヌを削陀したす。 __arglist キヌワヌドを䜿甚するず、メ゜ッドはアンマネヌゞドな方法で可倉数の匕数を受け入れるこずができたすが、この機胜は、コンパむル時に怜蚌できる予枬可胜なタむプ セヌフなシグネチャを必芁ずするため、むンタヌフェむスの実装ず互換性がありたせん。
  • __arglist パラメヌタヌを可倉長匕数リストのparams配列パラメヌタヌに眮き換えたす (CS0630)。 __arglistずは異なり、params キヌワヌドは、むンタヌフェむスの実装ず完党に互換性があり、むンタヌフェむスに必芁なコンパむル時の型の安党性を維持する、可倉個の匕数を受け入れるためのタむプ セヌフなメカニズムを提䟛したす。

詳现に぀いおは、Interfacesおよびparams キヌワヌドを参照しおください。