В следующем коде:
interface IGet { int Value { get; } }
interface ISet { int Value { set; } }
interface IBoth : IGet, ISet { }
class Test
{
public void Bla(IBoth a)
{
var x = a.Value; // Error: Ambiguity between 'IGet.Value' and 'ISet.Value'
}
}
Я получаю сообщение об ошибке:
Неоднозначность между "IGet.Value" и "ISet.Value"
Почему компилятор не может определить, что доступ к ресурсу должен быть от IGet
?
Изменить. Я предполагаю, что компилятор сначала попытается определить, к какому ресурсу обращаются, и только затем проверяет, является ли он get или set. Вопрос в том, почему? Почему бы не исключить тех кандидатов, которые не предоставляют геттера? Почему бы не решить фактические методы get/set и игнорировать факт, что это свойство?
Обновить: Еще один код с использованием методов вместо свойств, где проблема не существует. Свойства не совсем похожи на пару методов.