代码之家  ›  专栏  ›  技术社区  ›  dbones

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

  •  0
  • dbones  · 技术社区  · 6 年前

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

    以下是一个例子:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Klaus Gütter    6 年前

    这并不完全是你想要的,但可能是朝着正确方向迈出的一步。您可以将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>();