Property &可以使用什么c#命名方案?符合CLS的成员

本文关键字:方案 符合 CLS 成员 可以使 什么 Property | 更新日期: 2023-09-27 18:15:55

考虑以下不符合CLS的代码(仅与不同):

protected String username;
public String Username { get { return username;} set { username = value; } }

所以我改成:

protected String _username;
public String Username { get { return _username;} set { _username = value; } }

也不符合cls (有前导下划线)。

是否存在不违反cls遵从性的成员/属性的通用命名方案

Property &可以使用什么c#命名方案?符合CLS的成员

与其暴露后备字段,不如将属性设置为虚拟的,这样继承者就可以在不暴露后备字段实现的情况下覆盖该功能。

private String username;
public virtual String Username { get { return username;} set { username = value; } }

继承者不应该知道任何你的类实现。

参见暴露受保护字段的最佳方法

这组规则适用于Visual Basic,但c#也应该有一套类似的规则:

Visual Basic中的元素名必须遵守以下规则:

必须以字母或下划线(_)开头。

只能包含字母、十进制数字和下划线。

如果以下划线开头,必须包含至少一个字母字符或十进制数字。

长度不能超过1023个字符。

但是,以下也适用:

以下划线(_)开头的元素名不是公共语言规范(CLS)的一部分,因此符合CLS的代码不能使用定义了这些名称的组件。但是,元素名中任何其他位置的下划线都是符合cls的。

以上内容来自MSDN文档。

这里是MSDN上公共语言规范文档的链接,该文档反过来引用了CLS命名约定的最终仲裁者:Unicode标准3.0的技术报告15的附件7。

MFC救援。只需使用旧的m_前缀:

private string m_Username;
public string Username ...

你想要达到什么目的?

public String Username {get; protected set};

private String _username;
protected void setUserName(String argUsername);
{
  if (_username != Username) // an overload of String.Compare would be better here
  {
    _username = value;
    // Do the stuff you have to do because username has changed
  }
}
public String Username {get {return _username;} protected set {setUsername(value);}}

按照你的方式,为了符合CLS,你必须给你的公共版本和受保护版本取不同的名字,这会让人感到困惑。