Допустим, у нас есть класс, который выглядит следующим образом:
public class Repository<T>
{
private readonly string _connectionString;
public Repository(string connectionString)
{
_connectionString = connectionString;
}
void T SomeMethod()
{
// do work here
return T;
}
}
В случае выше, Type должен быть объявлен вместе с классом, но вы не нужно указать тип при вызове SomeMethod()
.
. Или вы также можете сделать это:
public class Repository
{
private readonly string _connectionString;
public Repository(string connectionString)
{
_connectionString = connectionString;
}
void T SomeMethod<T>()
{
// do work here
return T;
}
}
В этом случае класс будет создан без типа, но вы потребовалось бы объявить тип при вызове SomeMethod()
.
Без полного дублирования всего кода, как создать один и тот же класс, чтобы тип был необязательным при его создании? Другими словами, я бы хотел, чтобы оба этих параметра работали в восходящем направлении:
Repository<MyType> repo = new Repository<MyType>();
var something = repo.SomeMethod();
и
Repository repo = new Repository();
var something = repo.SomeMethod<MyType>();