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ştiricistatic, 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 using deyimleri oluşturmak için de kullanılır. using deyimi hakkında daha fazla bilgi için bkz. using deyimi.

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üm using 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ükglobal 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 staticString.

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.

Ayrıca bkz.