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

建議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個建議》陸敏技

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章