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