次の例を考えてみましょう。
interface IBase1
{
int Percentage { get; set; }
}
interface IBase2
{
int Percentage { get; set; }
}
interface IAllYourBase : IBase1, IBase2
{
}
class AllYourBase : IAllYourBase
{
int percentage;
int Percentage {
get { return percentage; }
set { percentage = value; }
}
}
void Foo()
{
IAllYourBase iayb = new AllYourBase();
int percentage = iayb.Percentage; // Fails to compile. Ambiguity between 'Percentage' property.
}
Percentage
上記の例では、呼び出すプロパティの間にあいまいさがあります。IBase1
およびIBase2
インターフェースが変更されない可能性があると仮定すると、このあいまいさを最もクリーンで最も好ましい方法で解決するにはどうすればよいでしょうか。
アップデート
明示的なインターフェイス実装を使用して得た応答に基づいて、これは問題を解決しますが、AllYourBase
オブジェクトをIAllYourBase
ほとんどの場合、決してIBase1
またはIBase2
。これは主IAllYourBase
に、によって実装されているインターフェイスメソッド(関連性がないと思ったため、上記のコードスニペットで詳細を説明できなかった)があり、AllYourBase
それらにもアクセスしたいためです。常に前後にキャストすると、非常に面倒になり、コードが乱雑になります。
Percentage
私は、明示的なインターフェイス実装を使用せずにプロパティを定義することを含む1つの解決策を試しましIAllYourBase
た。これにより、少なくともコンパイラエラーが解消されたようです。
class IAllYourBase : IBase1, IBase2
{
int Percentage { get; set; }
}
これは有効な解決策ですか?