2010-10-21 12 views
6

एमएसडीएन पर मैं यह पढ़ सकता हूं कि यह क्या करता है, लेकिन मैं जानना चाहता हूं कि यह तकनीकी रूप से क्या करता है (कंपाइलर को कहां देखना है ..)? मेरा मतलब है निर्देश के रूप में उपयोग करना।उपयोग निर्देश क्या करता है, बिल्कुल?

उत्तर

8

using निर्देश का प्राथमिक कार्य उपयोगकर्ता नाम के योग्यता के बिना उपलब्ध नामस्थान के भीतर प्रकार बनाना है। यह नामस्थानों और प्रकारों के सेट को संदर्भित करता है जिन्हें संदर्भित असेंबली में परिभाषित किया गया है और परियोजना संकलित की जा रही है। उदाहरण के लिए

लें MyTypes.Dll

namespace MyTypes { 
    class Class1 {} 
} 

में निम्नलिखित परिभाषा अब एक अलग नाम स्थान के साथ एक अन्य परियोजना से MyTypes.dll संदर्भ दे। एक निर्देश का उपयोग कर Class1 बनाने के लिए बिना मैं नाम

MyTypes.Class1 local1 = new MyTypes.Class1(); 

using निर्देश मुझे इस योग्यता को दूर करने देता

using MyTypes; 
... 
Class1 local1 = new Class1(); 
+0

भी, यदि ऐप नेमस्पेस के भीतर प्रकार नहीं मिलता है, तो कंपाइलर उपयोग करके शामिल नामस्थानों के माध्यम से खोज करेगा, है ना? आम मामले के लिए – Loj

+1

@Mojmi हां। नाम लुकअप वास्तव में काफी जटिल है और मैंने विशेष रूप से इस पर टिप्पणी नहीं की कि यह उच्च संभावना के कारण कैसे काम करता है कि मुझे मजेदार विवरण गलत लगेगा। – JaredPar

0

using संकलक को सूचित करता है जो फ़ाइल में उपयोग किए गए नामों की खोज करने के लिए नेमस्पेस को निर्दिष्ट करता है लेकिन फ़ाइल में परिभाषित नहीं किया जाता है।

2

@ JaredPar के जवाब सही है, फिर भी मैं यह है कि जोड़ना चाहते हैं अर्हता प्राप्त करने की आवश्यकता है जावा में import कहने के समान ही काम नहीं करता है। (कोई मुझे सही कर अगर मैं जावा के import वास्तव में यह स्मृति में आयात करने के बारे में गलत हूँ)

लेकिन यह वास्तव में आप जब तक मेमोरी में लोड नहीं कर रहा है आप या तो एक DLL या आदेश भी using उपयोग करने में सक्षम होने के लिए परियोजना संदर्भ शामिल करने की ज़रूरत असेंबली में एक विधि/संपत्ति/कुछ में कॉल करें। तो आपके पास using System.Linq; हो सकता है लेकिन यदि आप वास्तव में किसी भी लिंक विधि का उपयोग नहीं करते हैं, तो लिंक असेंबली कभी लोड नहीं होती है। (मैं 100% सकारात्मक नहीं हूं कि लिंकक अपनी भौतिक असेंबली में है क्योंकि नामस्थान और असेंबली 1: 1 नहीं हैं, लेकिन उदाहरण के लिए मुझे लगता है कि यह है)

0

बस कंपाइलर को जाने के लिए बताएं असेंबली की कॉन्फ़िगरेशन फ़ाइल में और दिए गए नाम के साथ एक विशिष्ट डीएलएल की खोज करें, यदि डीएलएल पाया जाता है तो यह उस परियोजना को वर्तमान परियोजना में जोड़ता है। स्मृति में साझा स्थान में डीएलएल एक-दूसरे से बात करने के लिए सिर्फ एक लिंक ऑपरेशन का उपयोग करना है। यहां नीचे दिया गया व्यक्ति सही है