在C#中定义接口时,'in'和'@'关键字有什么作用?

时间:2013-04-20 21:34:17

标签: c# .net

给出以下接口声明:

声明A

public interface EventHandler<T>
{
    void Handle(T command);
}

声明B

public interface EventHandler<in T>
{
    void Handle(T @event);
}

在正常测试中,这些都做同样的事情。 Handle方法按预期调用。

上述方式有何不同,以及它们在其他情况下的表现如何?

1 个答案:

答案 0 :(得分:11)

in将泛型类型参数指定为逆变:in (Generic Modifier) (C# Reference)。还有out for covariant

@允许您使用已注册的关键字作为标识符:

  

关键字是预定义的,具有特殊的保留标识符   对编译器的意义。 它们不能用作您的标识符   程序,除非它们包含@作为前缀。例如,@if是有效的   标识符,但if不是因为if是关键字。

来源:C# Keywords