在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
我正在学习ASP.NET MVC,我可以阅读英文文档,但我真的不明白这段代码发生了什么:
public class Genre
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是什么意思:{ get; set; }?
如果二进制版本将被其他框架语言使用,那么在C#中不使用下划线为私有字段添加前缀是否有任何问题?例如,因为C#是区分大小写的,你可以调用字段"foo"和公共属性"Foo",它可以正常工作.
这会对像VB.NET这样的不区分大小写的语言产生什么影响,如果名称只能通过大小写来区分,那么是否会出现任何CLS兼容(或其他)问题?
为什么我会收到编译器警告
标识符'Logic.DomainObjectBase._isNew'不符合CLS
对于以下代码?
public abstract class DomainObjectBase
{
protected bool _isNew;
}
Run Code Online (Sandbox Code Playgroud) 我在http://www.asp.net上的MVC3 Razor教程中看到了这一点
public ActionResult Index() {
return View(_usrs._usrList);
}
Run Code Online (Sandbox Code Playgroud)
这种用法不是很明显吗?我一直以为[docs]
在C#中,我通常看到它仅在为公共属性定义底层私有成员变量时使用.其他私有成员变量没有下划线.尽管如此,随着自动属性的出现,这种用法已基本消失.
或者这是我看到的新命名约定?对微软自己的教程中的用法非常好奇.
PS:文章非常好.只是我倾向于遵循命名约定以提高可读性.
使用C++,我可以编写如下代码.
class Terminal {
int uid;
public:
void SetUid(int uid) {self.uid = uid;}
};
Run Code Online (Sandbox Code Playgroud)
我在C#中尝试过类似的东西,但是我收到了一个错误.我试过以下,但它看起来很难看.
class Terminal {
int uid;
public void SetUid(int uid_) {uid = uid_;}
}
Run Code Online (Sandbox Code Playgroud)
当你想在C#中传递一个具有相同名称的类字段变量的参数时,你会使用什么?