在Java中,我可以指定传递给这样的方法的类型的界限
public <C extends Command, CH extends CommandHandler<C>> void
registerCommandHandler(Class<C> command, Class<CH> handler) {
System.out.println("command class is " + command.getCanonicalName());
Object instance = handler.newInstance();
:
}
Command和CommandHandler的定义如下
class Command {}
abstract class CommandHandler<C extends Command> {
public abstract void handle(C command);
}
这种通用构造使 Java 编译器强制命令和命令处理程序始终相互匹配。因此,以下示例将编译得很好
registerCommandHandler(CreateCustomerCommand.class, CreateCustomerCommandHandler.class);
但这不会编译
registerCommandHandler(CreateCustomerCommand.class, DeleteCustomerCommandHandler.class);
是否可以在 C# 中创建类似的类型安全构造,我在编译时可以限制传递给函数的类型的范围?