जवाबों:
में C#
आप सच्चे वैश्विक चर को परिभाषित नहीं कर सकते हैं (इस अर्थ में वे किसी भी वर्ग से संबंधित नहीं हैं)।
यह कहा जा रहा है, इस सुविधा की नकल करने के लिए मुझे जो सबसे सरल तरीका पता है static class
, वह इस प्रकार है:
public static class Globals
{
public const Int32 BUFFER_SIZE = 512; // Unmodifiable
public static String FILE_NAME = "Output.txt"; // Modifiable
public static readonly String CODE_PREFIX = "US-"; // Unmodifiable
}
फिर आप अपने कोड में कहीं भी परिभाषित मान प्राप्त कर सकते हैं (बशर्ते वह उसी का हिस्सा हो namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
विभिन्न नामस्थानों से निपटने के लिए, आप या तो:
Globals
इसे बिना किसी वर्ग में शामिल किए एक विशिष्ट घोषित करें namespace
(ताकि इसे वैश्विक अनुप्रयोग नामस्थान में रखा जाए);namespace
।C # में ग्लोबल वैरिएबल जैसी कोई चीज नहीं है। अवधि।
यदि आप चाहते हैं तो आपके पास स्थैतिक सदस्य हो सकते हैं:
public static class MyStaticValues
{
public static bool MyStaticBool {get;set;}
}
static
आपके द्वारा प्रदान किए गए बहुत ही उदाहरण को वास्तव में एक वैश्विक संस्करण नहीं माना जा सकता है।
पहले जाँच करें कि क्या आपको वास्तव में अपने सॉफ्टवेयर आर्किटेक्चर पर विचार किए बिना इसका उपयोग करने के बजाय एक वैश्विक चर की आवश्यकता है।
मान लेते हैं कि यह परीक्षा उत्तीर्ण है। उपयोग के आधार पर, ग्लोबल्स को दौड़ की स्थिति और कई अन्य "बुरी चीजों" के साथ डिबग करना मुश्किल हो सकता है, यह उन कोणों से संपर्क करना सबसे अच्छा है जहां आप ऐसी बुरी चीजों को संभालने के लिए तैयार हैं। इसलिए,
static
क्लास (मैनगैबिलिटी के लिए) में लपेटें ।ऐसे वर्ग के लिए मूल रूपरेखा होगी:
public class Globals
{
private static bool _expired;
public static bool Expired
{
get
{
// Reads are usually simple
return _expired;
}
set
{
// You can add logic here for race conditions,
// or other measurements
_expired = value;
}
}
// Perhaps extend this to have Read-Modify-Write static methods
// for data integrity during concurrency? Situational.
}
अन्य वर्गों से उपयोग (एक ही नाम स्थान के भीतर)
// Read
bool areWeAlive = Globals.Expired;
// Write
// past deadline
Globals.Expired = true;
इसके लिए एक उपयोगी विशेषता है using static
जैसा कि दूसरों ने कहा है, आपको अपने ग्लोबल्स के लिए एक वर्ग बनाना होगा:
public static class Globals {
public const float PI = 3.14;
}
लेकिन आप इसे इस तरह से आयात कर सकते हैं ताकि इसके स्थिर गुणों के सामने वर्ग का नाम न लिखा जा सके:
using static Globals;
[...]
Console.WriteLine("Pi is " + PI);