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

Arabirim, soyut olmayan veya uygulaması gereken bir grup ilgili class işlevin struct tanımlarını içerir. Arabirim, bir static uygulamaya sahip olması gereken yöntemleri tanımlayabilir. C# 8.0'dan başlayarak, bir arabirim üyeler için varsayılan bir uygulama tanımlayabilir. Bir arabirim alanlar, otomatik uygulanan özellikler veya özellik gibi olaylar gibi örnek verileri bildirene kadar.

Arabirimleri kullanarak, örneğin bir sınıftaki birden çok kaynağın davranışını dahil edin. Bu özellik C# dilinde önemlidir çünkü dil sınıfların birden çok devralmayı desteklemez. Ayrıca, başka bir yapıdan veya sınıftan gerçekten devralılamaylarından, yapılarda devralmanın benzetimini yapmak için bir arabirim kullansanız gerekir.

Bir arabirimi tanımlamak için aşağıdaki interface örnekte olduğu gibi anahtar sözcüğünü kullanabilirsiniz.

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 harfle I başlar.

Arabirimi uygulayan herhangi bir sınıf veya yapı, arabirimin belirtilen imzayla eşleşen bir IEquatable<T> yöntem için bir tanım Equals içermesi gerekir. Sonuç olarak, sınıf örneğinin aynı sınıfın başka bir örneğine eşit olup olmadığını belirleyecek bir yöntemi içeren bir sınıfa IEquatable<T> Equals güvenebilirsiniz.

tanımı IEquatable<T> için bir uygulama sağlamaz. Equals 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, dizinciler veya bu dört üye türün herhangi bir birleşimini içerebilir. Arabirimler statik oluşturucular, alanlar, sabitler veya işleçler içerebilir. Arabirimde örnek alanları, örnek oluşturucuları veya sonlandırıcılar yer alamamalıdır. Arabirim üyeleri varsayılan olarak geneldir ve , veya gibi erişilebilirlik değiştiricilerini açıkça public protected internal private protected internal private protected belirtebilirsiniz. Bir private üyenin varsayılan uygulaması olması gerekir.

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

Bir sınıf veya yapı bir arabirim uygulayan, sınıf veya yapı arabirimin bildirilen tüm üyeleri için bir uygulama sağlasa da için varsayılan bir uygulama sağlamaz. Ancak, bir temel sınıf bir arabirim uygulayıyorsa, temel sınıftan türetilen herhangi bir sınıf bu uygulama devralınır.

Aşağıdaki örnek, arabiriminin uygulamasını IEquatable<T> gösterir. uygulama sınıfı, Car yönteminin bir uygulamasını Equals sağlasa gerekir.

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 dizinleri, arabirimde tanımlanan bir özellik veya dizin oluşturma için ek erişimciler tanımlayabilir. Örneğin, bir arabirim get erişimcisi olan bir özellik bildirebilirsiniz. Arabirimi uygulayan sınıf, hem hem de küme erişimcisi ile aynı get özelliği bildirebilirsiniz. Ancak, özellik veya dizine ekici 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ınır. Türetilmiş arabirim uygulayan bir sınıf türetilmiş arabirimin temel arabirimlerinin tüm üyeleri de dahil olmak üzere türetilmiş arabirimde tüm üyeleri uygulamalı. Bu sınıf, türetilmiş arabirime veya onun temel arabirimlerinden herhangi biri örtülü olarak dönüştürülmüş olabilir. Bir sınıf, devralınan temel sınıflar aracılığıyla veya diğer arabirimlerin devralınan arabirimler aracılığıyla bir arabirimi birden çok kez içerebilir. Ancak, sınıfı yalnızca bir arabirimin uygulamasını yalnızca bir kez ve yalnızca sınıf () sınıfının tanımının bir parçası olarak arabirimi bildirse class ClassName : InterfaceName sağlar. Arabirimi uygulayan bir temel sınıf devralınmış olduğundan arabirimi devralınmışsa, temel sınıf arabirimin üyelerinin uygulamasını sağlar. Ancak, türetilmiş sınıf devralınan uygulama kullanmak yerine tüm sanal arabirim üyelerini yeniden basitleştirebilirsiniz. Arabirimler bir yöntemin varsayılan uygulamasını bildirse de, bu arabirimi uygulayan herhangi bir sınıf bu uygulama devralınır (Arabirim üyesinde varsayılan uygulamaya erişmek için sınıf örneğini arabirim türüne atabilirsiniz).

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

Arabirimlerin özeti

Arabirim aşağıdaki özelliklere sahiptir:

  • 8.0'dan önceki C# sürümlerinde arabirim, yalnızca soyut üyelere sahip soyut bir temel sınıfa benzer. Arabirimi uygulayan bir sınıf veya yapının tüm üyelerini uygulaması gerekir.
  • C# 8.0'dan başlayarak, bir arabirim üyelerinin bir veya hepsi için varsayılan uygulamaları tanımlayabilir. Arabirimi uygulayan bir sınıf veya yapının varsayılan uygulamaları olan üyeleri uygulamasına gerek yoktur. Daha fazla bilgi için bkz. varsayılan arabirim yöntemleri.
  • Bir arabirimin örneği doğrudan silinene kadar devam etmemektedir. Üyeleri, arabirimini uygulayan herhangi bir sınıf veya yapı tarafından uygulanır.
  • Bir sınıf veya yapı birden çok arabirim kullanabilir. Bir sınıf bir temel sınıfı devralabilir ve aynı zamanda bir veya daha fazla arabirim gerçekleştirebilirsiniz.