interface (C# Başvurusu)interface (C# Reference)

Arabirim, bir sözleşmeyi tanımlar.An interface defines a contract. class struct Bu sözleşmeyi uygulayan her türlü veya, arabirimde tanımlanan üyelerin bir uygulamasını sağlamalıdır.Any class or struct that implements that contract must provide an implementation of the members defined in the interface. C# 8,0 ' den başlayarak bir arabirim, Üyeler için varsayılan bir uygulama tanımlayabilir.Beginning with C# 8.0, an interface may define a default implementation for members. Ayrıca, static ortak işlevlere yönelik tek bir uygulama sağlamak için üyeleri tanımlayabilir.It may also define static members in order to provide a single implementation for common functionality.

Aşağıdaki örnekte ImplementationClass sınıfının, parametresi olmayan ve SampleMethod'i döndüren void adlı bir yöntemi uygulaması gerekir.In the following example, class ImplementationClass must implement a method named SampleMethod that has no parameters and returns void.

Daha fazla bilgi ve örnek için bkz. arabirimler.For more information and examples, see Interfaces.

ÖrnekExample

interface ISampleInterface
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    // Explicit interface member implementation:
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }

    static void Main()
    {
        // Declare an interface instance.
        ISampleInterface obj = new ImplementationClass();

        // Call the member.
        obj.SampleMethod();
    }
}

Arabirim, bir ad alanı veya sınıf üyesi olabilir.An interface can be a member of a namespace or a class. Arabirim bildirimi, aşağıdaki üyelerin bildirimlerini (herhangi bir uygulama olmadan imzalar) içerebilir:An interface declaration can contain declarations (signatures without any implementation) of the following members:

Bu önceki üye bildirimleri genellikle gövde içermez.These preceding member declarations typically do not contain a body. C# 8,0 ' den başlayarak bir arabirim üyesi bir gövde bildirebilir.Beginning with C# 8.0, an interface member may declare a body. Bu, varsayılan bir uygulamaolarak adlandırılır.This is called a default implementation. Gövdeler içeren Üyeler, arabirimin geçersiz kılan bir uygulama sağlamayan sınıflar ve yapılar için "varsayılan" bir uygulama sağlamasına izin verir.Members with bodies permit the interface to provide a "default" implementation for classes and structs that don't provide an overriding implementation. Buna ek olarak, C# 8,0 ' den itibaren bir arabirim şunlar olabilir:In addition, beginning with C# 8.0, an interface may include:

Arabirimler örnek durumu içermeyebilir.Interfaces may not contain instance state. Statik alanlara artık izin verildiğinde, arabirimlerde örnek alanlarına izin verilmez.While static fields are now permitted, instance fields are not permitted in interfaces. Örnek otomatik Özellikler , açıkça gizli bir alan bildirdiklerinde arabirimlerde desteklenmez.Instance auto-properties are not supported in interfaces, as they would implicitly declare a hidden field. Bu kuralın Özellik bildirimlerinde hafif bir etkisi vardır.This rule has a subtle effect on property declarations. Bir arabirim bildiriminde, aşağıdaki kod bir veya içinde olduğu gibi otomatik uygulanan bir özellik bildirmiyor class struct .In an interface declaration, the following code does not declare an auto-implemented property as it does in a class or struct. Bunun yerine, varsayılan bir uygulamasına sahip olmayan ancak arabirimini uygulayan herhangi bir türde uygulanması gereken bir özellik bildirir:Instead, it declares a property that doesn't have a default implementation but must be implemented in any type that implements the interface:

public interface INamed
{
  public string Name {get; set;}
}

Bir ara birim, bir veya daha fazla temel ara birimden devralınabilir.An interface can inherit from one or more base interfaces. Bir arabirim Temel arabirimde uygulanan bir yöntemi geçersiz kıldığında , Açık arabirim uygulama söz dizimini kullanmalıdır.When an interface overrides a method implemented in a base interface, it must use the explicit interface implementation syntax.

Bir temel tür listesi temel bir sınıfı ve ara birimleri içerdiğinde, temel sınıfın listede ilk sırada olması gerekir.When a base type list contains a base class and interfaces, the base class must come first in the list.

Bir ara birimi uygulayan bir sınıf, o ara birimin üyelerini açıkça uygulayabilir.A class that implements an interface can explicitly implement members of that interface. Açıkça uygulanan bir üyeye, bir sınıfın örneği üzerinden erişilemez, yalnızca ara birimin bir örneği üzerinden erişilebilir.An explicitly implemented member cannot be accessed through a class instance, but only through an instance of the interface. Ayrıca, varsayılan arabirim üyelerine yalnızca arabirimin bir örneği üzerinden erişilebilir.In addition, default interface members can only be accessed through an instance of the interface.

Açık arabirim uygulama hakkında daha fazla bilgi için bkz. Açık arabirim uygulama.For more information about explicit interface implementation, see Explicit Interface Implementation.

ÖrnekExample

Aşağıdaki örnek, ara birim uygulamasını gösterir.The following example demonstrates interface implementation. Bu örnekte, ara birim özellik bildirimini, sınıf ise uygulamayı içerir.In this example, the interface contains the property declaration and the class contains the implementation. IPoint öğesini uygulayan bir sınıfın herhangi bir örneği x ve y tamsayı özelliklerine sahiptir.Any instance of a class that implements IPoint has integer properties x and y.

interface IPoint
{
   // Property signatures:
   int X
   {
      get;
      set;
   }

   int Y
   {
      get;
      set;
   }

   double Distance
   {
       get;
   }
}

class Point : IPoint
{
   // Constructor:
   public Point(int x, int y)
   {
      X = x;
      Y = y;
   }

   // Property implementation:
   public int X { get; set; }

   public int Y { get; set; }

   // Property implementation
   public double Distance =>
      Math.Sqrt(X * X + Y * Y);

}

class MainClass
{
   static void PrintPoint(IPoint p)
   {
      Console.WriteLine("x={0}, y={1}", p.X, p.Y);
   }

   static void Main()
   {
      IPoint p = new Point(2, 3);
      Console.Write("My Point: ");
      PrintPoint(p);
   }
}
// Output: My Point: x=2, y=3

C# dili belirtimiC# language specification

Daha fazla bilgi için C# dil belirtiminin arabirimler bölümüne ve varsayılan arabirim üyeleri için özellik belirtimine bakın -C# 8,0For more information, see the Interfaces section of the C# language specification and the feature specification for Default interface members - C# 8.0

Ayrıca bkz.See also