给出以下接口声明:
声明A
public interface EventHandler<T>
{
void Handle(T command);
}
声明B
public interface EventHandler<in T>
{
void Handle(T @event);
}
在正常测试中,这些都做同样的事情。 Handle
方法按预期调用。
上述方式有何不同,以及它们在其他情况下的表现如何?
答案 0 :(得分:11)
in
将泛型类型参数指定为逆变:in
(Generic Modifier) (C# Reference)。还有out
for covariant。
@
允许您使用已注册的关键字作为标识符:
关键字是预定义的,具有特殊的保留标识符 对编译器的意义。 它们不能用作您的标识符 程序,除非它们包含
@
作为前缀。例如,@if
是有效的 标识符,但if
不是因为if是关键字。
来源:C# Keywords