class GenericClass<T>
{
T val;
public T value
{
get
{
return val;
}
set
{
val = value;
}
}
}
class ObjectClass
{
object val;
public object value
{
get
{
return val;
}
set
{
val = value;
}
}
}
Какая разница между этими двумя класами? Что в первом универсальный тип данных - что во втором. Более того, насколько я знаю, компилятор тип данных T все равно приводит к типу object.
Универсальные шаблоны (или же обощения) в C# вводят концепцию параметров универсального типа. Благодаря им можно создавать классы и методы с типами, спецификация которых отложена до момента объявления и создания экземпляров в клиентском коде.
class GenericClass<T>
{
T val;
public T value
{
get { return val; }
set { val = value; }
}
}
У вас показан класс с параметром T универсального типа (обычно такие подходы используют для работы с коллекциями, причем чаще всего их использут совместно с заданичем ограничения с помощью where
, которое включают в себя все ограничения базового типа T
). Этот класс может использоваться в другом клиентском коде, не требуя ресурсов и не создавая рисков, связанных с операциями приведения и упаковки-преобразования в среде выполнения. Универсальные классы могут вносить некое ограничение типов (когда мы напишем конструкцию where
), то есть они разрешают доступ только для определенных типов данных. Что дает основополагающий плюс и видимый выйгрыш.
Однако следующий код:
class ObjectClass
{
object val;
public object value
{
get { return val; }
set { val = value; }
}
}
Несет на борту определенный тип (пусть это object
, но ведь он определенный, хоть и наследуется всеми типами), что в свою очередь приведет к операциями приведения и упаковки-преобразования. Что повлечет за собой трату ресурсов (ну и времени конечно же). Иными словами это ведет к потере безопасности типов и понижению производительности, когда универсальные шаблоны этой проблемы не имеют.
Если выбирать между универсальными шаблонами и object
- я бы несомненно выбрал универсальные шаблоны (обобщения).
Ну и для справки будет полезно:
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет :) Как можно добавить InitialDirectory для FileDialog в файл конфигурации XML?
Есть кусок кода, который формирует путь по шаблону с добавлением выбранных пунктовWorkerList - это и есть ComboBox
Есть проект на Xamarin Forms наnet standart 2