interface (C# Başvurusu)

Arabirim bir sözleşme tanımlar. Bu sözleşmeyi uygulayan herhangi classbir , record veya struct arabiriminde tanımlanan üyelerin bir uygulamasını sağlamalıdır. Arabirim, üyeler için varsayılan bir uygulama tanımlayabilir. Ayrıca, ortak işlevler için tek bir uygulama sağlamak üzere üyeleri tanımlayabilir static . C# 11'de başlayan bir arabirim, uygulayan bir türün bildirilen üyeleri sağlaması gerektiğini bildirmek için veya üyelerini tanımlayabilir static abstractstatic virtual . Yöntemler genellikle static virtual bir uygulamanın bir dizi aşırı yüklenmiş işleç tanımlaması gerektiğini bildirir.

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.

Daha fazla bilgi ve örnek için bkz . Arabirimler.

Örnek arabirim

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ının veya sınıfın üyesi olabilir. Arabirim bildirimi, aşağıdaki üyelerin bildirimlerini (herhangi bir uygulama olmadan imzalar) içerebilir:

Varsayılan arabirim üyeleri

Bu önceki üye bildirimleri genellikle bir gövde içermez. Arabirim üyesi bir gövde bildirebilir. Bir arabirimdeki üye gövdeleri varsayılan uygulamadır. Gövdeleri olan üyeler arabirimin geçersiz kılma uygulaması sağlamayan sınıflar ve yapılar için "varsayılan" bir uygulama sağlamasına izin verir. Arabirim şunları içerebilir:

Statik soyut ve sanal üyeler

C# 11 ile başlayarak, bir arabirim alanlar dışında tüm üye türleri için ve static virtual üyelerini bildirebilirstatic abstract. Arabirimler, uygulama türlerinin işleçleri veya diğer statik üyeleri tanımlaması gerektiğini bildirebilir. Bu özellik, genel algoritmaların sayı benzeri davranışı belirtmesini sağlar. .NET çalışma zamanındaki sayısal türlerdeki örnekleri görebilirsiniz, örneğin System.Numerics.INumber<TSelf>. Bu arabirimler, birçok sayısal tür tarafından uygulanan yaygın matematik işleçlerini tanımlar. Derleyicinin derleme zamanında ve static abstract yöntemlerine static virtual yapılan çağrıları çözümlemesi gerekir. static virtual Arabirimlerde bildirilen ve static abstract yöntemleri, sınıflarda bildirilen veya abstract yöntemlerine virtual benzer bir çalışma zamanı dağıtım mekanizmasına sahip değildir. Bunun yerine, derleyici derleme zamanında kullanılabilen tür bilgilerini kullanır. Bu nedenle, static virtual yöntemler neredeyse özel olarak genel arabirimlerde bildirilir. Ayrıca, veya yöntemlerini bildiren static virtual çoğu arabirim, tür parametrelerinden birinin bildirilen arabirimi uygulaması gerektiğini static abstract bildirir. Örneğin, INumber<T> arabirimi uygulaması INumber<T>gerektiğini bildirirT. Derleyici, arabirim bildiriminde bildirilen yöntemlere ve işleçlere çağrıları çözümlemek için tür bağımsız değişkenini kullanır. Örneğin, int türü uygular INumber<int>. tür parametresi T tür bağımsız değişkenini intbelirtirse, static bildirilen int üyeler çağrılır. Alternatif olarak, tür bağımsız değişkeni olduğunda double , static tür üzerinde double bildirilen üyeler çağrılır.

Önemli

Arabirimlerde bildirilen ve static virtual yöntemleri için static abstract yöntem gönderimi, bir ifadenin derleme zamanı türü kullanılarak çözümlenir. bir ifadenin çalışma zamanı türü farklı bir derleme zamanı türünden türetilirse, temel (derleme zamanı) türündeki statik yöntemler çağrılır.

Bu özelliği, arabirimlerdeki statik soyut üyeler üzerinde öğreticiyle çalışarak deneyebilirsiniz.

Arabirim devralma

Arabirimler örnek durumu içermeyebilir. Statik alanlara artık izin verilse de örnek alanlarına arabirimlerde izin verilmiyor. Örnek otomatik özellikleri , gizli bir alanı örtük olarak bildireceğinden arabirimlerde desteklenmez. Bu kuralın özellik bildirimleri üzerinde hafif bir etkisi vardır. Bir arabirim bildiriminde, aşağıdaki kod veya structiçinde olduğu gibi otomatik olarak uygulanan bir class özellik bildirmez. Bunun yerine, varsayılan uygulaması olmayan ancak arabirimi uygulayan herhangi bir türde uygulanması gereken bir özellik bildirir:

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

Bir ara birim, bir veya daha fazla temel ara birimden devralınabilir. Bir arabirim, temel arabirimde uygulanan bir yöntemi geçersiz kıldığında, açık arabirim uygulama söz dizimini kullanmalıdır.

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.

Bir ara birimi uygulayan bir sınıf, o ara birimin üyelerini açıkça uygulayabilir. Açıkça uygulanan üyeye bir sınıf örneği üzerinden erişilemiyor, ancak yalnızca arabirimin bir örneği üzerinden erişilebiliyor. Ayrıca, varsayılan arabirim üyelerine yalnızca arabirimin bir örneği aracılığıyla erişilebilir.

Açık arabirim uygulaması hakkında daha fazla bilgi için bkz . Açık Arabirim Uygulaması.

Örnek arabirim uygulaması

Aşağıdaki örnek, ara birim uygulamasını gösterir. Bu örnekte, ara birim özellik bildirimini, sınıf ise uygulamayı içerir. IPoint öğesini uygulayan bir sınıfın herhangi bir örneği x ve y tamsayı özelliklerine sahiptir.

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 belirtimi

Daha fazla bilgi için C# dil belirtiminin Arabirimler bölümüne, C# 8 - Varsayılan arabirim üyeleri için özellik belirtimi ve C# 11 için özellik belirtimi - arabirimlerdeki statik soyut üyeler bölümüne bakın

Ayrıca bkz.