using yönergesi
yönergesi, using
bir ad alanında tanımlanan türleri, bu türün tam ad alanını belirtmeden kullanmanıza olanak tanır. Yönerge, using
aşağıdaki örnekte gösterildiği gibi temel biçiminde tek bir ad alanından tüm türleri içeri aktarır:
using System.Text;
Yönergeye using
iki değiştirici uygulayabilirsiniz:
- Değiştirici,
global
projenizdeki her kaynak dosyaya aynı yönergeyi eklemeyle aynıusing
etkiye sahiptir. Bu değiştirici C# 10'da kullanıma sunulmuştur. - Değiştirici
static
,static
üyeleri ve iç içe yerleştirilmiş türleri bir ad alanında tüm türleri içeri aktarmak yerine tek bir türden içeri aktarır.
Projenizdeki tüm kaynak dosyalarındaki bir türdeki statik üyeleri içeri aktarmak için her iki değiştiriciyi de birleştirebilirsiniz.
Ayrıca, bir ad alanı veya using alias yönergesi olan bir tür için de diğer ad oluşturabilirsiniz.
using Project = PC.MyCompany.Project;
Diğer ad kullanma yönergesinde değiştiriciyi global
kullanabilirsiniz.
Not
Anahtar using
sözcüğü, dosyalar ve yazı tipleri gibi nesnelerin doğru şekilde işlenmesine yardımcı IDisposable olan deyimler oluşturmak using
için de kullanılır. deyimi hakkında daha fazla bilgi için bkzusing
. deyimi.using
Değiştiricisi olmayan bir using
yönergenin global
kapsamı, göründüğü dosyadır.
yönergesi using
görünebilir:
- Kaynak kod dosyasının başında, herhangi bir ad alanı veya tür bildirimlerinden önce.
- Değiştirici kullanılmadığı sürece
global
, herhangi bir ad alanında, ancak bu ad alanında bildirilen herhangi bir ad alanında veya türlerden önce yönergenin tüm ad alanı ve tür bildirimlerinden önce görünmesi gerekir.
Aksi takdirde, derleyici hatası CS1529 oluşturulur.
Ad alanını belirtmek zorunda kalmadan ad alanında türleri kullanmak için bir using
yönerge oluşturun. Yönerge using
, belirttiğiniz ad alanında iç içe yerleştirilmiş ad alanlarına erişmenizi sağlamaz. Ad alanları iki kategoriye ayrılır: kullanıcı tanımlı ve sistem tanımlı. Kullanıcı tanımlı ad alanları, kodunuzda tanımlanan ad alanlarıdır. Sistem tanımlı ad alanlarının listesi için bkz . .NET API Browser.
genel değiştirici
Değiştiriciyi global
bir using
yönergeye eklemek, kullanarak derlemedeki tüm dosyalara (genellikle bir proje) uygulandığı anlamına gelir. yönergesi global using
C# 10'a eklendi. Söz dizimi şöyledir:
global using <fully-qualified-namespace>;
burada tam-nitelenmiş-ad alanı , ad alanı belirtilmeden türlerine başvurulabilen ad alanının tam adıdır.
Genel bir using yönergesi herhangi bir kaynak kod dosyasının başında görünebilir. Tek bir dosyadaki tüm global using
yönergelerin önce görünmesi gerekir:
- Değiştiricisi olmayan
global
tümusing
yönergeler. - Dosyadaki tüm ad alanı ve tür bildirimleri.
Herhangi bir kaynak dosyaya yönergeler ekleyebilirsiniz global using
. Genellikle bunları tek bir konumda tutmak istersiniz. Yönergelerin global using
sırası, tek bir dosyada veya dosyalar arasında önemli değildir.
Değiştirici global
değiştirici ile static
birleştirilebilir. Değiştirici global
bir using diğer ad yönergesine uygulanabilir. Her iki durumda da yönergenin kapsamı geçerli derlemedeki tüm dosyalardır. Aşağıdaki örnek, projenizdeki tüm dosyalarda System.Math içinde bildirilen tüm yöntemlerin kullanılmasını sağlar:
global using static System.Math;
Proje dosyanıza bir öğe ekleyerek genel olarak bir <Using>
ad alanı da ekleyebilirsiniz; örneğin, <Using Include="My.Awesome.Namespace" />
. Daha fazla bilgi için bkz <Using>
. öğe.
Önemli
.NET 6 için C# şablonları en üst düzey deyimleri kullanır. .NET 6'ya zaten yükselttiyseniz uygulamanız bu makaledeki kodla eşleşmeyebilir. Daha fazla bilgi için Yeni C# şablonları en üst düzey deyimleri oluşturma makalesine bakın
.NET 6 SDK'sı, aşağıdaki SDK'ları kullanan projeler için bir dizi örtük global using
yönerge de ekler:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Bu örtük global using
yönergeler, proje türü için en yaygın ad alanlarını içerir.
Daha fazla bilgi için Örtük kullanım yönergeleri makalesine bakın
statik değiştirici
yönergesi using static
, bir tür adı belirtmeden erişebileceğiniz statik üyeleri ve iç içe türleri olan bir türü adlandırır. Söz dizimi şöyledir:
using static <fully-qualified-type-name>;
<fully-qualified-type-name>
, statik üyelerine ve iç içe türlerine bir tür adı belirtilmeden başvurulabilen türün adıdır. Tam tür adı (tür adıyla birlikte tam ad alanı adı) sağlamazsanız C# derleyici hatası CS0246 oluşturur: "'tür/ad alanı' türü veya ad alanı adı bulunamadı (kullanma yönergesi veya derleme başvurusu eksik mi?)".
yönergesi, using static
örnek üyeleri de olsa statik üyeleri (veya iç içe türler) olan herhangi bir tür için geçerlidir. Ancak, örnek üyeleri yalnızca tür örneği aracılığıyla çağrılabilir.
Türün statik üyelerine, erişimi tür adıyla nitelemeniz gerekmeden erişebilirsiniz:
using static System.Console;
using static System.Math;
class Program
{
static void Main()
{
WriteLine(Sqrt(3*3 + 4*4));
}
}
Normalde, statik üyeyi çağırdığınızda, üye adıyla birlikte tür adını da sağlarsınız. Türün üyelerini çağırmak için aynı tür adının tekrar tekrar girilmesi, ayrıntılı ve belirsiz bir koda neden olabilir. Örneğin, bir Circle
sınıfın aşağıdaki tanımı sınıfın birçok üyesine başvurur Math .
using System;
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * Math.PI; }
}
public double Area
{
get { return Math.PI * Math.Pow(Radius, 2); }
}
}
Bir üyeye her başvurulsa sınıfına Math açıkça başvurma gereksinimi ortadan kaldırılarak yönergesi using static
daha temiz kod üretir:
using System;
using static System.Math;
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * PI; }
}
public double Area
{
get { return PI * Pow(Radius, 2); }
}
}
using static
yalnızca belirtilen türde bildirilen erişilebilir statik üyeleri ve iç içe türleri içeri aktarır. Devralınan üyeler içeri aktarılamaz. Visual Basic modülleri de dahil olmak üzere bir yönerge ile herhangi bir using static
adlandırılmış türden içeri aktarabilirsiniz. F# üst düzey işlevleri meta verilerde adı geçerli bir C# tanımlayıcısı olan adlandırılmış bir türün statik üyeleri olarak görünüyorsa, F# işlevleri içeri aktarılabilir.
using static
belirtilen türde bildirilen uzantı yöntemlerini, uzantı yöntemi araması için kullanılabilir hale getirir. Ancak, uzantı yöntemlerinin adları kodda nitelenmemiş başvuru için kapsama aktarılmaz.
Aynı derleme birimi veya ad alanı içindeki farklı yönergeler tarafından farklı using static
türlerden içeri aktarılan aynı ada sahip yöntemler bir yöntem grubu oluşturur. Bu yöntem grupları içinde aşırı yükleme çözümlemesi normal C# kurallarına uyar.
Aşağıdaki örnek, , Mathve sınıflarının statik üyelerini Consoletür adlarını belirtmek zorunda kalmadan kullanılabilir hale getirmek için yönergesini kullanır using static
String.
using System;
using static System.Console;
using static System.Math;
using static System.String;
class Program
{
static void Main()
{
Write("Enter a circle's radius: ");
var input = ReadLine();
if (!IsNullOrEmpty(input) && double.TryParse(input, out var radius)) {
var c = new Circle(radius);
string s = "\nInformation about the circle:\n";
s = s + Format(" Radius: {0:N2}\n", c.Radius);
s = s + Format(" Diameter: {0:N2}\n", c.Diameter);
s = s + Format(" Circumference: {0:N2}\n", c.Circumference);
s = s + Format(" Area: {0:N2}\n", c.Area);
WriteLine(s);
}
else {
WriteLine("Invalid input...");
}
}
}
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * PI; }
}
public double Area
{
get { return PI * Pow(Radius, 2); }
}
}
// The example displays the following output:
// Enter a circle's radius: 12.45
//
// Information about the circle:
// Radius: 12.45
// Diameter: 24.90
// Circumference: 78.23
// Area: 486.95
Örnekte yönerge using static
türüne Double de uygulanmış olabilir. Bu yönergenin eklenmesi, bir tür adı belirtmeden yöntemini çağırmayı TryParse(String, Double) mümkün hale getirir. Ancak, tür adı olmadan kullanmak TryParse
daha az okunabilir kod oluşturur, çünkü hangi sayısal türün TryParse
yönteminin using static
çağrıldığını belirlemek için yönergelerin denetlenmesi gerekir.
using static
ayrıca türler için enum
de geçerlidir. Sabit listesi ile ekleyerek using static
, türü artık sabit listesi üyelerini kullanmak için gerekli değildir.
using static Color;
enum Color
{
Red,
Green,
Blue
}
class Program
{
public static void Main()
{
Color color = Green;
}
}
diğer ad kullanma
Bir tanımlayıcıyı ad using
alanına veya türe uygun hale getirmek için bir diğer ad yönergesi oluşturun. Herhangi bir using
yönergede, ondan önce gelen yönergelerden bağımsız olarak using
tam ad alanı veya türü kullanılmalıdır. Bir using
yönergenin bildiriminde hiçbir using
diğer ad kullanılamaz. Örneğin, aşağıdaki örnek bir derleyici hatası oluşturur:
using s = System.Text;
using s.RegularExpressions; // Generates a compiler error.
Aşağıdaki örnekte ad alanı için diğer using
adın nasıl tanımlanacağı ve kullanılacağı gösterilmektedir:
namespace PC
{
// Define an alias for the nested namespace.
using Project = PC.MyCompany.Project;
class A
{
void M()
{
// Use the alias
var mc = new Project.MyClass();
}
}
namespace MyCompany
{
namespace Project
{
public class MyClass { }
}
}
}
Using alias yönergesinin sağ tarafında açık bir genel tür olamaz. Örneğin, için bir diğer ad kullanarak oluşturamazsınız, ancak için bir List<int>
diğer ad List<T>
oluşturabilirsiniz.
Aşağıdaki örnekte, bir using
sınıf için yönerge ve using
diğer ad tanımlama gösterilmektedir:
using System;
// Using alias directive for a class.
using AliasToMyClass = NameSpace1.MyClass;
// Using alias directive for a generic class.
using UsingAlias = NameSpace2.MyClass<int>;
namespace NameSpace1
{
public class MyClass
{
public override string ToString()
{
return "You are in NameSpace1.MyClass.";
}
}
}
namespace NameSpace2
{
class MyClass<T>
{
public override string ToString()
{
return "You are in NameSpace2.MyClass.";
}
}
}
namespace NameSpace3
{
class MainClass
{
static void Main()
{
var instance1 = new AliasToMyClass();
Console.WriteLine(instance1);
var instance2 = new UsingAlias();
Console.WriteLine(instance2);
}
}
}
// Output:
// You are in NameSpace1.MyClass.
// You are in NameSpace2.MyClass.
C# 12'de başlayarak, tanımlama grubu türleri, işaretçi türleri ve diğer güvenli olmayan türler de dahil olmak üzere daha önce kısıtlanmış türler için diğer adlar oluşturabilirsiniz. Güncelleştirilmiş kurallar hakkında daha fazla bilgi için özellik belirtimlerine bakın.
C# dili belirtimi
Daha fazla bilgi için bkz. C# Dil Belirtiminde yönergeleri kullanma. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.
Değiştirici kullanarak genel hakkında daha fazla bilgi için bkz. Genel usings özellik belirtimi - C# 10.