मैं नीचे करना चाहूंगा लेकिन C ++ के बजाय C # में
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
मैं नीचे करना चाहूंगा लेकिन C ++ के बजाय C # में
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
जवाबों:
मैं आपको सशर्त गुण का उपयोग करने की सलाह दूंगा !
अपडेट: 3.5 साल बाद
आप #ifइस तरह का उपयोग कर सकते हैं ( उदाहरण MSDN से कॉपी किया गया ):
// preprocessor_if.cs
#define DEBUG
#define VC_V7
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !VC_V7)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
Console.WriteLine("DEBUG and VC_V7 are defined");
#else
Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
}
}
केवल तरीकों के कुछ हिस्सों को छोड़कर उपयोगी है।
यदि तुम प्रयोग करते हो #if किसी विधि को संकलन से बाहर लिए करते हैं तो आपको कोड के सभी टुकड़ों को संकलन से बाहर करना होगा जो उस पद्धति को भी कहते हैं (कभी-कभी आप कुछ कक्षाओं को रनटाइम पर लोड कर सकते हैं और आपको कॉलर को "सभी संदर्भ खोजें" नहीं मिल सकता है)। अन्यथा त्रुटियां होंगी।
यदि आप दूसरी ओर सशर्त संकलन का उपयोग करते हैं तो आप अभी भी कोड के सभी टुकड़ों को छोड़ सकते हैं जो विधि को कहते हैं। सभी पैरामीटर अभी भी कंपाइलर द्वारा मान्य किए जाएंगे। विधि को केवल रनटाइम पर नहीं बुलाया जाएगा । मुझे लगता है कि यह तरीका सिर्फ एक बार छिपाने के लिए बेहतर है और इसे कॉल करने वाले सभी कोड को नहीं निकालना है। आपको उन विधियों पर सशर्त विशेषता का उपयोग करने की अनुमति नहीं है जो मान लौटाते हैं - केवल शून्य विधियों पर। लेकिन मुझे नहीं लगता कि यह एक बड़ी सीमा है क्योंकि यदि आप उपयोग करते हैं#if एक ऐसी विधि का करते हैं जो एक मूल्य देता है तो आपको कोड के सभी टुकड़ों को छिपाना होगा जो आपको कॉल भी करते हैं।
यहाँ एक उदाहरण है:
// कॉलिंग Class1.ConditionalMethod () रनटाइम पर ध्यान नहीं दिया जाएगा
// जब तक DEBUG स्थिरांक को परिभाषित नहीं किया जाता है
System.Diagnostics का उपयोग करना;
वर्ग class1
{
[सशर्त ( "डीबग")]
सार्वजनिक स्थैतिक शून्य ConditionalMethod () {
Console.WriteLine ("एक्ज़ीक्यूटेड क्लास 1। कोंडिशनल मैथोड");
}
}
सारांश:
मैं #ifdefC ++ में उपयोग करूंगा लेकिन C # / VB के साथ मैं सशर्त विशेषता का उपयोग करूंगा। इस तरह से आप विधि की परिभाषा को छिपाने के लिए कोड के टुकड़ों को छिपाने के लिए बिना इसे कहते हैं। कॉलिंग कोड अभी भी संकलित है और संकलक द्वारा मान्य है, विधि को रनटाइम पर नहीं कहा जाता है। आप #ifनिर्भरता से बचने के लिए उपयोग करना चाह सकते हैं क्योंकि सशर्त विशेषता के साथ आपका कोड अभी भी संकलित है।
C # में प्रीप्रोसेसर है। यह C ++ और C की तुलना में थोड़ा अलग तरीके से काम करता है।
यहाँ एक MSDN लिंक है - सभी प्रीप्रोसेसर निर्देशों पर अनुभाग ।