.net 以u和CLSCompliant属性开头的受保护变量的含义

.net 以u和CLSCompliant属性开头的受保护变量的含义,.net,cls-compliant,.net,Cls Compliant,我们有一些C#代码,其中有用下划线命名的受保护变量 protected string _name; public string Name { get { return _name; } set { _name = value; } } 这会生成CLS合规性警告,因为CLS不喜欢开头的下划线 用[CLSCompliant(false)]标记受保护变量有什么含义?我甚至不知道这是什么语言的问题来测试东西。如果_name是不可访问的,就我们

我们有一些C#代码,其中有用下划线命名的受保护变量

protected string _name;
public string Name
{
   get
   {
      return _name;
   }
   set
   {
      _name = value;
   }
}
这会生成CLS合规性警告,因为CLS不喜欢开头的下划线


用[CLSCompliant(false)]标记受保护变量有什么含义?我甚至不知道这是什么语言的问题来测试东西。如果_name是不可访问的,就我们的目的而言,这是可以的,但如果它导致命名不明确,就不是了。

有些语言不支持以下划线开头的变量。如果使用这些语言之一的客户机希望从您的类继承,他将无法访问
\u name
字段。我不知道那些是什么语言


从设计的角度来看,我想知道当公共(而不是虚拟)属性允许直接获取和设置时,为什么会有一个受保护的备份字段。重点是什么?在这种情况下,允许继承人访问支持字段没有任何好处,并且不可能更改
Name
属性的实现。

我的意思是添加-目的是在程序集之外不会有子类。如果您希望该字段在程序集中可用,但继承人不能使用,使用
内部
。你看,我一直在为将变量更改为私有或自动访问器而争论,但我遇到了阻力。@Igaud:我只是好奇,但其他人对他们的决定给出了什么理由?他们的犹豫不决,可能:)编写这段代码的人觉得它在某种程度上使继承变得更容易,我不太清楚如何实现。具体来说,他觉得有时候类的后代应该能够访问字段,而不必经历将来可能添加到访问器中的任何“花哨”操作。