2009-08-21 13 views
13
namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Text.MyCustom mc = new System.Text.MyCustom(); 
     } 
    } 
} 

namespace System.Text 
{ 
    public class MyCustom { } 
} 

मैं कैसे VB में ऐसा करते हैं, जबकि आवेदन पत्र में एक जड़ नाम स्थान होने करते हैं, संभव है?क्या वीबी में रूट नेमस्पेस से बचने का कोई तरीका है?

अद्यतन: उत्तरों के मुताबिक मुझे लगता है कि ऐसा करने का कोई तरीका नहीं है। मैंने माइक्रोसॉफ्ट कनेक्ट को एक फीचर सुझाव पोस्ट किया: Please vote

+1

आप एप्लिकेशन के रूट रूटस्पेस को हटाए बिना ऐसा नहीं कर सकते हैं। जो भी आप चाहते हैं उसे हासिल करने का एकमात्र तरीका रूट नेमस्पेस को हटाना है, और स्पष्ट रूप से कोड में हर जगह नेमस्पेस सेट करना है। सी # प्रोजेक्ट में आपके पास रूट नेमस्पेस नहीं है, केवल डिफ़ॉल्ट नेमस्पेस है, जो वास्तव में आप यहां पूछ रहे हैं। क्षमा करें, यह VB.NET और C# के बीच अंतरों में से एक है। – awe

+2

भय के लिए: यह नीचे एक उत्तर होना चाहिए .. – Colin

उत्तर

13

वीएस 2012 के वीबीएनईटी में यह पुरानी समस्या तय की गई है। इस संस्करण के साथ शुरुआत से आप रूट नेमस्पेस से अग्रणी global के साथ बच सकते हैं। निम्नलिखित कोड वीएस 2010 में खराब है और वीएस 2012 में सही है:

Imports Tools 

Module Module1 
    Sub Main() 
     SayHello() 
    End Sub 
End Module 

Namespace Global.Tools 
    Module TestModule 
     Sub SayHello() 
      Console.Out.WriteLine("Hello") 
     End Sub 
    End Module 
End Namespace 
+1

यह [कनेक्ट पर मेरा सुझाव] था (https://connect.microsoft.com/VisualStudio/feedback/details/484455/allow-escaping-root-namespaces-in-vb), मुझे बहुत गर्व है कि यह स्नातक हो गया !! – Shimmy

0

VB.NET में एक नाम स्थान सेट करना काफी बस VB.NET वाक्य रचना के साथ सी # में एक नाम स्थान घोषित करने के समान है,! दुर्भाग्यवश रूट नेमस्पेस हमेशा मौजूद है इसलिए घोषित किए गए किसी भी नए नामस्थान रूट नेमस्पेस के अंदर होंगे।

Namespace ConsoleApplication1 
    Class Program 
    Private Shared Sub Main(ByVal args As String()) 
     Dim mc As New System.Text.MyCustom() 
    End Sub 
    End Class 
End Namespace 

Namespace System.Text 
    Public Class MyCustom 
    End Class 
End Namespace 

ऊपर कोड आप निम्नलिखित अगर जड़ नाम स्थान Test है दे देंगे। टिप्पणियाँ लोगों के लिए

Test.ConsoleApplication1
Test.System.Text


चीयर्स, स्मृति पर पोस्ट किया गया था!

+1

आपने जो लिखा है उसे आजमाएं, फिर ऑब्जेक्ट ब्राउज़र में जाएं और इसे देखें। – Shimmy

+1

इसे कंसोल एप्लिकेशंस 1.System.Text में जोड़ा जा रहा है, सी # के विपरीत। बेशक, मैं रूट-नेमस्पेस को शून्य पर सेट कर सकता हूं, लेकिन यह वही नहीं है जो मैं चाहता हूं। – Shimmy

+1

इसके अलावा, मुझे लगता है कि 'प्रोग्राम' क्लास उपरोक्त उदाहरण में नामस्थान' ConsoleApplication1.ConsoleApplication1' में रहता है (हालांकि इसके पास सत्यापित करने के लिए मेरे पास vb.net वातावरण नहीं है)। –

5

मुझे लगता है कि दुख की बात सच आप नहीं कर सकते कि है। नामस्थान को रूट नेमस्पेस में जोड़ा गया है। The documentation किसी भी भागने वाली तंत्र का कोई संकेत नहीं देता है। नामस्थानों के संबंध में Global कीवर्ड का उपयोग करने के बारे में एक नोट है, लेकिन मैं पाठ के उस हिस्से को समझता हूं कि उन्हें घोषित करने के बजाय नामस्थानों का संदर्भ कैसे दिया जाए।

1

एक नज़र इस सवाल लें: Possible to override VB.NET root namespace?

लब्बोलुआब यह है कि अपने ही एकमात्र विकल्प डिफ़ॉल्ट नाम स्थान परियोजना गुण रिक्त छोड़ दें और फिर नाम स्थान बयानों में अपनी कक्षा/मॉड्यूल परिभाषाओं के सभी रैप करने के लिए है।

0

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

सी # परियोजनाओं के लिए, प्रोजेक्ट गुणों में समान सेटिंग, केवल डिफ़ॉल्ट नामस्थान है, जो ओवरराइड है आप कोड में नेमस्पेस निर्दिष्ट करते हैं। वीबी परियोजनाओं के लिए यह शीर्ष स्तर का नामस्थान निर्दिष्ट करता है, डिफ़ॉल्ट नहीं ....

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

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