2011-06-10 69 views
1

我在Web服務中有一些奇怪的代碼。未知常量SCALABILITYTESTING

#if SCALABILITYTESTING 
Random r = new Random(); 
#endif 

我在Google上做過幾次搜索,但沒有發現任何用處。該Web服務是用C#編寫的。它所在的項目有微軟單元測試。

很顯然,這是說如果這個變量是真的,然後創建一個新的隨機數,我的猜測是,當我運行微軟單元測試,然後觸發。

我以前沒見過這樣的東西,所以我想知道它是什麼。

我唯一的線索是下面的一段代碼,它位於頁面的最頂端。

//#define SCALABILITYTESTING 
#define SOAPSECURITY 
#define SOFTWAREFEATURES 

Visual Studio亮點#define

我不知道下面的stackoverflow問題是相關的,我的猜測是,這是類似於DEBUG和TRACE常量。

Define new compile-time constant in C# (for #if)

編輯 我發現它似乎與這些鏈接。
http://msdn.microsoft.com/en-us/library/yt3yck0x.aspx
http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

+0

「如果下面的stackoverflow問題是相關的。」 - 是的。您可以在屬性(對於所有項目)中的條件編譯符號字段中指定符號或在代碼中用#define指定符號。 – Reniuz 2011-06-10 11:46:59

回答

1

的問題是相關的,它類似於調試和跟蹤。這是一個條件編譯符號。這些可以在項目屬性中定義,或直接在#define的代碼中定義。
我假設開發人員定義了它,以改變他的測試或代碼本身的工作方式,以模擬多個用戶同時訪問Web服務 - 或類似的。

+0

謝謝你。您的意見與服務的使用方式以及我認爲開發人員推理的內容相符。 – 2011-06-10 11:41:11

1

這些是有條件編制符號並在C# Language Specification的第9.5節中定義。正如名稱所暗示的,如果某些編譯符號已定義或未定義,它允許您省略編譯某些代碼段。

從規格:

甲條件編譯符號具有 兩種可能的狀態:定義或 未定義。在源文件的 詞彙處理的開始,一個 條件編譯符號是 未定義除非它已經 由外部 機構(諸如命令行 編譯選項)明確定義。當處理#define 指令時,該指令中名爲 的 條件編譯符號在 中定義爲源文件。該符號仍然定義爲 ,直到處理相同符號的#undef指令 或 ,直到源文件的末尾達到 。暗示這是 , 程序中的#define和#undef指令在 中一個源文件對 中的其他源文件沒有影響。

有條件 編譯符號的名稱空間是不同的,並從所有其他命名實體 在C#程序 分開。有條件的 彙編符號只能在#define和#undef 指令和預處理 表達式中引用的 。

+0

感謝您的鏈接。 – 2011-06-10 11:45:50