Код: Выделить всё
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.
}
Обновление
Основываясь на полученных мной ответах на использование явной реализации интерфейса, я хочу отметить, что, хотя это и решает проблему, она не решает ее. решить это идеальным для меня способом потому что большую часть времени я использую свой объект AllYourBase как IAllYourBase, а не как IBase1 или IBase2. В основном это связано с тем, что у IAllYourBase также есть методы интерфейса (я не смог подробно описать их в приведенном выше фрагменте кода, поскольку считал их неуместными), которые реализованы AllYourBase, и я тоже хочу получить к ним доступ. Постоянное приведение туда и обратно будет очень утомительным и приведет к беспорядочному коду.
Я попробовал одно решение, которое включало определение свойства Percentage в IAllYourBase< /code> и не использовать явную реализацию интерфейса, что, по-видимому, избавило по крайней мере от ошибки компилятора:
Код: Выделить всё
class IAllYourBase : IBase1, IBase2
{
int Percentage { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/708 ... -ambiguity
Мобильная версия