【问题标题】:What do the 'in' and '@' keywords do when defining interfaces in C#?在 C# 中定义接口时,'in' 和 '@' 关键字有什么作用?
【发布时间】:2013-04-20 21:34:17
【问题描述】:

鉴于以下接口声明:

声明 A

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

声明 B

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

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

上述情况有何不同,在其他情况下它们的表现有何不同?

【问题讨论】:

  • 对于@,它可以让你使用save-keywords,如上一个例子,event是一个关键字,var event = 2不会编译,在它前面加上@会修复它。
  • 前两个真的适合你吗?我预计它们会出现编译器错误,但我确实得到了它们的编译器错误。
  • @hvd, int @event = 2; 应该可以正常工作。
  • @gdoron 我知道,我的问题是针对 OP,而不是针对您。抱歉,不清楚。

标签: c# .net


【解决方案1】:

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

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

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

来源:C# Keywords

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2019-04-05
    • 2016-07-03
    • 2019-04-23
    • 2011-06-04
    • 2011-03-10
    相关资源
    最近更新 更多