代码之家  ›  专栏  ›  技术社区  ›  MatthewMartin muthu

为什么带有下划线的名称不符合CLS?

  •  54
  • MatthewMartin muthu  · 技术社区  · 15 年前

    为什么我会收到编译器警告

    标识符“Logic.DomainObjectBase.\u isNew”不符合CLS

    对于以下代码?

    public abstract class DomainObjectBase
    {
        protected bool _isNew;
    }
    
    8 回复  |  直到 10 年前
        1
  •  80
  •   Reed Copsey    15 年前

    Common Language Specification :

    如果你 look this up :

    也就是说,标识符的第一个字符可以是大写字母、小写字母、标题字母、修饰字母、其他字母或字母编号。标识符的后续字符可以是这些字符中的任何一个,加上非间距标记、间距组合标记、十进制数、连接器标点和格式代码(例如左右标记)。通常,在存储或比较标识符之前,应过滤掉格式化代码。

        2
  •  43
  •   aolszowka    10 年前

    CLS compliance 与不同系统之间的互操作性有关 .NET

    您将遇到此编译器错误,因为在代码中的某个地方,您已将程序集标记为符合CLS的,并使用类似以下的行:

    [assembly: CLSCompliant(true)]
    

    Visual Studio在AssemblyInfo.cs文件中包含这一行,该文件可以在大多数项目的“属性”下找到。

    要避免此错误,您可以:

    1. 重命名您的属性(推荐):

      protected bool isNew;
      
    2. 将整个程序集设置为不符合CLS:

      [assembly: CLSCompliant(false)]
      
    3. [CLSCompliant(false)]  
      protected bool _isNew;
      
    4. 更改属性的范围,以便在程序集外部看不到该属性。

      private bool _isNew;
      
        3
  •  28
  •   jason    15 年前

    领头羊 underscore 伴随 _isNew 可见(即,非隐私)。

        4
  •  7
  •   ChrisLively    15 年前

    下划线导致问题。通常的做法是下划线保留给私有字段。受保护/公共成员应正确地使用大小写和命名。

    例如:

    public abstract class DomainObjectBase{   
       private bool _isNew;
       protected bool IsNew { get { return _isNew; } set { _isNew = value;} }
    }
    

    或者,如果您想使用3.x并去掉私有字段:

    public abstract class DomainObjectBase{   
       protected bool IsNew { get; set; }
    }
    
        5
  •  2
  •   Peter Mortensen icecrime    11 年前

    符合CLS的标识符不应以下划线开头。

        6
  •  1
  •   Tim Stewart    15 年前

    这是下划线。看到这个了吗 article .

        7
  •  1
  •   Frozenskys    15 年前

    领先者不符合CLS

    StyleCop 将分析您的代码,并提供相关文档的链接,解释其不符合CLS的原因。

        8
  •  0
  •   Peter Mortensen icecrime    11 年前

    因为数据成员的名称, _isNew ,以下划线开头。