मैं बहुत की तरह एक वर्ग को परिभाषित उपयोग करने के लिए शुरू कर दिया है:Defines.Debug बनाम #if डीबग
internal sealed class Defines
{
/// <summary>
/// This constant is set to true iff the define DEBUG is set.
/// </summary>
public const bool Debug =
#if DEBUG
true;
#else
false;
#endif
}
फायदे मैं देख रहा हूँ है:
- यह सुनिश्चित करता है मैं सामान नहीं टूटते साथ कि एक #if .. # else .. # endif संकलक द्वारा चेक नहीं किया जाएगा।
- मैं यह देखने के लिए एक खोज संदर्भ कर सकता हूं कि इसका उपयोग कहां किया जाता है।
- डीबग के लिए एक बूल रखना अक्सर उपयोगी होता है, परिभाषित करता है कि कोड लंबा/अधिक गन्दा है।
संभावित नुकसान मैं देख रहा हूँ: अगर परिभाषित वर्ग एक और विधानसभा में है
संकलक अप्रयुक्त कोड अनुकूलित नहीं कर सकते। यही कारण है कि मैंने आंतरिक बना दिया है।
क्या मुझे कोई अन्य नुकसान याद आ रहा है?
[संपादित करें] उपयोग के विशिष्ट उदाहरण:
private readonly Permissions _permissions = Defines.Debug ? Permissions.NewAllTrue()
: Permissions.NewAllFalse();
या:
var str = string.Format(Defines.Debug ? "{0} {1} ({2})" : "{0} {1}", actual, text, advance);
क्या आपने ['ConditionalAttribute'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx) को देखा है? – Oded
@ ओडेड धन्यवाद, मैंने सामान्य उदाहरणों को जोड़ा है, केवल एकल विधियों में छोटे बदलाव, पूरे विधियों या कक्षाओं को नहीं, जो सशर्त एट्रिब्यूट सूट हैं, या मुझे इन आलसी के लिए दो तरीकों को परिभाषित नहीं करना चाहिए? – weston
क्या होता है यदि इसमें असेंबली 'डीबग' में बनाई गई है लेकिन इसका संदर्भ देने वाले लोग 'रिलीज' में बने हैं? – Oded