2009-07-10 8 views
7

यहां एक सवाल है कि मेरे पास कुछ समय था लेकिन वास्तव में पूछने के लिए कभी नहीं मिला ...नेट :: डिजाइनर फ़ाइलों में वैश्विक :: क्या मतलब है?

विज़ुअल स्टूडियो कुछ रूपों को उत्पन्न करता है जो विजुअल स्टूडियो कुछ चर उत्पन्न करता है वैश्विक :: कैन के साथ प्रीफ़िक्स किया गया है कोई यह बताता है कि इसका क्या अर्थ है, यह उपसर्ग क्या करता है और मुझे इसका उपयोग कहां करना चाहिए?

उत्तर

12

वैश्विक नामस्थान योग्यता आपको वैश्विक ("खाली") नामस्थान में किसी सदस्य तक पहुंचने की अनुमति देती है।

यदि आप MyNamespace.MyClass.DoSomething()) के बजाय एक अयोग्य प्रकार (उदा। MyClass.DoSomething() को कॉल करना चाहते हैं, तो यह वर्तमान नामस्थान में माना जाता है। फिर आप यह कहने के लिए योग्य कैसे हैं कि यह वैश्विक/खाली नामस्थान में है?

इस कोड नमूने (सांत्वना एप्लिकेशन) अपने व्यवहार को वर्णन करना चाहिए:

using System; 

namespace MyNamespace 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      MessageWriter.Write();   // writes "MyNamespace namespace" 
      global::MessageWriter.Write(); // writes "Global namespace" 
      Console.ReadLine(); 
     } 
    } 

    // This class is in the namespace "MyNamespace" 
    public class MessageWriter 
    { 
     public static void Write() 
     { 
      Console.WriteLine("MyNamespace namespace"); 
     } 
    } 
} 

// This class is in the global namespace (i.e. no specified namespace) 
public class MessageWriter 
{ 
    public static void Write() 
    { 
     Console.WriteLine("Global namespace"); 
    } 
} 
+0

यह सवाल का जवाब क्यों नहीं देता है। जनरेटेड कोड नामस्थानों में घोषित प्रकारों का उपयोग करता है और अभी भी वैश्विक :: का उपयोग किया जाता है। –

+0

@Ihar: ग्लोबल का उपयोग इस तरह निर्दिष्ट करने के लिए किया जाता है कि नामस्थान एक उपनामस्थान नहीं होना चाहिए ... –

+0

नहीं - प्रश्न तीन चीजें पूछता है: इसका क्या अर्थ है (समझाया गया), यह उपसर्ग क्या है (समझाया गया) और जहां मैं इसका उपयोग करना चाहिए (जिसे आप दो अन्य बिंदुओं को समझने के बाद जान लेंगे)। आपका प्रश्न - "यह डिजाइनर फाइलों में क्यों प्रयोग किया जाता है" मूल प्रश्नकर्ता द्वारा नहीं पूछा गया था। –

1

here

जब बाईं पहचानकर्ता वैश्विक है, सही पहचानकर्ता ग्लोबल नेम स्पेस में शुरू होता है के लिए खोज से।

+0

जो उत्तर सही करने के लिए इंगित करता है। –

4

उपसर्ग वैश्विक नामस्थान इंगित करता है।

namespace Bar { 
    class Gnat { } 
} 
namespace Foo { 
    namespace Bar { 
    class Gnat { } 
    } 
    class Gnus { 
    Bar.Gnat a; // Foo.Bar.Gnat 
    global::Bar.Gnat b; // Bar.Gnat 
    } 
} 

नोट कैसे सदस्य एक शायद inadvertedly Foo.Bar.Gnat वर्ग को दर्शाता है: यहाँ एक उदाहरण है। इस से बचने के लिए वैश्विक :: उपसर्ग का उपयोग करें।

+0

यह जेनरेट कोड से कैसे संबंधित है? वैश्विक नामस्थानों से आमतौर पर .NET डिजाइनर कक्षाओं में संदर्भित नहीं होते हैं। –

+0

कोड जनरेटर कक्षा Bar.Gnat का संदर्भ देना चाहता है। यदि फू नामस्थान के अंदर कोड उत्पन्न होता है तो कक्षा Foo.Bar.Gnat का संदर्भ तब तक किया जाता है जब तक कि वैश्विक :: उपसर्ग का उपयोग नहीं किया जाता है। कोड जनरेटर जेनरेट कोड को इस गलती से सुरक्षित रखना चाहता है। यह थोड़ा सा भयावह है, लेकिन फिर भी सही काम करने के लिए, और शायद एक आंतरिक माइक्रोसॉफ्ट मानक है। –

3

वैश्विक :: नाम स्थान क्वालीफायर नेस्ट नामस्थान के माध्यम से हल करने प्रकार में टक्कर रोकने के लिए स्वत: जनरेट किया में प्रयोग किया जाता है।

संबंधित मुद्दे