继承和泛型类型

时间:2017-05-11 07:53:21

标签: c# generics inheritance

我有一个实现静态方法的通用模型。理想情况下,我希望避免在继承泛型类的类中实现该方法。但我看不出如何避免设置类型。

如果我可以直接在通用模型中获取类型,那将会很酷......

有什么建议吗?

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);
        }
    }

编辑:对不起,我的例子错了。我删除并更改了一些内容以明确我的观点。相反,我做了相反的事情。我编辑了代码示例以反映这一点。

1 个答案:

答案 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。不需要覆盖 - 在你的情况下它实际上是隐藏,因为在基类中已经存在一个具有该名称的成员。