özellik" /> özellik" />
SORU
28 Kasım 2008, Cuma


Ya da alt sınıfların özellikleri ağır basan alanları

Soyut temel sınıf var ve bir alan ya da bu üst sınıftan devralan her sınıfta farklı bir değeri olacak bir özellik bildirmek istiyorum.

Örneğin TEMEL sınıf yöntemi - geçersiz kılma türü Olabilirdi. "Bu nesne olduğunu söylemek başvuru evet, bu bir baseclass tanımlamak istiyorum ben^>özellik/alan". Bunu görebiliyorum, ama merak ettiğim üç yolu - bunu yapmanın en iyi veya kabul yolu nedir? var Acemi soru, üzgünüm.

Seçenek 1:< / ^ br . Soyut bir Özelliği ve devralınan sınıfları geçersiz kılmak. Zorlanan bu faydaları (geçersiz kılmak için) ve temiz. Ama biraz yanlış sabit-kodu bir değer döndürmek yerine bir alanı çevreliyor geldi ve birkaç satır kod yerine sadece. Ben de "ama bu daha az önemli (ve muhtemelen farkında değilim ki bunu önlemek için bir yolu yoktur)." ayarlamak için bir gövde ilan var

abstract class Father
{
    abstract public int MyInt { get; set;}
}

class Son : Father
{
    public override int MyInt
    {
        get { return 1; }
        set { }
    }
}

Seçenek 2< / ^ br . Ortak Alan (veya korumalı bir alan) beyan ve açıkça devralınan sınıf iptal edebilirim. Bu örnekte ben "ve muhtemelen bunu yapabilirim, ama yanlış geliyor ve bütün mesele bu polimorfizmi, kırıyor." yeni kullanmak için bir uyarı verecektir İyi bir fikir gibi gelmiyor...

abstract class Mother
{
    public int MyInt = 0;
}

class Daughter : Mother
{
    public int MyInt = 1;
}

Seçenek 3< / ^ br . Korumalı bir alan kullanın ve yapıcı değerini ayarlayabiliyorum. Bu çok uygun geldi ama bana yapıcı her zaman bu ayarlar sağlanması kullanır ve birden çok yüklenmiş kurucular ile her zaman kod yolu değerini ayarlayın olmayacak bir şans var.

abstract class Aunt
{
    protected int MyInt;
}

class Niece : Aunt
{
    public Niece()
    {
        MyInt = 1;
    }
}

Teorik bir soru. ve cevabı yalnızca 1 seçenek olması gerekiyor sanırım . ben^>güvenliseçenek, ama sadece C ile başa alıyorum# ve daha deneyimli insanlara sormak istedim.

CEVAP
29 Kasım 2008, CUMARTESİ


Üç çözümleri sadeceSeçenek 1polimorfik.

Alanları kendileri tarafından geçersiz kılınamaz. İşte bu yüzdenSeçenek 2veriryenianahtar kelime uyarı.

Uyarı için çözüm eklemek için değil, bu “yeni” kelime, ama Seçenek 1 uygulamak için.

Eğer alan polimorfik olmak gerekir Eğer bir Özellik sarın.

Seçenek 3eğer polimorfik davranış ihtiyacın varsa TAMAM ama. Çalışma zamanında özellik Myİnt erişildiğinde, türetilmiş sınıf döndürülen değer üzerinde hiçbir kontrole sahip olduğunu unutmayın gerekir. Kendisi tarafından temel sınıf bu değer, dönen yeteneğine sahiptir.

Bu emlak gerçekten polimorfik bir uygulama, türetilmiş sınıflara izin görünebilirkontrol.

abstract class Parent
{
    abstract public int MyInt { get; }
}

class Father : Parent
{
    public override int MyInt
    {
        get { /* Apply formula "X" and return a value */ }
    }
}

class Mother : Parent
{
    public override int MyInt
    {
        get { /* Apply formula "Y" and return a value */ }
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro Pos

    21 ŞUBAT 2013
  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012