ConditionalAttribute
वर्ग पर प्रलेखन के अनुसार:क्या सशर्त एट्रिब्यूट पूरी लाइनों को बाहर निकालना है, या सिर्फ विधि कॉल?
एक विधि के लिए ConditionalAttribute लागू करने compilers कि विधि करने के लिए एक कॉल नहीं किया जा माइक्रोसॉफ्ट मध्यवर्ती भाषा (MSIL) में संकलित किया जाना चाहिए करने के लिए इंगित करता है जब तक सशर्त संकलन प्रतीक जो सशर्त एट्रिब्यूट के साथ से जुड़ा हुआ है परिभाषित किया गया है।
मेरे लिए यह कह रहा है कि Conditional
विशेषता केवल व्यक्तिगत विधि कॉल स्तर पर व्यवहार को बदल देती है।
class InstanceType
{
public InstanceType DoSideEffects()
{
Console.WriteLine("Side effects!");
return this;
}
public InstanceType DoMoreSideEffects()
{
Console.WriteLine("More side effects!");
return this;
}
[Conditional("DEBUG")]
public void ConditionalMethod()
{
Console.WriteLine("Conditional method run.");
}
}
class Program
{
static void Main()
{
var x = new InstanceType();
// The compiler appears to strip out this entire line
// in a Release build.
x.DoSideEffects().DoMoreSideEffects().ConditionalMethod();
var y = new InstanceType();
// When each method call appears on its own line,
// the first two methods are included as expected.
y.DoSideEffects();
y.DoMoreSideEffects();
y.ConditionalMethod();
}
}
डीबग के आउटपुट की तुलना करें और रिलीज बनाता है:
DEBUG RELEASE Side effects! Side effects! More side effects! More side effects! Conditional method run. Side effects! More side effects! Conditional method run.
इस व्यवहार कहीं निर्दिष्ट है लेकिन निम्नलिखित कोड का टुकड़ा पर विचार? मैंने सोचा था कि दोनों निर्माणों को "सशर्त विधि चलाने" पढ़ने वाली रेखाओं को छोड़कर एक ही आउटपुट होना चाहिए था।
'की [सशर्त] मेरी समझ' तुम्हारा के रूप में ही है, और मुझे लगता है कि आप यहां अनुकूलन के प्रभाव को देख रहे हैं। आईएल रिलीज मोड में कैसा दिखता है? –
दिलचस्प रूप से पर्याप्त, यहां तक कि विजुअल स्टूडियो (या यह रीशर्पर है?) यदि आप DEBUG को परिभाषित नहीं करते हैं तो पहले मामले में पूरी लाइन ग्रे/अप्रयुक्त रंगों को रंग दें। जबकि दूसरे में, यह केवल ConditionalMethod() ग्रे/अप्रयुक्त कॉल को कॉल करता है। –
संभावित डुप्लिकेट [.NET की सशर्त विशेषता क्यों साइड-इफेक्ट्स को हटाया जा सकता है?] (Http://stackoverflow.com/questions/410865/why-does-nets-conditional-attribute-cause-side-effects-to -बे-हटाया गया) –