Не делай этого.В чем преимущество?
Пользователь вашего класса DTO не имеет представления о типах полей / свойств.Вероятно, он может догадаться, что поле Имя должно быть строкой, но как насчет цены и количества?Они двойники?Десятичные?Целые числа?
Очевидно, что он может поместить туда что угодно, и оно скомпилируется и запустится, но тогда вам придется проверять типы в вашем уровне данных и генерировать исключения, когда типы не совпадают (и если нет,ваша база данных, вероятно, будет).
Возможно, вы могли бы использовать дженерики вместо этого, что-то вроде
class ProductDTO<Nt, Pt, Qt>
{
Nt name;
Pt price;
Qt quantity;
public ProductDTO(Nt name, Pt price, Qt quantity)
{
this.name = name;
this.price = price;
this.quantity = quantity;
}
}
А потом:
var dto1 = new ProductDTO<string, decimal, double>("product1", 12.3m, 33.0); // name is string, price is decimal, quantity is double
var dto2 = new ProductDTO<string, double, int>("product2", 122.4, 15); // string, double, int
Вы также можете создать статический метод икласс и пусть вывод типа делает работу:
static class ProductDTO
{
public static ProductDTO<N, P, Q> Create<N, P, Q>(N name, P price, Q quantity)
{
return new ProductDTO<N, P, Q>(name, price, quantity);
}
}
А затем
var dto3 = ProductDTO.Create("product3", 123.4, 56.7);