Все охватили очевидное, так что вот еще один вариант.
Если ваш класс должен быть инициализирован каким-либо образом (ваш SomeObject
должен быть установлен в какой-то момент), рассмотрите возможность реализации ISupportInitialize . Это указывает пользователям вашего класса, что он не находится в допустимом состоянии до вызова EndInit()
. К сожалению, не существует ранее существовавшего общего NotInitializedException
, которое вы можете использовать (есть некоторые, но специфичные для определенных пространств имен), поэтому я бы предложил объединить вашу реализацию интерфейса с созданием такого исключения.
Пользователи должны сначала вызвать BeginInit()
, затем настроить экземпляр, затем вызвать EndInit()
. При звонке на EndInit()
проверьте состояние вашего экземпляра. Если он неправильно инициализирован, вы можете вызвать исключение InvalidOperationException. Если пользователи попытаются использовать ваш экземпляр до инициализации, вы выбросите NotInitializedException.
Это немного больше работы, но преимущество в том, что вы создаете более широкую «яму успеха» для своих пользователей, гарантируя, что они правильно используют ваши классы, быстро и рано проваливаясь, и по самому определению вашего типа Интерфейс довольно ясно о том, что вы ожидаете). Это также даст вам больше, так сказать, «места» для документирования того, как следует использовать ваш класс.