请考虑以下不符合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合规性的成员/属性的通用命名方案
答案 0 :(得分:5)
不要公开支持字段,而是将属性设置为虚拟,以便继承者可以覆盖功能,而不会暴露支持字段的实现。
private String username;
public virtual String Username { get { return username;} set { username = value; } }
继承不应该知道你的类实现。
答案 1 :(得分:2)
这组规则适用于Visual Basic,但C#应该有类似的设置:
Visual Basic中的元素名称必须遵守以下规则:
必须以字母字符或下划线(_)开头。
它必须只包含字母字符,十进制数字和下划线。
如果它以下划线开头,则必须包含至少一个字母字符或十进制数字。
长度不得超过1023个字符。
但是,以下内容也适用:
以下划线(_)开头的元素名称不是公共语言规范(CLS)的一部分,因此符合CLS的代码不能使用定义此类名称的组件。但是,元素名称中任何其他位置的下划线都符合CLS。
以上内容来自MSDN Documentation。
以下是MSDN上Common Language Specification文档的链接,该文档反过来引用了CLS命名约定的最终仲裁者:Annex 7 of Technical Report 15 of the Unicode Standard 3.0。
答案 2 :(得分:1)
private string m_Username;
public string Username ...
答案 3 :(得分:0)
你想用这个来实现什么?
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合规性,你不得不称你为pulic和prtectred版本不同的名字,这将是'混乱。