В моем понимании, NULL-класс не должен быть реализован для каждого вашего класса, а скорее для каждого вашего интерфейса. В этом случае вы наверняка могли бы написать некоторый метод, который генерирует пустую стандартную реализацию для любого данного интерфейса, используя отражение. Однако желаемое поведение NULL-объекта может иметь особые случаи для определенных интерфейсов, и в этом случае универсальное решение не будет выполнено.
Например, у вас может быть интерфейс, который реализует IComparable
. В некоторых случаях вы можете захотеть, чтобы NULL-объект был равен всем другим объектам, а в других случаях вы хотите, чтобы он был меньше всех других объектов.
РЕДАКТИРОВАТЬ: IComparable
был просто примером. Дело в том, что я не думаю, что было бы разумно иметь общую реализацию NULL-класса. Вы используете NULL-класс, так что ваша программа может работать без необходимости обрабатывать особые случаи NULL
возвращаемых значений. Если у вас есть реализация по умолчанию, вам, безусловно, придется снова проверять наличие особых случаев, и весь смысл шаблона будет пропущен.