Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tip
Yazılım geliştirme konusunda yeni misiniz? İlk olarak Başlangıç öğreticileri ile başlayın. İlk programlarınızı yazarken ad alanlarını ve using yönergeleri tanıtırlar.
Başka bir dilde mi deneyimlisiniz? C# içindeki ad alanları Java'daki paketlere veya Python'daki modüllere benzer şekilde çalışır. İhtiyacınız olan söz dizimine hızlıca göz gezdirin.
Ad alanı bildirimleri ve using yönergeleri ilgili dil özellikleridir. Ad alanı bildirimi, türlerinizi düzenli bir yapıya yerleştirir. Ad alanı, ilgili türleri birlikte gruplandırır ve adlandırma çakışmalarını önler. Yönerge using , programınızın bu türleri basit adlarıyla kullanmasına olanak tanır. Her kullanımda tam ad alanı yolunu yazmanız gerekmez.
Yazdığınız her C# programında zaten ad alanlarını kullandınız. Her .NET türü bir ad alanına aittir ve dosyanın en üstündeki her using yönerge bir ad alanına başvurur. Örneğin, Console ve Math, System ad alanına aittir, bu yüzden tam nitelikli adları System.Console ve System.Math olur.
List<T> ve Dictionary<TKey, TValue> gibi koleksiyon türleri System.Collections.Generic aitidir. Bu ad alanlarının herhangi biri için tek using bir yönerge, tüm türlerine basit adlarıyla başvurmanızı sağlar. Her yerde List<T> yerine System.Collections.Generic.List<T> yazıyorsunuz.
Bu makale ad alanlarının ve using yönergelerin nasıl çalıştığı hakkında daha fazla arka plan sağlar ve .NET kitaplıklarında zaten karşılaştığınız desenlerin örneklerini gösterir.
Ad alanı türleri içerir. Her .NET türü bir ad alanına aittir. Örneğin, System.Threading.Tasks.Task türünün Task ad alanına ait olduğunu düşünün.
İlgili veya benzer türleri aynı ad alanında gruplandırmak iyi bir uygulamadır ve .NET, sağladığı türlerle bunu yapar. Ad System.Collections.Generic alanı koleksiyonla ilgili türleri, System.IO ad alanı ise dosyaları, dizinleri ve verileri okuma ve yazma ile ilgili türleri içerir. Ad System alanı , Mathve DateTimegibi Consoletemel türleri içerir.
Aşağıdaki örnekte ad alanlarının tipik bir C# dosyasındaki yönergelerle using birlikte nasıl çalıştığı gösterilmektedir:
using System;
using System.Globalization;
namespace MyApp.Services;
class Greeter
{
public string Greet(string name)
{
var culture = CultureInfo.CurrentCulture;
return $"Hello, {name}! Culture: {culture.Name}";
}
}
Yukarıdaki örnekte, using yönergesi, System.Globalization.CultureInfo'nin tam adını belirtmeden CultureInfo adıyla System.Globalization.CultureInfo kullanabileceğiniz anlamına gelir.
namespace yönergesi, Greeter sınıfının MyApp.Services ad alanının bir parçası olduğunu bildirir. Tam nitelikli adı MyApp.Services.Greeter.
Ad alanı bildirimleri
Ad alanı bildirimi, türlerinizi adlandırılmış bir gruba atar. Yazdığınız her tür bir ad alanına ait olmalıdır. Ad alanı adı genellikle projenizin klasör yapısını yansıtır. Örneğin, bir Services/Payments klasördeki türler genellikle ad alanına MyApp.Services.Payments aittir.
Ad alanları hiyerarşiyi ifade etmek için . operatörünü kullanır, örneğin System.Collections.Generic. Ad alanı adları geçerli C# tanımlayıcı adları olmalıdır.
Dosya düzeyinde ad alanları
Bir dosyadaki tüm türler aynı ad alanına ait olduğunda dosya kapsamlı söz dizimini kullanın. Ad alanı bildiriminden sonra noktalı virgül eklediğinizde dosyanın tamamına uygulanır. Ek ayraç veya girintiye ihtiyacınız yoktur:
namespace MyApp.Models;
class Customer
{
public required string Name { get; init; }
public string? Email { get; init; }
public override string ToString() => $"{Name} ({Email ?? "no email"})";
}
Dosya kapsamlı ad alanları iç içe geçmeyi azaltır ve dosyaların okunmasını kolaylaştırır. Dosya başına yalnızca bir dosya kapsamlı ad alanı bildiriminiz olabilir.
Tip
Yeni kodda dosya kapsamlı ad alanlarını kullanın. Çoğu .NET şablonu ve kod çözümleyicisi bu stili önerir.
Blok kapsamlı ad alanları
Aynı dosyada birden fazla ad alanı bildirmeniz gerektiğinde blok kapsamlı söz dizimini kullanın. Bu stil ek bir girinti düzeyi ekler.
Önemli
Aynı dosyada birden fazla ad alanı bildirmek nadirdir. En yaygın senaryo, dosya düzeyinde ad alanlarını kullanmaktır.
Aşağıdaki kod parçacığı blok kapsamlı bir ad alanı örneğidir:
namespace MyApp.Models
{
class Product
{
public required string Name { get; init; }
public decimal Price { get; init; }
public override string ToString() => $"{Name}: {Price:C}";
}
}
Yönergeleri kullanma
using yönergesi olmadan, her türe tam nitelikli adıyla, yani tam ad alanı yolu ile tür adının birleşimiyle başvurmanız gerekir. Bu stil gereksiz ayrıntılıdır, tekrarlıdır ve özellikle bir dosyada aynı ad alanından birçok tür kullanıldığında okunması daha zordur:
static void ShowFullyQualified()
{
// Without a using directive, use the fully qualified name:
System.Console.WriteLine("Hello from fully qualified name!");
}
Dosyanın using en üstündeki yönerge, türlerini basit adlarına göre kullanabilmeniz için bir ad alanını içeri aktarır. Aşağıdaki kod parçacığı, bu içe aktarmadan sonra daha kısa tür kullanımının nasıl göründüğünü gösterir; bu da dosya genelindeki referansları daha kısa ve okunması daha kolay hâle getirir:
static void ShowShortName()
{
// With 'using System;' (or implicit usings enabled), use the short name:
Console.WriteLine("Hello from short name!");
}
Daha fazla bilgi için yönergesineusing bakın.
Genel kullanım yönergeleri
Yönerge using yalnızca içinde göründüğü dosya için geçerlidir. Her dosyada aynı using yönergeleri yinelemek yerine, bunları projenizin tamamı için bir kez bildirmenize olanak tanıyan genel using yönergelerini kullanın. Bunları herhangi bir dosyaya yerleştirin. Birçok ekip ayrılmış GlobalUsings.cs bir dosya oluşturur:
global using System.Text;
global using System.Text.Json;
Genel bir using bildirimi tanımladıktan sonra, projedeki her dosya ek bir using yönergesi olmadan bu ad alanındaki türlere yalın adlarıyla başvurabilir. Global using bildirimleri, dosyalar arasındaki yinelemeyi ortadan kaldırır, her dosyanın en üstündeki using bloğunu küçültür ve proje için ad alanı ilkesini merkezi hale getirir.
Gizli using direktifleri
En yaygın ad alanları için herhangi bir using yönerge yazmanız gerekmez. .NET SDK, proje türünüze göre genel using yönergelerini otomatik olarak oluşturur. Proje dosyanızda <ImplicitUsings>enable</ImplicitUsings> ayarını yaparak örtük kullanımları etkinleştirin. Örneğin, bir konsol uygulaması projesi otomatik olarak , System, System.Collections.Generic, System.IO, System.Linqve System.Threadingiçeri aktarırSystem.Threading.Tasks. ile dotnet new oluşturduğunuz yeni projeler varsayılan olarak etkinleştirilir ImplicitUsings . Yeni dosyalar, Console, List<T> veya Task gibi sık kullanılan türler için hiçbir kalıp using yönergesi olmadan temiz başlar.
Daha fazla bilgi için bkz. Örtük kullanım yönergeleri.
Note
Bu makaledeki diğer kod örnekleri ve .NET belgeleri genelindeki örneklerin çoğu örtük kullanımın (veya proje türü için eşdeğer genel kullanımın) etkinleştirildiğini varsayar. Bu nedenle, kod Console veya List<T> gibi türleri yalın adlarıyla kullansa da, her kod parçacığının başında using System; ve benzeri yönergeleri görmezsiniz.
Statik kullanım yönergeleri
Yönerge static using , tür adı ön eki olmadan çağırabilmeniz için türün statik üyelerini içeri aktarır:
using static System.Math;
namespace MyApp.Utilities;
class CircleCalculator
{
public static double CalculateArea(double radius) => PI * Pow(radius, 2);
public static double CalculateCircumference(double radius) => 2 * PI * radius;
}
Statik kullanımlar gibi Math ve Console sık çağırdığınız yardımcı program sınıfları için iyi çalışır.
Türler ve ad alanları için takma adlar
Bir using takma ad, bir tür veya ad alanı için kısa bir ad oluşturur. Diğer adlar, uzun genel türler, adlandırma çakışmalarını çözümleme ve okunabilirliği geliştirme için kullanışlıdır:
using CustomerList = System.Collections.Generic.List<MyApp.Models.Customer>;
namespace MyApp.Services;
class CustomerService
{
public CustomerList GetTopCustomers()
{
CustomerList customers = [new() { Name = "Alice" }, new() { Name = "Bob" }];
return customers;
}
}
C# 12'den itibaren, demetler ve işaretçi türleri de dahil olmak üzere herhangi bir türe takma ad verebilirsiniz.
using Point = (double X, double Y);
namespace MyApp.Geometry;
class Shape
{
public static double Distance(Point a, Point b)
{
var dx = a.X - b.X;
var dy = a.Y - b.Y;
return Math.Sqrt(dx * dx + dy * dy);
}
}
Daha gelişmiş senaryolarda, iki derlemenin aynı tam nitelikli tür adını tanımladığı durumlarda, belirsizliği gidermek amacıyla extern alias kullanın.