C ++ geçmişim var ve bu sorunun yanıtlarını tamamen anlıyorum ve kabul ediyorum: Neden “namespace std kullanıyor?” kötü uygulama olarak mı değerlendirildi?
Bu yüzden, C # ile biraz deneyime sahip olduğum için, tam tersini görüyorum:
using Some.Namespace;
kelimenin tam anlamıyla her yerde kullanılıyor. Bir türü kullanmaya başladığınızda, önce ad alanı için bir kullanım yönergesi eklersiniz (zaten yoksa). .cs
Başlamamış bir dosya gördüğümü hatırlayamıyorum using System; using System.Collections.Generic; using X.Y.Z; etc...
. Aslında, Visual Studio sihirbazı ile yeni bir dosya eklerseniz, onlara hiç ihtiyacınız olmasa bile, otomatik olarak bazı kullanma yönergeleri ekler. Yani, C ++ topluluğunda temelde linç alırken, C # bunu bile teşvik eder. En azından bana öyle geliyor.
Şimdi, C # ve C ++ direktiflerini kullanmanın aynı şey olmadığını anlıyorum. Ayrıca, using namespace
C ++ ile yapabileceğiniz en nazik şeylerden birinin , yani bir başlık dosyasına koyarak, başlık dosyaları ve bir kavram eksikliği nedeniyle C # 'da aynı derecede kötü bir muadili olmadığını anlıyorum #include
.
Bununla birlikte, farklılıklarına rağmen, C # ve C ++ direktiflerini kullanmak aynı amaca hizmet eder, bu SomeType
da çok daha uzun değil , sadece her zaman yazmak zorunda kalır Some.Namespace.SomeType
( ::
yerine C ++ ile .
). Aynı amaçla, tehlike de benim için aynı görünüyor: Çarpışmaları adlandırmak.
En iyi durumda bu bir derleme hatasıyla sonuçlanır, bu nedenle "yalnızca" düzeltmeniz gerekir. En kötü durumda, hala derlenir ve kod sessizce yapmayı düşündüğünüzden farklı şeyler yapar. Yani sorum şu: Neden (görünüşe göre) C # ve C ++ 'da bu denli kötü sayılan yönergeleri kullanıyorsunuz?
Sahip olduğum bir cevapla ilgili bazı fikirler (bunların hiçbiri beni gerçekten tatmin etmiyor):
Ad alanları, C # 'da C ++ (
std
vs.System.Collection.Generic
)' den çok daha uzun ve çok daha iç içe olma eğilimindedir . Dolayısıyla, kodun bu şekilde gürültüden arındırılmasında daha fazla arzu ve daha fazla kazanç vardır. Ancak bu doğru olsa bile, bu argüman yalnızca standart ad alanlarına baktığımızda geçerlidir. Özel olanlar hem C # hem de C ++ 'da istediğiniz herhangi bir kısa isme sahip olabilir.Ad alanları, C # 'da C ++' dan çok daha "ince taneli" gibi görünmektedir. Bir örnek olarak, C ++ tüm standart kütüphane bulunan
std
(artı bazı küçük iç içe ad gibichrono
C # sen varken)System.IO
,System.Threading
,System.Text
vb Yani, isim çakışmalarıyla riski küçüktür. Ancak, bu sadece bağırsak hissi. Aslında "using namespace std
ve " ile kaç isim içe aktardığınızı saymadımusing System
. Ve yine, bu doğru olsa bile, bu argüman yalnızca standart ad alanlarına bakıldığında geçerlidir. Kendi olanlar hem C # hem de C ++ 'da istediğiniz kadar ince taneli olarak tasarlanabilir.
Daha fazla tartışma var mı? Özellikle gerçek gerçeklerle (eğer varsa) ilgileniyorum ve görüşlerde çok fazla değilim.
Ext(this T t, long l)
bununla adlandırılan bir uzantılar yöntemi düşünün t.Ext(0)
. Daha sonra, bir uzantı yöntemi içeren başka bir ad alanı eklerseniz Ext(this T t, int i)
, bunun yerine bu ad çağrılır. Ama ben C # (henüz) konusunda uzman değilim.