微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 为什么要限制泛型键入界面?

在C#中对泛型的接口类型进行约束会有什么意义?例如,

public interface IHandler<in T> where T : IProcessor
{
    void Handle(T command);
}

简单地将IProcessor作为通用继承而没有任何约束不是更好吗?这样做有什么好处?

例如,

public class Test: IProcessor<T>{void Handle(T command);}

解决方法

如果接口为空,则为 marker interface.

它可以用于对类外的类进行限制.与下面的示例一致,您可以限制装饰器只能装饰IProcessor的处理程序.

一个非常正当的理由是在申请装饰时:

假设命令参数接口有几个属性

public interface IProcessor
{
    int Id { get; }
    DateTime Date { get; }
}

我们可以在IProcessor命令的所有处理程序上定义一个装饰器,它知道所有命令参数都有Id和Date:

public sealed class HandlerLogger<in T> where T : IProcessor
{
    private readonly ILogger logger;
    private readonly IHandlerLogger<T> decorated;

    public HandlerLogger(
        ILogger logger,IHandlerLogger<T> decorated)
    {
        this.logger = logger;
        this.decorated = decorated;
    }

    public void Handle(T command)
    {
        this.logger.Log(command.Id,command.Date,typeof(T).Name);
        this.decorated.Handle(command);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