1

我开始了一个新项目,但在尝试实施一些命名约定时遇到了一些问题。

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

public Car car;
private User user;

现在我尝试使用一些属性,正如我所见,它们也应该是 PascalCase ,这意味着如果我需要声明相同的示例,我将是:

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

你们都可以看到这里的问题是什么,或者你不认为这是一个问题?

所以我该怎么做?我在这里想念什么?

4

6 回答 6

12

C# 命名约定建议所有公共以及类、接口等都以大写字母开头。其余的应该以小写字母开头。

没有问题:

private User User { get; set; }

...因为每个名称(单词)的位置定义了什么是什么。英语的工作方式相同。例如:“我爱爱。” (代词、动词、名词)

于 2013-02-22T14:55:57.040 回答
4

您遇到的问题称为Color Color问题,因为它出现的最常见方式是“我需要一个称为Color类型的属性Color”。C# 专门设计用于Color Color优雅地管理情况。

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

情况的规则Color Color有点复杂(相信我,它们不会让编译器实现者的生活变得更轻松!)并且它们可能会导致一些有趣的极端情况。如果您对这个主题感兴趣,那么您应该阅读我的文章:

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

于 2013-02-22T15:32:42.900 回答
2

我认为在许多情况下,上下文意味着您将有一个特定的名称 - 例如 Car customersCar 等。话虽如此,很多人对名称/类型相同没有问题 - 请参阅此链接: 属性是否应该有与其类型同名?

对于一般的命名约定,遵循 MS 并不是一个糟糕的开始 - http://msdn.microsoft.com/en-gb/library/vstudio/ms229045(v=vs.100).aspx

于 2013-02-22T14:47:25.887 回答
1

除了@Evelie 指出的内部类问题之外,将属性命名为与类型相同的属性应该没有任何问题——事实上,这并不是一种不常见的做法。.NET 到处都有public Color Color属性。

如以下程序所示,编译器可以区分实例调用和静态调用:

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");
    }
}
于 2013-02-22T15:05:11.453 回答
1

那里没有问题。

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

编辑:好的,我假设您在 carclass 中有 Userclass,如下所示:

public class Car
{
    private class User
    {

    }

    private User User
    {
        get;
        set;
    }
}

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

public class Car
{

    private User User
    {
        get;
        set;
    }
}

public class User
{

}
于 2013-02-22T14:46:39.037 回答
1

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

作为一般的 Microsoft 样式指南,鼓励对属性使用 Pascal Case。

有关大写的更完整指南,请参阅以下MSDN 文章

于 2013-02-22T14:52:11.120 回答