为什么这个带有下划线的名称不符合 CLS?
-
19-09-2019 - |
题
为什么我会收到编译器警告
标识符“Logic.DomainObjectBase._isNew”不符合 CLS
对于以下代码?
public abstract class DomainObjectBase
{
protected bool _isNew;
}
其他提示
CLS 合规性 与不同系统之间的互操作性有关 。网 语言。该属性不符合 CLS,因为它以下划线开头并且是公共的(注意:公共类中的受保护属性可以从程序集外部访问)。虽然如果从 C# 访问该属性,这将起作用,但如果从其他不允许在属性名称开头使用下划线的 .NET 语言访问该属性,则可能不起作用,因此它不符合 CLS。
您会收到此编译器错误,因为在代码中的某个位置您已将程序集标记为符合 CLS,并使用如下行:
[assembly: CLSCompliant(true)]
Visual Studio 将此行包含在 AssemblyInfo.cs 文件中,该文件可以在大多数项目的“属性”下找到。
要解决此错误,您可以:
重命名您的财产(推荐):
protected bool isNew;
将整个程序集设置为不符合 CLS:
[assembly: CLSCompliant(false)]
仅向您的属性添加一个属性:
[CLSCompliant(false)] protected bool _isNew;
更改属性的范围,以便在程序集外部看不到它。
private bool _isNew;
前导下划线,提供_isNew
伴随可见(即,不私有的)。
下划线导致该问题。通常的做法是,下划线被保留用于私人领域。保护/公共成员应适当套管和命名。
例如:
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; }
}
一个符合CLS的标识符不应该以下划线开头。
这是下划线。看到此文章。
在主导_是非CLS兼容
了StyleCop 会分析你的代码,并提供链接到培训相关文件解释为何不符合CLS。
由于该数据成员的名称,_isNew
,开始的用下划线
不隶属于 StackOverflow