SORU
5 ŞUBAT 2009, PERŞEMBE


Neden'arabirim üyeleri korudum t?

Arabirimler erişim korumalı üyeler ilan karşı argüman nedir? Bu, örneğin, geçersiz:

public interface IOrange
{
    public OrangePeel Peel { get; }
    protected OrangePips Seeds { get; }
}

Bu örnekte, 8 ** arabirimi uygulayıcıları garanti ederen azındanonların mirasçılarına OrangePips bir örnek sağlar. Eğer uygulayıcı istiyorsa, kapsamı tam 10 ** genişletmek için.

public class NavelOrange : IOrange
{
    public OrangePeel Peel { get { return new OrangePeel(); } }
    protected OrangePips Seeds { get { return null; } }
}

public class ValenciaOrange : IOrange
{
    public OrangePeel Peel { get { return new OrangePeel(); } }
    public OrangePips Seeds { get { return new OrangePips(6); } }
}

Arabirimler protected üye hedefi için destek sözleşmesi sağlamaktırvarisleri(alt sınıflar), örneğin:

public class SpecialNavelOrange : NavelOrange
{
    ...
    // Having a seed value is useful to me.
    OrangePips seeds = this.Seeds; 
    ...
}

(Kuşkusuz, bu structler için işe yaramaz)

private bir durum veya arabirimleri internal değiştirici pek göremiyorum, ama public protected düzenleyiciler hem de destekleyen mükemmel makul görünüyor.

interfaces protected üyelerin programını açıklayan interfaces onları tamamen ayırarak çalışacağım:

Hadi aşağıdaki gibi şeyler ilan ediyoruz ki mirasçısı sözleşmelerin uygulanması için yeni bir C# anahtar kelime, support hayal et

public support IOrangeSupport
{
    OrangePips Seeds { get; }
}

Bu onların mirasçılarına korunan üyeleri sağlamak için sözleşme sınıfları için bize izin verir:

public class NavelOrange : IOrange, IOrangeSupport
{
    public OrangePeel Peel { get { return new OrangePeel(); } }
    protected OrangePips Seeds { get { return null; } }
}

Bu sınıflar zaten en başta protected üyeleri sağlayarak bu Sözleşme anlamına gelir çünkü bu özellikle yararlıdır.

Ama o zaman da şöyle yapabiliriz:

public interface IOrange : IOrangeSupport
{
   ...
}

Böylece IOrange uygulayan tüm sınıflar için IOrangeSupport uygulamak ve protected özellikle üye sağlamak için gerekli olan şu anda yapabileceğimiz bir şey değil.

CEVAP
5 ŞUBAT 2009, PERŞEMBE


Herkes kamu görevlileri, Uygulama Detayları sadece sahip bir arabirimi noktası dövülmüş sanırım. Aradığınızı abstract class.

public interface IOrange
{
    OrangePeel Peel { get; }
}

public abstract class OrangeBase : IOrange
{
    protected OrangeBase() {}
    protected abstract OrangePips Seeds { get; }
    public abstract OrangePeel Peel { get; }
}

public class NavelOrange : OrangeBase
{
    public override OrangePeel Peel { get { return new OrangePeel(); } }
    protected override OrangePips Seeds { get { return null; } }
}

public class ValenciaOrange : OrangeBase
{
    public override OrangePeel Peel { get { return new OrangePeel(); } }
    protected override OrangePips Seeds { get { return new OrangePips(6); } }
}

Edit: adil sınıfı bir Süs türeyen bir PlasticOrange varsa, sadece İOrange ve Tohumları değil yöntem korumalı. uygulayabilen iddia Bu gayet iyi. Tanımı gereği bir arayüz, bir sınıf ve alt sınıflar arasında bir arayan ve bir nesne arasında, anlaşma değildir. Soyut sınıf bu kavram için geldik." Ve bu gayet iyi. Aslında senin önerin dil üzerinden inşa bozmadan başka bir sınıf alt anahtarı başka bir yapıdır. Benim için, bu mantıklı değil.

Eğer bir sınıf bir alt sınıf oluşturma alt sınıfı, taban sınıfının bir firmadır. Temel sınıfın herhangi bir korunan üyeleri tamamen farkında olmalıdır. Ama eğer aniden temel sınıf dışarı geçmek istiyorsanız, ALT başka İOrange ile çalışmalıdır olmasının bir anlamı yok.

Adil bir soru olduğunu düşünüyorum, ama köşe bir durum gibi görünüyor ve açıkçası herhangi bir fayda görmüyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • njhaley

    njhaley

    24 NİSAN 2006
  • steven johns

    steven johns

    11 Mart 2011