В Java вы можете пометить метод как final, чтобы сделать его невозможным.
В С# вы должны пометить метод как виртуальный, чтобы можно было переопределить.
Означает ли это, что в С# вы должны пометить все методы виртуальными (за исключением нескольких, которые вы не хотите переопределять), поскольку, скорее всего, вы не знаете, каким образом ваш класс может быть унаследован?