10 Dakikadan Az Sürede C# 10 ve .NET 6'da Global Usings
[[academy-video-youtube({"vid": "RWYrafpP53A", "start_time": "0", "title": "C# 10 ve .NET 6'da Global Usings 10 Dakikadan Daha Kısa Sürede", "creator": "Tim Corey", "length": "5m 33s"})]]
Bir C# dosyasının en üstünü gezmiş olan herkes prosedürü bilir: her sınıf deyiminin üzerinde bir dizi kullanma satırları, bir dosyadan diğerine tekrarlanır. Tipik bir proje, tekrar tekrar aynı birkaç ad alanını çekmiş olur ve bunların her birini değiştirmek gerektiğinde düzenlemek, gerçek bir kazanç sağlamayan bir iştir. C# 10, proje genelinde bu tekrarı kaldırmak için küresel using direktifini ekledi.
Global Usings in C# 10 and .NET 6 In 10 Minutes or Less videosunda, Tim Corey küresel usinglerin ne yaptığını, bunları takımın bulabileceği yerlerde nasıl yerleştireceğini ve statik çeşidin üye çağrılarından sınıf önekini düşürmenize olanak tanıdığını anlatır. Ayrıca akılda tutulması gereken bir tasarım tuzağına dikkat çeker: bir ad alanını küresel olarak ithal etmek, içindeki adı yaşayan tüm projeyi açığa çıkarır. Her yeni sınıfa aynı beş using satırını kopyalamış olan herkes bu temizlik örüntüsünü burada bulacaktır.
Tekrar Sorunu
[0:17 - 1:50] Tim, yeni bir .NET 6 konsol uygulamasıyla başlıyor ve bir PersonModel sınıfı içeren bir Data klasörü oluşturuyor. Program.cs dosyasından bu sınıfa referans vermek, dosyanın üst kısmında beklenen using GlobalUsings.Data; satırını gerektirir. Ayrıca PersonModel ihtiyacı olan ikinci bir sınıf eklemek, bu dosyanın üstüne aynı using satırını eklemek anlamına gelir. Altı sınıftan oluşan bir projede, aynı içerik altı kez yazılır.
Bu durum tam olarak global using için tasarlanmış. Projenin tamamının dayandığı herhangi bir ad alanı, tür veya statik sınıf, bir kez bildirilebilir ve her dosyaya yeniden ifade etme ihtiyacı olmadan sunulabilir.
Bir Usingi Küresel Kapsama Yükseltme
[1:50 - 2:24] Sözdizimi, mevcut direktifin önünde tek bir anahtar kelimeden ibarettir:
global using GlobalUsings.Data;global using GlobalUsings.Data;Projede herhangi bir .cs dosyasına eklenen o tek satır, aynı projedeki diğer tüm dosyalar için GlobalUsings.Data kullanılabilir hale getiriyor. Daha önce PersonModel için kendi using satırına ihtiyaç duyan diğer sınıflar artık buna ihtiyaç duymaz; Tür otomatik olarak çözülür. Kapsam proje sınırında durur, bu nedenle bir kardeş projeden sınıfı referans verme hala normal proje referansı ve kendi küresel veya dosya başına usingini gerektirir.
Bu işlemin yaptığı şey, türlerin nereden geldiğini gizlemek değildir. Derleyici hala PersonModel'yi ilgili namespace'e çözümler; ad alanı sadece önceden ithal edilmiştir. Çalışma zamanındaki davranış, her dosyanın tepesine aynı using yazmaya özdeştir.
Usingi Tek Bir Dosyada Merkezileştirme
[2:24 - 3:32] Küresel using direktiflerini rastgele dosyalar arasında serpiştirmek teknik olarak geçerli ancak operasyonel olarak dağınıktır. Yeni bir ekip üyesi PersonModel'nın belirgin bir import olmadan çözümlendiğini gördüğünde, bunun nerede global yapıldığını bulmak için projeyi aramak zorundalar. Gelişen eğilim, tüm küresel usingleri proje kökünde bir dosyada tutmaktır, Usings.cs veya GlobalUsings.cs gibi öngörülebilir bir isimle:
// Usings.cs at the project root
global using GlobalUsings.Data;
global using System.Text.Json;
global using System.Collections.Concurrent;// Usings.cs at the project root
global using GlobalUsings.Data;
global using System.Text.Json;
global using System.Collections.Concurrent;Dosya başka hiçbir şey içermez. Projeye katılan herkes, küresel olarak nelerin kullanılabilir olduğunu görmek için bakacakları tam olarak bir yer bilir. Bu, dosya ile sınırlı ad alanları ve diğer tören kırpma özellikleri ile örtüşerek, son C# sürümlerinde gelen tüm proje alt yapısını bakıldığında kolay okunabilir hale getirme amacını taşır.
Yöntem İthalatları İçin Küresel Using Statik
[3:32 - 4:50] Küresel using direktifi, daha önce eklenmiş olan using statik formu ile birleşir. Bu kombinasyon, projenin genelinde statik bir sınıf üyesinden sınıf önekini kaldırmanıza olanak tanır. Tim'in gösterdiği motivasyonel vakalar Console.WriteLine:
global using static System.Console;global using static System.Console;Merkezi using dosyasındaki o tek satırla, Console.WriteLine("hello") proje genelinde sadece WriteLine("hello") haline gelir. Aynı desen, matematik yardımcıları için de çalışır (global using static System.Math, öneki yazmadan Sqrt(x) yazmanıza olanak tanır) ve kod tabanınızda yoğun şekilde başvurduğunuz diğer herhangi bir statik sınıf için de çalışır.
Tim'in en dikkatli olduğu formlardan biridir. Sınıf önekinin kaldırılması, yöntemler açık olduğunda okunabilirlik kazancı sağlar, ancak iki statik sınıf aynı isme sahip yöntemler sunduğunda karışıklık kaynağı olabilir. Boş bir WriteLine çağrısına bakan bir okuyucu, kaynağı bağlam içinde görmek yerine merkezi dosyaya güvenmelidir.
Küresel İthalatlar Kendi Üzerine Yaptığı Zaman
[4:50 - 5:14] Ad alanlarının tüm amacı, aynı kısa isme sahip türlerin çarpışmasını önlemektir. Bir ad alanını küresel olarak ithal etmek, tüm proje için bu tamponu bir seferde kaldırır. Eğer GlobalUsings.Data namespace'iniz bir Data sınıfı içeriyorsa ve aynı zamanda System.Data'yi global olarak import ediyorsanız, şimdi her dosyanın ayırt etmesi gerekir. Maliyet, çarpışmanın gerçekleştiği yerde değil, iki arasında yakalanan herhangi bir gelecekteki dosyada gösterir.
Tim'in kılavuzu, küresel usingleri kasıtlı olarak kullanmaktır, proje geneline bağımlı olduğunuz ad alanlarını tercih eder ve özellikle küresel using static üzerinde dikkatli olun. Mantıklı bir başlangıç dizisi, her dosyanın zaten ithal ettiği ad alanlarıdır; bu listeyi genişletmek için bir kod incelemesi gerekiyor.
Özetlemek: Daha Az Tören, Aynı Davranış
[5:14 - 5:33] Küresel usingler, bir projenin ömrü boyunca küçük ancak kazançlı bir özelliktir. Artık beş satır gereksiz import taşımayan her dosya, gerçek koda daha hızlı açılır ve ortak bir ad alanına yapılan düzenleme bir düzine yerine tek bir yerde gerçekleşir. tür takma adları ve daha geniş using ailesi üzerine giren aynı özen burada geçerlidir: okunabilirlik yararı açık olduğu yerlerde kullanın ve bir sonraki geliştiricinin onu bir bakışta tarayabilmesi için merkezi dosyanın yeterince küçük olmasını sağlamak.
Sonuç
[5:14 - 5:33] Küresel usingler, dosya başına using satırlarını proje genelinde direktiflerle değiştirir, küresel using static varyantı, statik üye çağrılarından sınıf önekini kaldırır ve projenin kökünde tek bir Usings.cs dosyası, onu keşfedilebilir kılan gelenektir. Özellik isteğe bağlı ve eklemelidir, bu nedenle mevcut bir kod tabanını benimsemek kademeli olarak gerçekleştirilir.
Örnek İpucu: <ImplicitUsings>enable</ImplicitUsings> aracılığıyla örtük using'leri açtığınızda SDK, sizin onları yazmadan, System, System.Linq ve System.Collections.Generic gibi küresel using'lerin küratörlü bir setini otomatik olarak ekler. Bunu proje için spesifik ithalatlar için kendi Usings.cs dosyanızla eşleştirin ve her dosyanın üst kısmı gözle görülür derecede kısalır.
Tam videoyu YouTube Kanalında izleyin ve modern C# proje yapısı hakkında daha fazla bilgi edinin 10 Dakikalık Eğitim serisinde.

