Разрешение реализации интерфейса C#C#

Место общения программистов C#
Anonymous
Разрешение реализации интерфейса C#

Сообщение Anonymous »

Меня смущает следующий сценарий на C#, касающийся разрешения реализации интерфейса. Следующий код компилируется без ошибок:

Код: Выделить всё

interface IA
{
void Method();
}

class CustomAttribute : Attribute { }

interface IB : IA
{
[Custom]
new void Method();
}

class BaseA : IA
{
public void Method() => Console.WriteLine("Implementation in base");
}

class B: BaseA, IB
{
new public void Method() => Console.WriteLine("Implementation in B");
}

class C : BaseA, IB
{
}
Предположим, что интерфейс IA находится в сторонней библиотеке классов, которую мы не можем изменить, для чего мы добавляем пользовательский атрибут к методу в IB . Я ожидал, что класс C требует другой реализации метода, отличной от той, что есть в BaseA.
Мой вопрос: почему в классе C< /code> новая реализация метода для IB выбирается из BaseA, хотя она помечена как новая в IB?
Где в спецификации C# указано, как разрешить реализацию в таком случае?
Есть ли у этого процесса разрешения имя?

Подробнее здесь: https://stackoverflow.com/questions/789 ... resolution

Вернуться в «C#»