SORU
24 ŞUBAT 2010, ÇARŞAMBA


Nasıl temel aramak.taban.() yöntemini?

// Cannot change source code
class Base
{
    public virtual void Say()
    {
        Console.WriteLine("Called from Base.");
    }
}

// Cannot change source code
class Derived : Base
{
    public override void Say()
    {
        Console.WriteLine("Called from Derived.");
        base.Say();
    }
}

class SpecialDerived : Derived
{
    public override void Say()
    {
        Console.WriteLine("Called from Special Derived.");
        base.Say();
    }
}

class Program
{
    static void Main(string[] args)
    {
        SpecialDerived sd = new SpecialDerived();
        sd.Say();
    }
}

Sonuç:

Called from Special Derived.
Called from Derived. /* this is not expected */
Called from Base.

Nasıl bu orta sınıf çok SpecialDerived sınıf yazabilirsiniz ben ""'In yöntemi denir? Türetilmiş

GÜNCELLEME: İstiyorum sebebi Türetilmiş sınıf yerine diğer uygulamalar bir sürü içerir Türetilmiştir tabanından devralır. base.base.method() burada yapamam bu yana, en iyi yolu, aşağıdaki işlemleri yapmak için sanırım?

// Kaynağı değiştir kod olamaz

class Derived : Base
{
    public override void Say()
    {
        CustomSay();

        base.Say();
    }

    protected virtual void CustomSay()
    {
        Console.WriteLine("Called from Derived.");
    }
}

class SpecialDerived : Derived
{
    /*
    public override void Say()
    {
        Console.WriteLine("Called from Special Derived.");
        base.Say();
    }
    */

    protected override void CustomSay()
    {
        Console.WriteLine("Called from Special Derived.");
    }
}

CEVAP
24 ŞUBAT 2010, ÇARŞAMBA


Bu kötü bir programlama uygulama ve C İzin Verilmiyor#. Kötü bir programlama uygulama için

  • Bu grandbase ayrıntılarını tabanının Uygulama Detayları; onlara güvenmek zorunda olmamalısın. Temel sınıf grandbase soyutlama bir overtop sağlıyor, bu soyutlama kullanarak, bunu önlemek için bir bypass bina değil.

  • Ne yapar, çünkü tabanından türetilmiş ve yeniden uzatmak istiyorum. Ne gibi ve çevresinde çalışmak istiyorum daha işin varsa, neden ilk etapta bunu elde ettin? Eğer bu kullanmak ve genişletmek istediğiniz işlevi eğer grandbase kendine kaynaklanıyor.

  • Bankası Bankası grandbase yöntemlerini nasıl kullandığını detaylarını tarafından tutulan bir güvenlik ya da anlamsal tutarlılık amacıyla belirli değişmezler gerektirebilir. Temel türetilmiş bir sınıf bu değişmezler tutan kod atlamak için izin tutarsız, bozuk bir devlet Bankası koyabilirsiniz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • michellefeng's channel

    michellefeng

    26 Kasım 2006
  • Numberphile

    Numberphile

    15 EYLÜL 2011
  • tychoadragmire

    tychoadragmi

    20 Mart 2006