標籤:inter .net set 劃線 自己 price body 問題 開發人員
建議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:有條件地使用首碼