Что такое класс обертки?

Ну, это не аргумент, если вы ссылаетесь на свойство класса. Таким образом, вы не должны использовать ArgumentException или ArgumentNullException.

NullReferenceException произойдет, если вы просто оставите вещи в покое, поэтому я предполагаю, что это не то, что вы ищете.

Таким образом, использование ApplicationExeption или InvalidOperationException, вероятно, будет вашим лучшим выбором, если обязательно укажите содержательную строку для описания ошибки.

216
задан Patrick McDonald 20 May 2009 в 06:42
поделиться

8 ответов

Класс-оболочка - это класс, который, как и его имя, «обертывает» что-то еще.

Более формальным определением будет класс, реализующий шаблон адаптера . Это позволяет преобразовать один набор API в более удобную и читаемую форму. Например, в C #, если вы хотите использовать собственный Windows API, это помогает обернуть его в класс, соответствующий рекомендациям по проектированию .NET.

Они полезны, поскольку обеспечивают уровень абстракции от реализации базового класса или компонента; например, классы-оболочки, которые обертывают компоненты COM, могут управлять процессом вызова компонента COM, не беспокоя вызывающий код им. Они также могут упростить использование базового объекта за счет уменьшения количества задействованных точек интерфейса; часто это обеспечивает более безопасное использование базовых компонентов.

167
ответ дан 23 November 2019 в 04:19
поделиться

Класс-оболочка - это класс, который используется для создания оболочки другого класса для добавления уровня косвенное обращение и абстракция между клиентом и оборачиваемым исходным классом.

3
ответ дан 23 November 2019 в 04:19
поделиться

Также может быть полезно отметить, что в некоторых средах большая часть того, что могут делать классы-оболочки, заменяется аспектами.

РЕДАКТИРОВАТЬ:

В общем случае оболочка будет расширять то, что делает wrappee, не беспокоясь о реализации wrappee, иначе нет смысла обертывать по сравнению с расширением обернутого класса. Типичным примером является добавление информации о времени или функции ведения журнала вокруг некоторого другого интерфейса службы, а не добавление их к каждой реализации этого интерфейса.

Это становится типичным примером программирования аспектов. Вместо того, чтобы выполнять функцию интерфейса за функцией и добавлять стандартное ведение журнала, в аспекте программирования вы определяете pointcut, который является своего рода регулярным выражением для методов, а затем объявите методы, которые вы хотите выполнить до, после или вокруг всех методов, соответствующих pointcut. Вероятно, будет справедливо сказать, что аспектное программирование - это разновидность использования шаблона Decorator, для которого также могут использоваться классы-оболочки, но обе технологии имеют другое применение.

7
ответ дан 23 November 2019 в 04:19
поделиться

Класс-оболочка не обязательно должен заключать другой класс в оболочку. Это может быть функция обертывания класса API, например, в файл dll.

Например, может быть очень полезно создать класс оболочки dll, который позаботится обо всей инициализации и очистке dll и создаст методы класса, которые обертывают указатели функций, созданные из например, GetProcAddress () .

Ура!

17
ответ дан 23 November 2019 в 04:19
поделиться

Есть несколько шаблонов проектирования, которые можно назвать классами-оболочками.

См. Мой ответ на « Чем отличаются шаблоны прокси, декоратора, адаптера и моста? "

8
ответ дан 23 November 2019 в 04:19
поделиться

Вот как это звучит: класс, который «обертывает» функциональность другого класса или API в более простой или просто другой API.

См .: Шаблон адаптера , Образец фасада

67
ответ дан 23 November 2019 в 04:19
поделиться

класс-оболочка - это обычно класс, имеющий объект как частное свойство. оболочка реализует API этого частного объекта, поэтому его можно передать в качестве аргумента вместо частного объекта.

говорят, что у вас есть коллекция, и вы хотите использовать какой-то вид перевода при добавлении в нее объектов - вы пишете класс-оболочку, в котором есть все методы коллекции. когда вызывается add (), оболочка переводит аргументы, а не просто передает их в частную коллекцию.

обертку можно использовать везде, где можно использовать коллекцию, и частный объект все еще может иметь другие объекты, ссылающиеся на нее и читающие ее.

5
ответ дан 23 November 2019 в 04:19
поделиться

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.

8
ответ дан 23 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: