私はC#(仕事の経験で6ヶ月)にはかなり新しいですが、Javaとかなり似ているので、私は自宅にいるように感じます。なぜIComparerは、Compare(Object x、Object y)だけでなく、IComparer.Compare(Object x、Object y)を定義する必要がありますか?
はしかし、今日私はIComparerインターフェイスを実装しようと、それは私にエラーを与えていた理由を疑問に思った:
public class AlphabeticalReportSort : IComparer
{
int Compare(Object x, Object y)
{
return 0;
}
}
それはそれを実装する必要がありますように思えて:私はdidnの
public class AlphabeticalReportSort : IComparer
{
int IComparer.Compare(Object x, Object y)
{
return 0;
}
}
これを必要とするインターフェース宣言には何も気づかず、C#のように普通はこれをする必要はありません。
誰でも知っていますか?
いいえ、そうではありません。インターフェイスを実装するには、最初のバージョンのメソッドをpublicにするだけです。 –
もちろん、Jon Skeetは正しいです。これらのメソッドは、インタフェースから呼び出すことができるため、インタフェースが型としてアクセス可能な場所から実装する必要があるため、public *実装する必要があります。詳細については、[そのリンク](http://stackoverflow.com/questions/7238575/why-must-an-c-sharp-interface-method-implemented-in-a-class-be-public)を参照してください。 –