约束通用输入参数

本文关键字:参数 输入 约束 | 更新日期: 2023-09-27 18:02:44

我设计了如下界面:

public interface IProcess<ICommand> { void Run(); }

然而,Resharper评论说我的输入参数叫什么并不重要,是ICommand还是TWhatEverElse

现在,从我选择的名称可以很容易地看出,我想要设置泛型参数类型的限制,使其成为实现的、派生的或仅仅是类型ICommand

可悲的是,这台固执的电脑只会按我的要求去做,而不是按我的意思去做,所以我需要一些帮助。使用: where的符号不会给我带来太多好处,因为我想约束到一个接口(和它的所有随从)。

可以约束发送到大括号中的类型吗?如果可以,如何约束?

<标题>编辑

我在子句中添加了,得到了以下内容:

public interface IProcess<TCommand> where TCommand : ICommand { }

然而,我似乎仍然错过了一些东西。实现类如下:

public class Processo : IProcess<Commando> { }
public class Commando : ICommand { }

然而,编译器声称它不会飞行,因为Commando不能转换为 iccommand 。我错过了什么?!

约束通用输入参数

您可以使用where关键字应用约束:

public interface IProcess<T> where T : ICommand { void Run(); }