[英]Create instance of implementation of generic class based on type of Class<T>
[英]Create a class with Optional Generic Type <T>
假设我们有一个看起来像这样的类:
public class Repository<T>
{
private readonly string _connectionString;
public Repository(string connectionString)
{
_connectionString = connectionString;
}
void T SomeMethod()
{
// do work here
return T;
}
}
在上述情况下,该类型需要与类一起被声明,但你不会需要时调用指定类型SomeMethod()
或者,您也可以这样做:
public class Repository
{
private readonly string _connectionString;
public Repository(string connectionString)
{
_connectionString = connectionString;
}
void T SomeMethod<T>()
{
// do work here
return T;
}
}
在这种情况下,类将没有类型来创建的,但你需要打电话时申报类型SomeMethod()
如果没有所有代码的完全重复,如何创建相同的类,以便在创建它时 Type 是可选的? 换句话说,我希望这两个都在上游工作:
Repository<MyType> repo = new Repository<MyType>();
var something = repo.SomeMethod();
和
Repository repo = new Repository();
var something = repo.SomeMethod<MyType>();
如果这是您想要实现的目标,您可以通过包装泛型方法实现来最大程度地减少重复:
public class Repository
{
public T SomeMethod<T>()
{
//Impl.
}
}
public class Repository<T>
{
private readonly Repository _base;
public Repository()
{
_base = new Repository();
}
public T SomeMethod() => _base.SomeMethod<T>();
}
泛型类只是代理泛型方法。
编辑
与上面相同的概念,将注入的connectionString
传递给包装的实例。
public class Repository
{
private readonly string _connectionString;
public Repository(string connectionString)
{
_connectionString = connectionString;
}
public T SomeMethod<T>()
{
//Impl.
}
}
public class Repository<T>
{
private readonly Repository _base;
public Repository(string connectionString)
{
_base = new Repository(connectionString);
}
public T SomeMethod() => _base.SomeMethod<T>();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.