簡體   English   中英

c#命名約定

[英]c# Naming Convention

我開始一個新項目,嘗試實現一些命名約定時遇到一些問題。

我曾經使用以大寫和單數開頭的類,例如Car或User,而我的變量以小寫開頭,所以如果我需要聲明一個包含一些Car和User類型的變量的類,我會這樣做:

public Car car;
private User user;

現在我正在嘗試使用一些屬性,並且我認為它們也應該是PascalCase,這意味着如果我需要聲明相同的示例,我將是:

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

你們都可以看到這里出了什么問題,或者您不認為這是一個問題?

所以我該怎么做? 我在這里想念什么?

C#命名約定建議所有公共內容以及類,接口等以大寫字母開頭。 其余應以小寫開頭。

沒問題:

private User User { get; set; }

...因為每個名稱(單詞)的位置定義了什么。 英語的工作方式相同。 例如:“我愛愛”。 (代詞,動詞,名詞)

您遇到的問題稱為“ 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

我認為在許多情況下,上下文意味着您將擁有一個特定的名稱-例如,“汽車客戶”,“汽車”等。也就是說,許多人在名稱/類型相同方面沒有問題-請參閱此鏈接: 屬性是否應具有與它的類型同名?

對於一般的命名約定,遵循MS並不是一個不好的開始-http://msdn.microsoft.com/zh-CN/library/vstudio/ms229045(v=vs.100).aspx

那里沒有問題。

因為在使用類的上下文中,不能將其誤認為該屬性,反之亦然。

編輯:好的,我要假設您在carclass內擁有Userclass,如下所示:

public class Car
{
    private class User
    {

    }

    private User User
    {
        get;
        set;
    }
}

確實會造成問題。 移出您的用戶,問題就解決了。

public class Car
{

    private User User
    {
        get;
        set;
    }
}

public class User
{

}

這里沒有問題。 正如@NDJ所建議的,如果您不滿意,可以應用上下文向屬性添加其他前綴。 但這通常不會在上下文中添加其他含義。

作為一般的Microsoft樣式指南,建議將Pascal Case用於屬性。

有關大寫的更完整指南,請參見以下MSDN文章

除@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");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM