1. 程式人生 > >【轉】編寫高質量代碼改善C#程序的157個建議——建議134:有條件地使用前綴

【轉】編寫高質量代碼改善C#程序的157個建議——建議134:有條件地使用前綴

劃線 set 嘗試 開發 amp 保持 規則 bsp ask

建議134:有條件地使用前綴

在.NET的設計規範中,不建議使用前綴。但是,即便是微軟自己依然廣泛的使用這前綴。

最典型的前綴是m_,這種命名一方面是考慮到歷史沿革中的習慣問題,另一方面也許我們確實有必要這麽做。

在一個不是很龐大的類型中,我們確實不應該使用任何前綴。各類設計規範也總建議我們保持一個嬌小的類型,但是往往事與願違,大類型常常存在。以Task為例,它有2000多行代碼。在這種類型中,如果不使用前綴,我們很難區分一個類型是實例變量還是靜態變量,或者是一個const變量。

最常見的做法是:

前綴m_,表示這是一個實例變量。

前置s_,表示這是一個靜態變量。

註意,有時候,如果類型只有實例變量或者只有靜態變量,我們也直接使用前綴,以區別該變量不是一個局部變量。

而const變量則常常使用名詞加下劃線的表示方法,如:

internal const int TASK_STATE_CANCELED=0x400000;

記住,前綴僅限於此,匈牙利命名法中的其他規則(如用類型名做前綴)是絕對要禁止的。

一個正確使用前綴的示例如下:

    class SampleClass
    {
        private static int s_price;
        private int m_price;
        private const int BASED_PRICE = 1000;

        public static void SetStaticField(int
price) { s_price = price; } public void SetClassField(int price) { m_price = price; } } class SampleClass2 { private int _price; public void SetPrice(int price) { _price = price; } }

在這個例子中,我們知道,即使類型本身不是很長,但是存在方法參數和類型實例變量重名的情況下,為實例變量或者靜態變量使用前綴也是必要的。

一個濫用前綴的實例如下:

    class SampleClass
    {
        private int int_price;

        public void SetPrice(int price)
        {
            int_price = price;
        }
    }

在這個例子中,開發者嘗試為price指定一個前綴int,試圖通過命名指出變量是int類型。但是,對於一門強類型語言來說,這是沒有必要的。

轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技

【轉】編寫高質量代碼改善C#程序的157個建議——建議134:有條件地使用前綴