Почему этот C# кодирует компиляцию, прекрасную, когда существует неоднозначный виртуальный метод?

У меня есть класс (Класс B), который наследовал другой класс (Класс A), который содержит виртуальные методы.

По ошибке я опустил override ключевое слово при объявлении (предполагаемый быть) метод переопределения в Классе B.

Класс A

public class ClassA{
    public virtual void TestMethod(){
    }
}

Класс B

public class ClassB : ClassA{
    public void TestMethod(){
    }
}

Код скомпилирован без проблемы. Кто-либо может объяснить почему?

6
задан John Saunders 27 May 2010 в 10:22
поделиться

3 ответа

Это не двусмысленно. Он должен компилироваться с предупреждением о том, что вы должны указать либо "new", либо "override", и что по умолчанию фактически используется "new".

Он определенно выдает предупреждение, когда я пытаюсь скомпилировать этот код - когда вы говорите, что он компилируется "нормально" и "без проблем", вы игнорируете предупреждения?

7
ответ дан 16 December 2019 в 21:35
поделиться

класс B должен быть

public class ClassB : ClassA{
    public override void TestMethod(){
    }
}

но он может компилироваться без переопределения - он должен выдать предупреждение, что если это было задумано, вам нужно добавить новое ключевое слово

public class ClassB : ClassA{
    public new void TestMethod(){
    }
}

проверьте это для получения дополнительной информации

0
ответ дан 16 December 2019 в 21:35
поделиться

Компилятор C # выдает предупреждение. Я советую вам всегда компилировать с «предупреждениями как ошибками».

1
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: