方法约束必须是泛型类的超类

时间:2018-11-18 11:52:31

标签: c# .net generics

我该怎么办?

我有一个方法,我需要说它的泛型类型必须是类泛型类型的父类。

这里是一个例子:

class Logger : ILogger, IStartable {}

///use
new FluentBuilder<Logger>().As<ILogger>().As<IStartable>();

这显示了我的意图,但是不起作用(因为它在语法上不是错误的):

public class FluentBuilder<TService> where TService : class
{
    public FluentBuilder<TService> As<TContract>() where TService : TContract
    {
        return this;
    }
}

1 个答案:

答案 0 :(得分:0)

这不完全是您想要的,但也许是朝正确方向迈出的一步。您可以将As方法实现为扩展方法:

public static class Ex
{
    public static FluentBuilder<TService> As<TService, TContract>(this FluentBuilder<TService> that) 
        where TContract : class 
        where TService : class, TContract
    {
        return that;
    }
}

使用语法如下:

new FluentBuilder<Logger>().As<Logger, ILogger>().As<Logger, IStartable>();