Ну, это не аргумент, если вы ссылаетесь на свойство класса. Таким образом, вы не должны использовать ArgumentException или ArgumentNullException.
NullReferenceException произойдет, если вы просто оставите вещи в покое, поэтому я предполагаю, что это не то, что вы ищете.
Таким образом, использование ApplicationExeption или InvalidOperationException, вероятно, будет вашим лучшим выбором, если обязательно укажите содержательную строку для описания ошибки.
Класс-оболочка - это класс, который, как и его имя, «обертывает» что-то еще.
Более формальным определением будет класс, реализующий шаблон адаптера . Это позволяет преобразовать один набор API в более удобную и читаемую форму. Например, в C #, если вы хотите использовать собственный Windows API, это помогает обернуть его в класс, соответствующий рекомендациям по проектированию .NET.
Они полезны, поскольку обеспечивают уровень абстракции от реализации базового класса или компонента; например, классы-оболочки, которые обертывают компоненты COM, могут управлять процессом вызова компонента COM, не беспокоя вызывающий код им. Они также могут упростить использование базового объекта за счет уменьшения количества задействованных точек интерфейса; часто это обеспечивает более безопасное использование базовых компонентов.Класс-оболочка - это класс, который используется для создания оболочки другого класса для добавления уровня косвенное обращение и абстракция между клиентом и оборачиваемым исходным классом.
Также может быть полезно отметить, что в некоторых средах большая часть того, что могут делать классы-оболочки, заменяется аспектами.
РЕДАКТИРОВАТЬ:
В общем случае оболочка будет расширять то, что делает wrappee, не беспокоясь о реализации wrappee, иначе нет смысла обертывать по сравнению с расширением обернутого класса. Типичным примером является добавление информации о времени или функции ведения журнала вокруг некоторого другого интерфейса службы, а не добавление их к каждой реализации этого интерфейса.
Это становится типичным примером программирования аспектов. Вместо того, чтобы выполнять функцию интерфейса за функцией и добавлять стандартное ведение журнала, в аспекте программирования вы определяете pointcut, который является своего рода регулярным выражением для методов, а затем объявите методы, которые вы хотите выполнить до, после или вокруг всех методов, соответствующих pointcut. Вероятно, будет справедливо сказать, что аспектное программирование - это разновидность использования шаблона Decorator, для которого также могут использоваться классы-оболочки, но обе технологии имеют другое применение.
Класс-оболочка не обязательно должен заключать другой класс в оболочку. Это может быть функция обертывания класса API, например, в файл dll.
Например, может быть очень полезно создать класс оболочки dll, который позаботится обо всей инициализации и очистке dll и создаст методы класса, которые обертывают указатели функций, созданные из например, GetProcAddress ()
.
Ура!
Есть несколько шаблонов проектирования, которые можно назвать классами-оболочками.
См. Мой ответ на « Чем отличаются шаблоны прокси, декоратора, адаптера и моста? "
Вот как это звучит: класс, который «обертывает» функциональность другого класса или API в более простой или просто другой API.
класс-оболочка - это обычно класс, имеющий объект как частное свойство. оболочка реализует API этого частного объекта, поэтому его можно передать в качестве аргумента вместо частного объекта.
говорят, что у вас есть коллекция, и вы хотите использовать какой-то вид перевода при добавлении в нее объектов - вы пишете класс-оболочку, в котором есть все методы коллекции. когда вызывается add (), оболочка переводит аргументы, а не просто передает их в частную коллекцию.
обертку можно использовать везде, где можно использовать коллекцию, и частный объект все еще может иметь другие объекты, ссылающиеся на нее и читающие ее.
A wrapper class is a class that "wraps" around something else, just like its name.
The more formal definition of it would be a class that implements the Adapter Pattern. This allows you to modify one set of APIs into a more usable, readable form. For example, in C#, if you want to use the native Windows API, it helps to wrap it into a class that conforms to the .NET design guidelines.