我有一个实现静态方法的通用模型。理想情况下,我希望避免在继承泛型类的类中实现该方法。但我看不出如何避免设置类型。
如果我可以直接在通用模型中获取类型,那将会很酷......
有什么建议吗?
abstract public class GenericFactory
{
public async Task<T> FindByUuid<T>(Guid uuid) where T:GenericModel, new()
{
return await rest.HttpGet<T>($"https://.../{uuid.ToString()}");
}
}
public class Contracts : GenericFactory
{
public async Task<Contract> FindByUuid(Guid uuid)
{
return await base.FindByUuid<Contract>(uuid);
}
}
编辑:对不起,我的例子错了。我删除并更改了一些内容以明确我的观点。相反,我做了相反的事情。我编辑了代码示例以反映这一点。
答案 0 :(得分:0)
我假设您希望派生类Contract
仅允许Contract
方法中FindByUuid
的实例。这样做不需要覆盖基本方法,您只需要将泛型类型参数设置为您的类而不是方法本身:
public class GenericFactory<T> where T : GenericModel, new()
{
public async Task<T> FindByUuid<T>(Guid uuid)
{
return await rest.HttpGet<T>($"https://.../{uuid.ToString()}");
}
}
public class Contracts : GenericFactory<Contract> { ... }
现在Contracts
的所有实例都拥有只接受FindByUuid
实例的方法Contract
。不需要覆盖 - 在你的情况下它实际上是隐藏,因为在基类中已经存在一个具有该名称的成员。