Bir arayüz kullanırken özel ayarlayıcıyı nasıl uygularsınız?


139

Bazı özelliklere sahip bir arayüz oluşturdum.

Arayüz yoksa, sınıf nesnesinin tüm özellikleri şu şekilde ayarlanır:

{ get; private set; }

Ancak, bir arabirim kullanılırken buna izin verilmez, bu nasıl yapılabilir ve eğer öyleyse nasıl?

Yanıtlar:


266

Arayüzde sadece gettermülkünüz için tanımlayabilirsiniz

interface IFoo
{
    string Name { get; }
}

Ancak, sınıfınızda bir private setter-

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}

1
Arabirim yalnızca alıcı içeriyor olsa bile, ayarlayıcının herkese açık olup olmadığından şikayetçi görünmüyor.
Mike Cheel

6
@MikeCheel Thats çünkü arayüz sadece minimum yöntemleri / erişimcileri tanımlar. Nesneyi doğrudan kullanırken daha fazlasını ekleyebilirsiniz. Bir nesneyi arabirim türü olarak kullanırken, yalnızca arabirimde tanımlanan yöntemler / erişimciler kullanılabilir.
Marcello Nicoletti

29

Arayüz genel API'yı tanımlar. Genel API yalnızca alıcı içeriyorsa arayüzde yalnızca alıcıyı tanımlarsınız:

public interface IBar
{
    int Foo { get; }    
}

Özel ayarlayıcı, genel api'nin (diğer herhangi bir özel üye olarak) bir parçası değildir, bu nedenle onu arabirimde tanımlayamazsınız. Ancak arayüz uygulamasına (özel) üyeler eklemekte özgürsünüz. Aslında ayarlayıcının genel veya özel olarak mı uygulanacağı yoksa ayarlayıcı mı olacağı önemli değildir:

 public int Foo { get; set; } // public

 public int Foo { get; private set; } // private

 public int Foo 
 {
    get { return _foo; } // no setter
 }

 public void Poop(); // this member also not part of interface

Setter arayüzün bir parçası değildir, bu nedenle arayüzünüzden çağrılamaz:

 IBar bar = new Bar();
 bar.Foo = 42; // will not work thus setter is not defined in interface
 bar.Poop(); // will not work thus Poop is not defined in interface
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.