C# 什么';我应该使用“s”;其中T:<;界面>&引用;?

C# 什么';我应该使用“s”;其中T:<;界面>&引用;?,c#,generics,interface,generic-programming,C#,Generics,Interface,Generic Programming,这两种代码的区别是什么 interface ICommandHanddler<T> where T : ICommand { void Handle(T command); } 接口ICommandHandler,其中T:ICommand { 无效句柄(T命令); } 该代码: interface ICommandHanddler<ICommand> { void Handle(ICommand command)

这两种代码的区别是什么

interface ICommandHanddler<T> where T : ICommand
    {
        void Handle(T command);
    }
接口ICommandHandler,其中T:ICommand
{
无效句柄(T命令);
}
该代码:

interface ICommandHanddler<ICommand>
    {
        void Handle(ICommand command);
    }
接口ICommandHandler
{
无效句柄(ICommand命令);
}
对我来说,它在我的软件中也有同样的影响,但我想知道这是否真的不会影响任何东西,或者这只是一个好的实践

前者说:“类类型的接口,其中类是ICommand的扩展” 后者说:“ICommand类型的接口”

前者允许您使用多种类型的对象调用
ICommandHandler
接口,只要它们继承
ICommand
,或者是
ICommand


关于程序的影响:如果有多个类从一个公共父类扩展而来,并覆盖同一个函数,那么使用前一种方法将使您的生活变得更轻松、更有条理。如果您只有
ICommand
类,那么您可以使用后者。这完全取决于您计划如何构建和扩展类。

如果您不关心
t
的实际类型,请使用后者。