代码之家  ›  专栏  ›  技术社区  ›  Arseni Mourzenko

C类中的@namespace字段是什么?[复制品]

  •  8
  • Arseni Mourzenko  · 技术社区  · 16 年前

    我在浏览 the source code of StyleCop 我发现了一件奇怪的事:

    /// <summary>
    /// The namespace that the rule is contained within.
    /// </summary>
    private string @namespace;
    
    // [...]
    
    internal Rule(string name, string @namespace, string checkId, string context, bool warning) : this(name, @namespace, checkId, context, warning, string.Empty, null, true, false)
    {
        Param.Ignore(name, @namespace, checkId, context, warning);
    }
    

    这是什么东西?它只是一个简单的字段,其中at符号用于指示它是一个字段,而不是 namespace 关键字?如果是这样,可以在符号处用于任何保留字(例如 @dynamic , @using 等等?

    5 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    是@符号可以放在保留字的前面,以允许它们用作变量名。

    var @dynamic = ...
    var @event = ....
    

    实际上,我从 this question

        2
  •  6
  •   Jason Evans    16 年前

    基本上是的。将@放在变量名前面可防止由于该变量名是关键字而导致的错误发生。

    http://msdn.microsoft.com/en-us/library/x53a06bb(VS.71).aspx

        3
  •  1
  •   Mike    16 年前

    是的,你可以用 @ 作为 first and only first 变量的字符。

        4
  •  1
  •   Tim Lloyd    16 年前

    这种技术通常与自动代码生成相结合,因为在目标语言中可能会生成作为关键字的标识符,例如,如果一个XML模式运行代码生成来生成C类,那么该模式可能具有一个称为“事件”的属性。这是一个C关键字,因此代码生成器可以使用“@event”。

        5
  •  0
  •   Vagaus    16 年前

    正如其他人回答的那样,准确地说,只要在前缀前加“@”,就可以使用保留关键字,但是 IMHO 这不是一个好的开发实践。我宁愿只在机器生成的代码中使用它(例如,在我工作的公司中,我们有一个工具将Java代码转换成C语言),因为在Java中“事件”不是一个保留字,我们的Java源代码可以包含这样的标识符。

    最好的

    阿德里亚诺