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遵从性的成员/属性的通用命名方案
与其暴露后备字段,不如将属性设置为虚拟的,这样继承者就可以在不暴露后备字段实现的情况下覆盖该功能。
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,你必须给你的公共版本和受保护版本取不同的名字,这会让人感到困惑。