Прежде всего, это полезно, если у вас есть вопросы, которые вы публикуете в коде, который фактически компилируется. Трудно проанализировать проблему, когда она заполнена отсутствующими модификаторами и опечатками; трудно понять, является ли проблема опечаткой или нет.
Как только мы выполним работу по исправлению вашей программы так, чтобы она фактически компилировалась, компилятор выдает предупреждение, которое говорит вам, что перегрузка выглядит неправильно .Так как ваш вопрос "почему перегрузка неправильная?"вероятно, было бы неплохо прочитать предупреждение компилятора, которое мы сгенерировали точно, чтобы вы могли проанализировать эту проблему.
Проблема в том, что производный класс содержит новый метод с именем "name".", а не переопределить существующего метода.Это то, о чем вас предупреждает предупреждение.
Существует два способа решения этой проблемы, в зависимости от того, намеревался ли метод быть «новым» или «переопределить».Если вы хотели, чтобы метод был «переопределен», то сделайте базовую реализацию виртуальной, а производную реализацию переопределите.
Если вы хотели, чтобы метод был «новым» и , вы все равно хотите, чтобы новый метод заменилпривязка к реализации интерфейса , затем использование переопределение интерфейса :
class SpecialContainer: FuzzyContainer, IContainer
{
public new string Name()
{
return base.Name() + " Special Container";
}
}
Обратите внимание на «новое» и тот факт, что у нас повторно заявлено , чтоэтот класс реализует IContainer.Это говорит компилятору «не обращать внимания на привязки к методам IContainer, выведенным из базового класса, и начинать заново».