“Using” yönergesi ve “using” ifadesi neden C # 'da aynı anahtar kelimeyi kullanıyor?


10

usingYönerge onların tam nitelikli isim vermeden bize türlerine erişim sağlar:

using MyNamespace.Foo.Bar;

usingİfadesi için sözdizimsel şeker olarak hareket try/ finallynesneler uygun bir şekilde bertaraf edilir sağlamak bloklar:

using(var x = new MyDisposableClass()) { ... }

Bu iki durumun birbirleriyle hiçbir ilgisi yok gibi görünüyor. Neden aynı anahtar kelimeyi kullanıyorlar?

Herkesin iki vakayı karıştıracağından şüpheliyim, ancak yeni bir işlevsellik için yeni bir kelime yaratmamak garip görünüyor.


Bir kenara, classC ++ 'da (sınıfları bildirmek için bir, şablon parametrelerini tanımlamak için bir tane) çift ​​kullanım hakkında okudum , ancak ikinci durumda sonunda typenamebana daha anlamlı gelen kendi anahtar kelimesi var .

Yanıtlar:


7

Her iki kullanımının usingda ilişkisiz olması konusunda haklısınız .

Bununla birlikte, usingher iki durumda da kullanmak için birkaç iyi neden vardır .

  • usingDeyim .NET 1.0 için oluşturulan ve ( "Ben şu kodda bu ad kullanıyorum") semantik mantıklı edildi
  • Her iki durumda usingda anlambilimseldir. Sade İngilizce olarak, usingbir ad alanı veya usingbildirilen tek kullanımlık nesnesisiniz.
  • usingAnahtar kelimeyi aşırı yükleyerek, dil tasarımcılarının dilde başka bir ayrılmış kelime oluşturması gerekmiyordu. Bu, dilin daha temiz kalmasına yardımcı olur.

Dil tasarımcıları, zamanlarını tekrar göz önüne alarak import, iki seçeneği netleştirmek için ad alanı bildirimleri için kullanmayı seçmiş olabilirler ( usingtek kullanımlık bir nesne, .NET'in sonraki bir sürümünde geldi). Asla bilemeyiz ve gerçekten önemli değil çünkü bağlam nedeniyle iki anlamdan hangisini kullandığınız son derece açık.

Tüm bunları söyledikten sonra, using MyNamespace.DisposableObject = DisposableObject;her yerde ad alanı takma adları ile kodunuzu atmayın.


Teşekkürler. "Dili daha temiz tutmaya yardımcı olur" ile ne demek istediğinizi genişletebilir misiniz? Aklımda, anahtar kelimenin aşırı yüklenmesi, dili daha az temiz hale getiriyor. Yeni bir anahtar kelime yapmanın ve ayrı işlevler için ayrı anahtar kelimeler kullanmanın daha temiz olacağını düşünüyorum.
eigenchris

5
Anahtar kelimeler tanımlayıcı olarak kullanılamaz. Yeni bir anahtar kelime eklendiğinde, bu anahtar kelimeyi tanımlayıcı olarak kullanan her program kesilir. Bir anahtar kelimeyi, geriye dönük olarak uyumlu bir şekilde yalnızca tescilli kaynak kodu, gizli kaynak kodu, askeri kaynak kodu vb.Dahil olmak üzere C♯'nin tüm geçmişinde yazılmış her kaynak kod satırına erişebiliyorsanız kullanabilirsiniz.
Jörg W Mittag

@ JörgWMittag, Tamamen doğru değil. C #, bu ada sahip mevcut tanımlayıcıların kodla çakışmadığı anlamına gelen yollarla eklenen bir sürü bağlamsal anahtar kelimeye sahiptir. varadlandırılmış bir kapsam türünün varanahtar kelimeye göre öncelikli olduğu klasik bir örnek .
David Arno

@ JörgWMittag Veya alternatif olarak, derleyicinin dil sürümünü seçilebilir yapmak ( g++ --std=c++11kaynak dosyalarının bir lehçe belirtmesine (örneğin, Haskell (?), Raket, Perl, hatta Python'da olduğu gibi) izin vermektir. anahtar kelimeler (yani önünde bir lexer ile LALR ayrıştırıcı kullanarak run-off-the-mill dil uygulanması için zor olabilir gerçi) bazı tanımlayıcıları ayırmadan, olası tanımlayıcılar ile sözdizimsel çatışma asla bir yol.
amon

1
@eigenchris gibi tanımlayıcı olarak kullanmak için her zaman bir @ ile keword'un önüne geçebilirsiniz@using
Bill Tür

4

Dil tasarımcıları genellikle anahtar kelime sayısını sınırlamaya çalışır. Bir anahtar kelime ayrıldığında, kullanıcı kodunda bir tanımlayıcı olarak kullanılamaz; bu, yalnızca ihtiyacınız olan kelime ise can sıkıcıdır. Diğer dillerdeki kodları taşırken de bir engeldir ve Microsoft insanların Java'dan C # 'a kod göndermesini istedi. C #, Java'dan daha fazla anahtar kelimeye sahiptir, ancak her yeni anahtar kelime daha zor hale getirir. Ayrıca, .net dilleri, aynı anahtar kelimelere sahip olmayabilecek farklı dillerde yazılmış API'lerle etkileşime girecek şekilde tasarlanmıştır; bu, herkese açık bir üye de bir anahtar kelime ise rahatsızlıklara yol açar.

usingSözdizimindeki konumlarda göründükleri için, iki kullanımı kesin değildir, "kullanma" her iki durumda da uygun bir terimdir. Bu yüzden aynı anahtar kelimeyi tekrar kullanmak mantıklı. Anahtar kelimelerin yeniden kullanımıyla ilgili diğer örneklere dikkat edeceksiniz, örneğin:

  • new genel kısıtlamalarda
  • iniçinde foreachve varyant tipi parametrelerinde
  • defaultswitch(ve default(T)) içinde bir madde olarak .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.