Возможный дубликат:
Почему С# реализует методы как не виртуальные по умолчанию?
Было бы гораздо меньше работать, чтобы определить, какие методы НЕ переопределяемы, а не переопределяемы, потому что (по крайней мере для меня), когда вы разрабатываете класс, вам все равно, будут ли его наследники переопределять ваши методы или нет...
Итак, почему методы в С# не являются автоматически виртуальными? В чем смысл этого?