StyleCop Belgelerine Göre:
SA1200: UseDirectivesMustBePlacedWithinNamespace
Neden AC # yönergesini kullanarak bir ad alanı öğesinin dışına yerleştirilir.
Kural Açıklama Dosyada herhangi bir ad alanı öğesi bulunmadığı sürece, kullanım talimatı veya kullanım takma adı yönergesi bir ad alanı öğesinin dışına yerleştirildiğinde bu kuralın ihlali oluşur.
Örneğin, aşağıdaki kod bu kuralın iki ihlaline neden olur.
using System;
using Guid = System.Guid;
namespace Microsoft.Sample
{
public class Program
{
}
}
Ancak aşağıdaki kod, bu kuralın herhangi bir ihlaline neden olmaz:
namespace Microsoft.Sample
{
using System;
using Guid = System.Guid;
public class Program
{
}
}
Bu kod, derleyici hataları olmadan temiz bir şekilde derlenecektir. Ancak, Guid türünün hangi sürümünün tahsis edildiği belirsizdir. Using yönergesi, aşağıda gösterildiği gibi ad alanının içine taşınırsa, bir derleyici hatası oluşur:
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");
}
}
}
Kod, aşağıdaki satırda, derleme satırında bulunan başarısız Guid g = new Guid("hello");
CS0576: 'Microsoft.Sample' ad alanı, 'Guid' takma adıyla çakışan bir tanım içeriyor
Kod, Guid adlı System.Guid türüne bir diğer ad oluşturur ve aynı zamanda eşleşen bir yapıcı arabirimiyle Guid adlı kendi türünü oluşturur. Daha sonra kod, Guid türünün bir örneğini oluşturur. Bu örneği oluşturmak için, derleyicinin iki farklı Guid tanımı arasında seçim yapması gerekir. Using-alias yönergesi, ad alanı öğesinin dışına yerleştirildiğinde, derleyici, yerel ad alanında tanımlanan yerel Guid tanımını seçer ve ad alanının dışında tanımlanan use-alias yönergesini tamamen yoksayar. Ne yazık ki, bu kodu okurken belli değil.
Bununla birlikte, use-alias yönergesi ad alanı içinde konumlandırıldığında, derleyici aynı ad alanında tanımlanan iki farklı, çakışan Guid türü arasında seçim yapmak zorundadır. Bu türlerin her ikisi de eşleşen bir kurucu sağlar. Derleyici karar veremediğinden derleyici hatasını işaretler.
Using-alias yönergesini ad alanının dışına yerleştirmek kötü bir uygulamadır, çünkü bu tür durumlarda karışıklığa yol açabilir, burada türün hangi sürümünün gerçekten kullanıldığı açık değildir. Bu, teşhis edilmesi zor olabilecek bir hataya neden olabilir.
Use-alias yönergelerini ad alanı öğesi içine yerleştirmek hata kaynağı olarak bunu ortadan kaldırır.
- Birden Çok Ad Alanı
Birden çok ad alanı öğesini tek bir dosyaya yerleştirmek genellikle kötü bir fikirdir, ancak bu yapılırsa ve yapıldığında, tüm yönergelerin, genel olarak dosyanın üst kısmına değil, ad alanı öğelerinin her birine yerleştirilmesi iyi bir fikirdir. Bu, ad alanlarını sıkıca kaplayacak ve yukarıda açıklanan davranış türlerinden kaçınmaya yardımcı olacaktır.
Kod, ad alanının dışına yerleştirilmiş yönergeler kullanılarak yazıldığında, kodun anlambilimini değiştirmediğinden emin olmak için, bu yönergeleri ad alanı içinde taşırken dikkatli olunmalıdır. Yukarıda açıklandığı gibi, isim-alanı yönergelerinin ad-alanı elemanına yerleştirilmesi, derleyicinin, direktifler ad alanının dışına yerleştirildiğinde gerçekleşmeyecek şekilde çakışan türler arasında seçim yapmasına izin verir.
İhlallerin Düzeltilmesi Bu kuralın ihlalini gidermek için, ad alanı öğesindeki tüm yönergeleri ve takma ad kullanma yönergelerini taşıyın.