2013-02-22 196 views
0

我开始一个新的项目,我有一些问题试图实现一些命名约定。c#命名约定

我曾经使用以大写和单数开头的类,如Car或User,以及我的变量以小写开头,所以如果我需要声明一个具有Car和User类型变量的类,我会这样做像这样:

public Car car; 
private User user; 

现在我试着去使用一些属性和我看到他们也应该PascalCase,至极的意思是,如果我需要声明同样的例子我应该是:

public Car Car { get; set; } 
private User User { get; set; } 

你都可以看到问题会在这里出现,或者你没有看到它问题?

那么我该怎么做?我在这里错过了什么?

+5

假设我看不出有什么问题。这是什么? – Pete 2013-02-22 14:45:39

+0

它是公共和私人的小p – manojlds 2013-02-22 14:46:16

+0

皮特我认为它是一个问题,因为如果我在我的课堂上有一些静态方法,并需要访问他们在同一类,我已经有一个实例,我不知道如何去访问一个或另一个,但也许我做错了不是命名约定,但我做了什么之后。 – 2013-02-22 14:50:48

回答

9

C#的命名约定建议的一切,是公众以及类,接口等,开始以一个大写字母。其余的应该从小写开始。

有没有问题:

private User User { get; set; } 

...因为每个名字(单词)的位置定义什么是什么。 英语的工作方式也是一样。 例如:“我爱爱情”。 (代词,动词,名词)

+1

+1对于使用'私人用户用户{get;组; }'但是,值得注意的是,在C#中公共成员,含有多个单词**的类型和名称空间的一般推荐命名约定是PascalCase。 http://msdn.microsoft.com/en-gb/library/vstudio/ms229043(v=vs.100).aspx – Richard 2013-02-22 15:21:53

+0

正确的感谢 - 为此添加 – Holly 2013-02-24 20:02:09

+0

谢谢,它也适用于Unity C# – Unreality 2015-11-05 02:16:09

1

那里没有问题。

因为在您使用该类的上下文中,不能误导属性,反之亦然。

编辑:好吧,我要去假设你有UserClass的这样的carclass内:

public class Car 
{ 
    private class User 
    { 

    } 

    private User User 
    { 
     get; 
     set; 
    } 
} 

这的确会产生问题。移出你的用户,问题就解决了。

public class Car 
{ 

    private User User 
    { 
     get; 
     set; 
    } 
} 

public class User 
{ 

} 
+0

您的编辑是不正确的,我现在可以看到它不是一个问题,但我没有这样写,谢谢:) – 2013-02-22 15:06:56

+1

对不起,我没有发现你真正的问题,然后:)无论如何,它很好的解决了! – Evelie 2013-02-22 15:08:40

1

这里没有问题;正如@NDJ建议,如果你感觉不舒服,你可以应用上下文来为属性添加额外的前缀;但这通常不会增加上下文的附加含义。

作为一般的Microsoft风格指南,鼓励使用Pascal Case来表示属性。

有关资本更完整指南请参阅以下MSDN article

1

除了@Evelie指出的内部类问题,你不应该有任何命名与该类型相同的属性的问题 - 事实上这并不罕见。 .NET在整个地方都有public Color Color的属性。

如下面的程序说明了编译器可以实例调用和静态调用之间distinguich:

void Main() 
{ 
    Car c = new Car(); 
    c.Test(); 
} 

public class Car 
{ 

    public Car() 
    { 
     User = new User(); 
    } 

    public void Test() 
    { 
     User.Static(); // calls static method 
     User.Instance(); // implies this.User 
    } 

    public User User { get; set; } 
} 
// Define other methods and classes here 
public class User 
{ 
    public static void Static() 
    { 
     Console.WriteLine("Static"); 
    } 

    public void Instance() 
    { 
     Console.WriteLine("Instance"); 
    } 
} 
4

你碰到被称为Color Color什么问题,因为最常见的方式,作物起来是“我需要名为ColorColor”的房产。 C#专门设计用于优雅地管理Color Color的情况。

有关详细信息,请参阅C#4规范中的第7.6.4.1节“相同的简单名称和类型名称”。

Color Color的规则有点复杂(相信我,他们不会让编译器实现者的生活变得更容易!),他们可能会导致一些有趣的情况。如果这个问题的利益,你,你应该阅读就可以了我的文章:

http://blogs.msdn.com/b/ericlippert/archive/2009/07/06/color-color.aspx

+0

谢谢埃里克,我会阅读它。 – 2013-02-22 15:33:46

+0

不错的文章埃里克,再次感谢我可以看到使用相同名称的含义。 – 2013-02-22 15:44:01