Использование объекта вместо генериков - PullRequest
3 голосов
/ 02 апреля 2011

Если я использую неуниверсальные коллекции, функции и т. Д., То передаваемые типы значений будут упакованы из-за приведения к Object (что не очень хорошо для производительности).Но после включения обобщений в C # 2.0 большинство ситуаций с передачей типа значения как Object были исключены.

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

Ответы [ 2 ]

6 голосов
/ 02 апреля 2011

Использование System.Object обеспечивает гибкость (за счет производительности).

Рассмотрим механизмы хранения ASP.NET (Session и Application), они имеют общую структуру

 Dictionary<string, object> PropertyBag;

И вы будете использовать их как

PropertyBag["currentCustomer"] = aCustmer;
PropertyBag["visits"] = 0;

Невозможно заменить object на что-то более сильное, набранное здесь.

4 голосов
/ 02 апреля 2011

Есть ли еще ситуации в грамотном программировании, когда невозможно достичь чего-либо с помощью обобщений и все еще необходимо использовать приведение к Object

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...