2011-04-02 2 views
3

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

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

+0

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

+0

@Dan Puzey, в 1 строке кода - да. Но поместите эту строку в цикл, который выполняется несколько тысяч раз, и вы увидите, как его пренебрежимо малый ... –

ответ

6

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

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

Dictionary<string, object> PropertyBag; 

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

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

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

4

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

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

Смежные вопросы