Arabirimler - birden çok tür için davranışı tanımlama

Arabirim, soyut class olmayan veya struct uygulaması gereken ilgili işlevler grubunun tanımlarını içerir. Bir arabirim, bir uygulaması olması gereken yöntemleri tanımlayabilir static . Arabirim, üyeler için varsayılan bir uygulama tanımlayabilir. Arabirim alanlar, otomatik olarak uygulanan özellikler veya özellik benzeri olaylar gibi örnek verileri bildirmeyebilir.

Örneğin, arabirimleri kullanarak bir sınıftaki birden çok kaynaktan gelen davranışı ekleyebilirsiniz. Dil, sınıfların birden çok devralma özelliğini desteklemediğinden bu özellik C# dilinde önemlidir. Ayrıca, yapıların devralma benzetimini yapmak istiyorsanız bir arabirim kullanmanız gerekir çünkü bunlar başka bir yapıdan veya sınıftan devralamaz.

Aşağıdaki örnekte gösterildiği gibi anahtar sözcüğünü interface kullanarak bir arabirim tanımlarsınız.

interface IEquatable<T>
{
    bool Equals(T obj);
}

Arabirimin adı geçerli bir C# tanımlayıcı adı olmalıdır. Kural gereği, arabirim adları büyük Iile başlar.

Arabirimi uygulayan herhangi bir sınıf veya yapı, arabirimin IEquatable<T> belirttiği imzayla eşleşen bir Equals yöntemin tanımını içermelidir. Sonuç olarak, sınıfın bir örneğinin aynı sınıfın başka bir örneğine eşit olup olmadığını belirleyebileceği bir Equals yöntem içerecek şekilde uygulayan IEquatable<T> bir sınıfa güvenebilirsiniz.

tanımı IEquatable<T> için Equalsbir uygulama sağlamaz. Bir sınıf veya yapı birden çok arabirim uygulayabilir, ancak bir sınıf yalnızca tek bir sınıftan devralabilir.

Soyut sınıflar hakkında daha fazla bilgi için bkz . Soyut ve Korumalı Sınıflar ve Sınıf Üyeleri.

Arabirimler örnek yöntemleri, özellikler, olaylar, dizin oluşturucular veya bu dört üye türünün herhangi bir bileşimini içerebilir. Arabirimler statik oluşturucular, alanlar, sabitler veya işleçler içerebilir. C# 11 ile başlayarak, alan olmayan arabirim üyeleri olabilir static abstract. Arabirim örnek alanları, örnek oluşturucuları veya sonlandırıcılar içeremez. Arabirim üyeleri varsayılan olarak geneldir ve , protected, , internal, private, protected internalveya private protectedgibi publicerişilebilirlik değiştiricilerini açıkça belirtebilirsiniz. Bir private üyenin varsayılan uygulaması olmalıdır.

Arabirim üyesi uygulamak için, uygulayan sınıfın ilgili üyesi genel, statik olmayan ve arabirim üyesiyle aynı ada ve imzaya sahip olmalıdır.

Not

Bir arabirim statik üyeler bildirdiğinde, bu arabirimi uygulayan bir tür de aynı imzaya sahip statik üyeler bildirebilir. Bunlar ayrıdır ve üyeyi belirten tür tarafından benzersiz olarak tanımlanır. Bir tür içinde bildirilen statik üye, arabirimde bildirilen statik üyeyi geçersiz kılmaz .

Arabirim uygulayan bir sınıf veya yapı, arabirim tarafından sağlanan varsayılan bir uygulama olmadan bildirilen tüm üyeler için bir uygulama sağlamalıdır. Ancak, bir temel sınıf bir arabirim uygularsa, temel sınıftan türetilen tüm sınıflar bu uygulamayı devralır.

Aşağıdaki örnekte arabiriminin bir uygulaması gösterilmektedir IEquatable<T> . uygulayan sınıfı, Caryönteminin Equals bir uygulamasını sağlamalıdır.

