Метод не принадлежит базовому классу, если каждый возможный производный класс не имеет соответствующей реализации.
Если вам нужно создать исключение NotSupportedException в некоторых ваших деривациях, значит, вы нарушили принцип подстановки Лискова . Этот принцип в основном утверждает, что любой производный класс должен быть подходящим, когда ожидается базовый класс.
Публичный интерфейс к классу должен быть как можно более сплоченным. Если я сталкиваюсь с таким выбором, я почти всегда помещаю его в производный класс, если я не действительно думаю, что операция "принадлежит" в базе.
Обновление
Я бы хотел отозвать свое предыдущее заявление. Как указал Уэйн Хартман, если бы это было правдой, то System.IO.Stream
также сломал бы LSP. Правило гласит, что вы не можете генерировать новые исключения из метода в подтипе. Похоже, это не относится к абстрактным методам, поскольку они не имеют никакой реализации.
Я думаю, что важным моментом является сохранение вашей абстракции в чистоте. Если с точки зрения вашей абстракции имеет смысл добавить метод в базовый класс, то обязательно сделайте это. Однако, если вы просто хотите иметь общее место для добавления кода, я бы не стал добавлять его в базу.
Я также согласен, что иногда частичная реализация для согласованности уместна.