2011-03-24 101 views
2

在這post喬恩Skeet指出,下面的代碼應該改變,以符合.NET命名約定。這樣做也會減少代碼中的噪音量。爲Enum值添加前綴的好處?

Enum enUtilityTypeDetailStudentEntryWorkflow As Integer 
    enUTDSEW_Default = 379 
    enUTDSEW_ApplicantRecordBook = 380 
End Enum 

我必須承認,我非常像一隻羊,在跟着別人在我面前做過的事。我認爲前綴看起來不正確,然後讓它兩次也沒有意義。 看過幾個.NET Framework示例後,它看起來會更接近標準。

Enum StudentEntryWorkflow As Integer 
    Default = 379 
    ApplicantRecordBook = 380 
End Enum 

我在使用這些名稱的商標嗎?
其他建議或意見一般?

回答

4

我不知道標準,但在枚舉和枚舉值上使用Hungarian notation並不是我以前見過的。

你的第二個例子更接近我通常看到的那種代碼,所以在這方面,是的,它更標準。

請參閱第8.2.3節關於this指南 - pascal外殼並且沒有前綴/後綴。

2.1節的指引16也表示避免前綴和後綴。

我會說這是非常普遍的 - 有點enums它的目的是爲了提高可讀性。使用前綴和後綴會降低可讀性,因此非常普遍不受歡迎。

3

在我工作的地方,我們也使用了一個用於枚舉的前綴(E在我們的例子中),我必須說我喜歡它。它使得發現Enum變得非常容易,並將它與類或變量區分開來。下面是我們的代碼庫的例子:

myJob.Status = EJobStatus.Completed 

在這裏,我們不難看出,這就是被分配到的工作狀態是「已完成」從枚舉「EJobStatus」的值。

我的個人偏好放在一邊,如果你想遵循.NET的命名約定,那麼沒有前綴枚舉。但最重要的是在給定的代碼庫中始終遵循相同的約定。

編輯:我剛纔看到你也加了實際的枚舉值的前綴,我們不這樣做。我們總是以這種方式引用枚舉ESomeEnum.SomeValue。在這種情況下,爲實際的枚舉值加前綴是沒有用的。另外,我不認爲爲enum名稱和枚舉值使用相同的前綴是個好主意,因爲它們不是同一個東西。

1

在VB.net中,我不相信你可以引用一個枚舉值,而不需要使用enum的名稱來表示它,所以用任何東西將枚舉值的名稱「加上」是完全多餘的。

即你不能使用
暗淡X = enUTDSEW_Default

即使你想,你就必須使用:

 dim x = enUtilityTypeDetailStudentEntryWorkflow.enUTDSEW_Default 

這僅僅是愚蠢的。

+2

實際上,如果將Enum添加到Imports語句中,您可以直接引用enum值... – 2011-03-24 19:23:03

+0

我不知道這一點。謝謝!雖然,我想知道這是否會被視爲最佳做法。我懷疑不會。 – DarinH 2011-03-28 15:39:33

+0

我不確定這是否是最佳做法。將Enum添加到Imports語句當然很奇怪,但同時它可以消除一些重複,例如「myObject.Color = Red」而不是「myObject.Color = Colors.Red」 – 2011-03-28 16:14:03

0

enum前綴可能來自C++程序員。在C++中enum名字是不是值的完全限定名稱的一部分:

class Class 
{ 
public: 
    enum Enum 
    { 
     Value1, 
     Value2 
    }; 
}; 

// Yes 
Class::Enum e = Class::Value1 

// No 
Class::Enum e = Class::Enum::Value1 

但.NET語法呼籲第二個版本。所以對於冗餘值名稱沒有任何好處。