कहाँ या कब कोई नाम स्थान का उपयोग करेगा जैसे अलियासिंग
using someOtherName = System.Timers.Timer;
यह मुझे लगता है कि यह भाषा को समझने के लिए और अधिक भ्रम को जोड़ देगा।
कहाँ या कब कोई नाम स्थान का उपयोग करेगा जैसे अलियासिंग
using someOtherName = System.Timers.Timer;
यह मुझे लगता है कि यह भाषा को समझने के लिए और अधिक भ्रम को जोड़ देगा।
using int = System.Int32
, और इसे घोषित फ़ाइल के अलावा अन्य स्थानों पर उपयोग कर सकते हैं। इस तो int
करने के लिए Int32
उर्फ या तो किसी और तरीके से प्राप्त किया जा सकता है, या संकलक / क्रम में एक विशेष बात है।
using int = System.Int32
में आपका तर्क गलत और भ्रामक है - यह गलत है क्योंकि int
उपनाम आपके द्वारा बताए गए तरीके को लागू नहीं करता है। यह भ्रामक है क्योंकि आप एलियास टाइप करते हैं, विश्व स्तर पर इस्तेमाल किया जा सकता है, जैसे कि कैसे int
उपयोग किया जाता है Int32
।
जवाबों:
यह एक प्रकार का उपनाम है, एक नाम स्थान उपनाम नहीं; यह अवहेलना करने के लिए उपयोगी है - उदाहरण के लिए, के खिलाफ:
using WinformTimer = System.Windows.Forms.Timer;
using ThreadingTimer = System.Threading.Timer;
(पीएस: की पसंद के लिए धन्यवाद Timer
।- पी )
अन्यथा, यदि आप दोनों का उपयोग करते हैं System.Windows.Forms.Timer
और System.Timers.Timer
एक ही फाइल में आपको पूरा नाम देना होता है (क्योंकि Timer
भ्रमित किया जा सकता है)।
यह extern
अलग-अलग विधानसभाओं से एक ही पूरी तरह से योग्य प्रकार के नाम के साथ उपनामों का उपयोग करने के लिए एक हिस्सा भी निभाता है - दुर्लभ, लेकिन समर्थित होने के लिए उपयोगी है।
वास्तव में, मैं एक और उपयोग देख सकता हूं: जब आप एक प्रकार की त्वरित पहुंच चाहते हैं, लेकिन एक नियमित उपयोग नहीं करना चाहते हैं using
क्योंकि आप कुछ परस्पर विरोधी विस्तार विधियों को आयात नहीं कर सकते हैं ... थोड़ा जटिल, लेकिन ... यहां एक उदाहरण है ...
namespace RealCode {
//using Foo; // can't use this - it breaks DoSomething
using Handy = Foo.Handy;
using Bar;
static class Program {
static void Main() {
Handy h = new Handy(); // prove available
string test = "abc";
test.DoSomething(); // prove available
}
}
}
namespace Foo {
static class TypeOne {
public static void DoSomething(this string value) { }
}
class Handy {}
}
namespace Bar {
static class TypeTwo {
public static void DoSomething(this string value) { }
}
}
System.Timers.Timer
;-p
मैं इसका उपयोग तब करता हूं जब मुझे परस्पर विरोधी उप नामस्थान और / या ऑब्जेक्ट नाम के साथ कई नामस्थान मिले हैं, जैसे आप [उदाहरण के रूप में] कुछ कर सकते हैं:
using src = Namespace1.Subspace.DataAccessObjects;
using dst = Namespace2.Subspace.DataAccessObjects;
...
src.DataObject source = new src.DataObject();
dst.DataObject destination = new dst.DataObject();
जिसे अन्यथा लिखना होगा:
Namespace1.Subspace.DataAccessObjects.DataObject source =
new Namespace1.Subspace.DataAccessObjects.DataObject();
Namespace2.Subspace.DataAccessObjects.DataObject dstination =
new Namespace2.Subspace.DataAccessObjects.DataObject();
यह एक टन टाइपिंग बचाता है और कोड को पढ़ने में बहुत आसान बनाने के लिए उपयोग किया जा सकता है।
उल्लिखित उदाहरणों के अलावा, बार-बार जेनेरिक प्रकारों का जिक्र करते हुए टाइप उपनाम (बजाय नाम स्थान उपनाम) से काम लिया जा सकता है:
Dictionary<string, SomeClassWithALongName> foo = new Dictionary<string, SomeClassWithALongName>();
private void DoStuff(Dictionary<string, SomeClassWithALongName> dict) {}
बनाम:
using FooDict = Dictionary<string, SomeClassWithALongName>;
FooDict foo = new FooDict();
private void DoStuff(FooDict dict) {}
संक्षिप्तता।
ऐसे नामस्थानों के बीच स्पष्टता प्रदान करने के लिए फ्रिंज लाभ हैं जो प्रकार के नाम साझा करते हैं, लेकिन अनिवार्य रूप से यह सिर्फ चीनी है।
यह बहुत उपयोगी है जब आपके पास एकाधिक नामांकित नामों में एक ही नाम के साथ कई कक्षाएं हैं। उदाहरण के लिए...
namespace Something.From.SomeCompanyA {
public class Foo {
/* ... */
}
}
namespace CompanyB.Makes.ThisOne {
public class Foo {
/* ... */
}
}
संकलक को खुश करने के लिए और आपकी टीम पर आपके और अन्य लोगों के लिए चीजों को स्पष्ट करने के लिए आप उपनाम का उपयोग कर सकते हैं:
using CompanyA = Something.From.CompanyA;
using CompanyB = CompanyB.Makes.ThisOne;
/* ... */
CompanyA.Foo f = new CompanyA.Foo();
CompanyB.Foo x = new CompanyB.Foo();
हमने अपने सभी नामस्थानों के लिए नाम स्थान उपनामों को परिभाषित किया है। यह यह देखना बहुत आसान बनाता है कि एक वर्ग कहां से आता है, जैसे:
using System.Web.WebControls;
// lots of other using statements
// contains the domain model for project X
using dom = Company.ProjectX.DomainModel;
// contains common web functionality
using web = Company.Web;
// etc.
तथा
// User from the domain model
dom.User user = new dom.User();
// Data transfer object
dto.User user = new dto.User();
// a global helper class
utl.SomeHelper.StaticMethod();
// a hyperlink with custom functionality
// (as opposed to System.Web.Controls.HyperLink)
web.HyperLink link = new web.HyperLink();
हमने कुछ दिशा-निर्देशों को परिभाषित किया है कि कैसे उपनामों का नाम होना चाहिए और हर कोई उनका उपयोग कर रहा है।
मुझे इकाई परीक्षण में उपनाम बहुत उपयोगी लगते हैं। जब आप इकाई परीक्षण लिख रहे हैं, तो विषय को परीक्षा के रूप में घोषित करना एक आम बात है
MyClass myClassUT;
myClassUT
विषय यू nder टी स्था। होने के नाते , लेकिन क्या होगा यदि आप स्थिर तरीकों के साथ एक स्थिर वर्ग के लिए इकाई परीक्षण लिखना चाहते हैं? तो आप इस तरह से एक उपनाम बना सकते हैं:
using MyStaticClassUT = Namespace.MyStaticClass;
फिर आप इस तरह से अपने यूनिट टेस्ट लिख सकते हैं:
public void Test()
{
var actual = MyStaticClassUT.Method();
var expected = ...
}
और आप परीक्षण के अधीन विषय क्या है की ढीली दृष्टि कभी नहीं।
एक तरह से विजुअल स्टूडियो में कोडिंग करते समय यह वास्तव में आसान है।
उपयोग-मामला : मान लीजिए कि मैं SqlConnection
नाम मात्र के कुछ वर्गों जैसे उदाहरण के लिए उपयोग करना चाहता हूँ System.Data
। सामान्य पाठ्यक्रम में मैं System.Data.SqlClient
* .cs फ़ाइल के शीर्ष पर नाम स्थान का आयात करूँगा जैसा कि नीचे दिखाया गया है:
using System.Data;
अब मेरी अक्ल देखो। यह कोड संपादक में टाइप करते समय चुनने के लिए बहुत सारी कक्षाओं के साथ भारी रूप से प्रफुल्लित है। मैं कक्षाओं के पूरे समूह का उपयोग नहीं करने जा रहा हूँ:
इसलिए मैं अपने * .cs फ़ाइल के शीर्ष पर एक अन्य नाम का उपयोग करूंगा और एक स्पष्ट जानकारी प्राप्त करूंगा:
using SqlDataCon = System.Data.SqlClient.SqlConnection
अब मेरे अंतर्मुखी दृश्य को देखो। यह सुपर-क्लियर और सुपर-क्लीन है।
एक कारण मुझे पता है; जब आप आयातित नेमस्पेस से नाम टकराव करते हैं तो यह आपको छोटे नामों का उपयोग करने देता है। उदाहरण:
यदि आपने घोषित किया using System.Windows.Forms;
और using System.Windows.Input;
जब आप एक्सेस करने जाते हैं तो उसी फ़ाइल में आप ModifierKeys
पाते हैं कि नाम और नाम ModifierKeys
दोनों जगह है । घोषणा के द्वारा तो आप तो प्राप्त कर सकते हैं के माध्यम से ।System.Windows.Forms.Control
System.Windows.Input
using Input = System.Windows.Input;
System.Windows.Input.ModifierKeys
Input.ModifierKeys
मैं सी # बफ नहीं हूं लेकिन अलियासिंग नेमस्पेस मुझे "बेस्ट प्रैक्टिस" की तरह लगता है। इस तरह आप जानते हैं कि आप क्या कर रहे हैं और अभी भी बहुत अधिक टाइप करने की जरूरत नहीं है।
आप किसी कोड को बहुत आसानी से संशोधित करने के लिए उनका उपयोग कर सकते हैं।
उदाहरण के लिए:
#if USE_DOUBLES
using BNumber = System.Double;
#else
using BNumber = System.Single;
#endif
public void BNumber DoStuff(BNumber n) {
// ...
}
public void BNumber DoStuff2(BNumber n) {
// ...
}
public void BNumber DoStuff3(BNumber n) {
// ...
}
निर्देश के साधारण परिवर्तन से आप यह तय कर सकते हैं कि आपका पूरा कोड काम करता है float
या नहीं double
।
using int = System.Int32
सी #? उपयोगी है, है ना? इसका वही उपयोग जो अन्यत्र किया जा सकता है।