C#. В чем разница между реализацией обобщенного класса через параметризацию типом и через тип object?
1,00
р.
р.
Меня интересует этот вопрос с точки зрения производительности. Про то что object требует приведение типов и из-за этого можно неявно допустить ошибку, я знаю. UPD. Этот вопрос был задан на собеседовании. В качестве примера добавил 2 класса: class SomeClass { private T[] storage } class SomeClass { private object[] storage }
Ответ В том случае, если вы используете значимые типы, вы получаете дополнительные накладные расходы на упаковку и последующую распаковку. var numbers = new List() numbers.Add(1) // упаковка №1 numbers.Add(2) // упаковка №2 int n1 = (int)numbers[0] // распаковка №1 int n2 = (int)numbers[1] // распаковка №2 Ну и как вы сами упомянули, такое использование не является типобезопасным. Обобщенные коллекции и были введены в .NET 2.0 как раз для того, чтобы избежать этих проблем. В более ранних версиях использовался ArrayList, который, по большому счету, является аналогом List. UPD В приведенном вами примере все то же самое: в случае, если в массив storage будут добавляться экземпляры значимых типов, будет происходить упаковка.