public class Car : IEquatable<Car>
{
    public string? Make { get; set; }
    public string? Model { get; set; }
    public string? Year { get; set; }

    // Implementation of IEquatable<T> interface
    public bool Equals(Car? car)
    {
        return (this.Make, this.Model, this.Year) ==
            (car?.Make, car?.Model, car?.Year);
    }
}

Bir sınıfın özellikleri ve dizin oluşturucuları, arabirimde tanımlanan bir özellik veya dizin oluşturucu için ek erişimciler tanımlayabilir. Örneğin, bir arabirim get erişimcisi olan bir özellik bildirebilir. arabirimini uygulayan sınıf, hem hem getde küme erişimcisiyle aynı özelliği bildirebilir. Ancak, özellik veya dizin oluşturucu açık uygulama kullanıyorsa, erişimcilerin eşleşmesi gerekir. Açık uygulama hakkında daha fazla bilgi için bkz . Açık Arabirim Uygulaması ve Arabirim Özellikleri.

Arabirimler bir veya daha fazla arabirimden devralabilir. Türetilmiş arabirim, üyeleri temel arabirimlerinden devralır. Türetilmiş arabirim uygulayan bir sınıf, türetilmiş arabirimin temel arabirimlerinin tüm üyeleri dahil olmak üzere türetilmiş arabirimdeki tüm üyeleri uygulamalıdır. Bu sınıf örtük olarak türetilmiş arabirime veya temel arabirimlerinden herhangi birine dönüştürülebilir. Bir sınıf, devraldığı temel sınıflar aracılığıyla veya diğer arabirimlerin devraldığı arabirimler aracılığıyla bir arabirimi birden çok kez içerebilir. Ancak, sınıfı bir arabirimin yalnızca bir kez ve yalnızca sınıfın arabirimini sınıfın (class ClassName : InterfaceName) tanımının bir parçası olarak bildirdiği bir uygulama sağlayabilir. Arabirimi uygulayan bir temel sınıfı devraldığınız için arabirim devralınırsa, temel sınıf arabirimin üyelerinin uygulamasını sağlar. Ancak türetilmiş sınıf, devralınan uygulamayı kullanmak yerine tüm sanal arabirim üyelerini yeniden canlandırabilir. Arabirimler bir yöntemin varsayılan uygulamasını bildirdiğinde, bu arabirimi uygulayan tüm sınıflar bu uygulamayı devralır (Arabirim üyesindeki varsayılan uygulamaya erişmek için sınıf örneğini arabirim türüne atamanız gerekir).

Temel sınıf, sanal üyeleri kullanarak arabirim üyelerini de uygulayabilir. Bu durumda, türetilmiş bir sınıf, sanal üyeleri geçersiz kılarak arabirim davranışını değiştirebilir. Sanal üyeler hakkında daha fazla bilgi için bkz . Çok biçimlilik.

Arabirimler özeti

Arabirim aşağıdaki özelliklere sahiptir:

  • 8.0'dan önceki C# sürümlerinde arabirim, yalnızca soyut üyeleri olan soyut bir temel sınıf gibidir. Arabirimi uygulayan bir sınıf veya yapı tüm üyelerini uygulamalıdır.
  • C# 8.0 sürümünden başlayarak, bir arabirim üyelerinden bazıları veya tümü için varsayılan uygulamaları tanımlayabilir. Arabirimi uygulayan bir sınıf veya yapının varsayılan uygulamaları olan üyeleri uygulaması gerekmez. Daha fazla bilgi için bkz . varsayılan arabirim yöntemleri.
  • Arabirim doğrudan örneklenemez. Üyeleri, arabirimini uygulayan herhangi bir sınıf veya yapı tarafından uygulanır.
  • Bir sınıf veya yapı birden çok arabirim uygulayabilir. Bir sınıf bir temel sınıfı devralabilir ve ayrıca bir veya daha fazla arabirim uygulayabilir.