StyleCop प्रलेखन के अनुसार:
SA1200 :DDirectivesMustBePlacedWithinNamespace
कारण AC # निर्देश का उपयोग करते हुए नाम स्थान तत्व के बाहर रखा गया है।
नियम विवरण इस नियम का उल्लंघन तब होता है जब किसी निर्देश या उपयोग-उर्फ निर्देश को किसी नेमस्पेस तत्व के बाहर रखा जाता है, जब तक कि फ़ाइल में कोई नामस्थान तत्व न हों।
उदाहरण के लिए, निम्न कोड के परिणामस्वरूप इस नियम के दो उल्लंघन होंगे।
using System;
using Guid = System.Guid;
namespace Microsoft.Sample
{
public class Program
{
}
}
हालाँकि, निम्न कोड इस नियम के किसी भी उल्लंघन का परिणाम नहीं होगा:
namespace Microsoft.Sample
{
using System;
using Guid = System.Guid;
public class Program
{
}
}
यह कोड बिना संकलक त्रुटियों के, साफ-सुथरा संकलन करेगा। हालांकि, यह स्पष्ट नहीं है कि गाइड प्रकार का कौन सा संस्करण आवंटित किया जा रहा है। यदि निर्देश का उपयोग नामस्थान के अंदर ले जाया जाता है, जैसा कि नीचे दिखाया गया है, एक संकलक त्रुटि होगी:
namespace Microsoft.Sample
{
using Guid = System.Guid;
public class Guid
{
public Guid(string s)
{
}
}
public class Program
{
public static void Main(string[] args)
{
Guid g = new Guid("hello");
}
}
}
कोड निम्न कंपाइलर त्रुटि पर विफल रहता है, जिसमें लाइन युक्त पाया जाता है Guid g = new Guid("hello");
CS0576: Namespace 'Microsoft.Sample' में उपनाम 'गाइड' के साथ एक परिभाषा है।
कोड System.Guid प्रकार के लिए एक उपनाम बनाता है जिसे दिशानिर्देश कहा जाता है, और एक मिलान रचनाकार इंटरफ़ेस के साथ अपना स्वयं का प्रकार भी बनाता है जिसे Guide कहा जाता है। बाद में, कोड एक प्रकार का गाइड बनाता है। इस उदाहरण को बनाने के लिए, कंपाइलर को गाइड की दो अलग-अलग परिभाषाओं के बीच चयन करना होगा। जब नाम-तत्व के बाहर का उपयोग-उपनाम निर्देश रखा जाता है, तो कंपाइलर स्थानीय नेमस्पेस के भीतर परिभाषित दिशा-निर्देश की स्थानीय परिभाषा का चयन करेगा, और नाम-स्थान के बाहर परिभाषित उपयोग-उपनाम निर्देश को पूरी तरह से अनदेखा कर देगा। यह, दुर्भाग्य से, कोड पढ़ते समय स्पष्ट नहीं है।
जब नाम का उपयोग-उपनाम निर्देश नाम स्थान के भीतर स्थित होता है, तब भी, कंपाइलर को दो अलग-अलग, परस्पर विरोधी गाइड प्रकारों के बीच चयन करना होता है, दोनों एक ही नामस्थान के भीतर परिभाषित होते हैं। ये दोनों प्रकार एक मिलान रचनाकार प्रदान करते हैं। कंपाइलर निर्णय लेने में असमर्थ है, इसलिए यह कंपाइलर त्रुटि को चिह्नित करता है।
नेमस्पेस के बाहर उपयोग-अलियास निर्देश को रखना एक बुरा अभ्यास है क्योंकि यह इस तरह की स्थितियों में भ्रम पैदा कर सकता है, जहां यह स्पष्ट नहीं है कि वास्तव में किस प्रकार का संस्करण उपयोग किया जा रहा है। इससे संभावित रूप से एक बग पैदा हो सकता है जिसका निदान करना मुश्किल हो सकता है।
नेमस्पेस तत्व के भीतर एलाइज़-अलियास निर्देशों का उपयोग करने से यह कीड़े के स्रोत के रूप में समाप्त हो जाता है।
- एकाधिक नामस्थान
एक ही फ़ाइल के भीतर कई नाम स्थान तत्वों को रखना आमतौर पर एक बुरा विचार है, लेकिन अगर और जब ऐसा किया जाता है, तो फ़ाइल के शीर्ष पर विश्व स्तर की बजाय प्रत्येक नामस्थान तत्वों के भीतर निर्देशों का उपयोग करके सभी को रखना एक अच्छा विचार है। यह नामस्थानों को कसकर सीमित करेगा, और ऊपर वर्णित प्रकार के व्यवहार से बचने में भी मदद करेगा।
यह ध्यान रखना महत्वपूर्ण है कि जब कोड नामस्थान के बाहर रखे गए निर्देशों का उपयोग करते हुए लिखा गया है, तो नाम-पत्र के भीतर इन निर्देशों को स्थानांतरित करते समय यह सुनिश्चित करना चाहिए कि यह कोड के शब्दार्थ को नहीं बदल रहा है। जैसा कि ऊपर बताया गया है, नेमस्पेस तत्व के भीतर उपयोग-उर्फ निर्देशों को रखने से कंपाइलर उन प्रकारों में परस्पर विरोधी प्रकारों के बीच चयन करने की अनुमति देता है जो तब नहीं होंगे जब निर्देशों को नेमस्पेस के बाहर रखा गया हो।
उल्लंघन को कैसे ठीक करें इस नियम का उल्लंघन ठीक करने के लिए, सभी का उपयोग करके निर्देशों का उपयोग करें और नाम स्थान तत्व के भीतर-अन्य निर्देशों का उपयोग करें।