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 будут добавляться экземпляры значимых типов, будет происходить упаковка.