SORU
23 Temmuz 2011, CUMARTESİ


C# arabirimleri - Ne'In anlamı?

Ben bir python arka plan ve ben gitmeye çalışıyorum kulpları ile C#, çünkü bir kaç adam ve ben yapmaya karar verdi bir proje seçti ve C# için (merak etmeyin maçın sebep).

Arayüzleri nedeni gerçekten beni aşıyor. Yok anladığım kadarıyla, için geçici bir çözüm, onu varolmayan çoklu kalıtım C# (ya da bana öyle söylendi).

Ama size daha sonra sınıfta yeniden tanımlamak için yine bazı üyeleri ve işlevleri, önceden tanımladığınız. Böylece arabirim yapma bunu bir daha yapmak için, bu yüzden benim gözümde gerçek bir ihtiyaç önceden tanımlamak için gereksiz. Sadece sözdizimsel... (alınmayın Lütfen. benim için önemsiz hissediyor İşe yaramaz şeyler gibi önemsiz).

Aşağıdaki örnek, bir yığın farklı C# arabirimleri bir iş parçacığı alınan verilen taşma, sadece temel bir sınıf bir arayüzü yerine Pizza oluşturun istiyorum.

Çok minnettar eğer birisi gerçekten bana çok mantıksız geliyor, çünkü bu biraz ışık tutacak, olsaydı, olurdu :(

Çok teşekkürler.

örnek (farklı bir yığın taşması katkı alınan) kolay

public interface IPizza
{
    public void Order();

}

public class PepperoniPizza : IPizza
{
    public void Order()
    {
        //Order Pepperoni pizza
    }
}

public class HawaiiPizza : IPizza
{
    public void Order()
    {
        //Order HawaiiPizza
    }
}

CEVAP
29 Temmuz 2011, Cuma


Kimse gerçekten yararlı nasıl düz açısından anlattı, bir şans (ve Shamim cevabı bir fikir biraz çalmak) vereceğim.

Pizza fikri al servisinden sipariş sağlar. Pizza çok tip ve her pizza sistemde sipariş hazırlanıyor için ortak bir eylem olabilir. Her pizzahazırladıama her pizzafarklı hazırlanır. Bir pizza sistem muhtemelen bazı maddeler restoranda kullanılabilir olun ve bir kenara verdi doldurulmuş örneğin, kalın hamurlu pizza için gerekli değildir.

Bu kodu yazarken, yani teknik olarak böyle yapabilirsin

public class Pizza()
{
    public void Prepare(PizzaType tp)
    {
        switch (tp)
        {
            case PizzaType.StuffedCrust:
                // prepare stuffed crust ingredients in system
                break;

            case PizzaType.DeepDish:
                // prepare deep dish ingredients in system
                break;

            //.... etc.
        }
    }
}

Ancak, kalın hamurlu pizza (C# açısından) gerektirebilir farklı özellikler için set Prepare() yöntem daha doldurulmuş kabuk, ve böylece sonunda çok opsiyonel özellikleri ve sınıf değil ölçek (ne olursa ekleyin yeni pizza çeşitleri).

Bunu çözmek için doğru yolu arabirimi kullanmak için. Arabirimi tüm Pizza hazırlanabilir olduğunu beyan eder, ama her pizza farklı şekilde hazırlanabilir. Eğer öyleyse aşağıdaki arabirimleri varsa:

public interface IPizza
{
    public void Prepare();
}

public class StuffedCrustPizza : IPizza
{
    public void Prepare()
    {
        // Set settings in system for stuffed crust preparations
    }
}

public class DeepDishPizza : IPizza
{
    public void Prepare()
    {
        // Set settings in system for deep dish preparations
    }
}

Şimdi sipariş kodu işleme pizza türleri maddeleri işlemek için emredildi tam olarak bilmeniz gerekmez. Sadece vardır:

public PreparePizzas(IList<IPizza> pizzas)
{
    foreach (IPizza pizza in pizzas)
        pizza.Prepare();
}

Olsa bile her tür pizza hazırlanan farklı, Bu bölüm kodu yok etmek için bakım ne tür bir pizza biz ilgili çok bilen var olmak diye bir pizza ve dolayısıyla her çağrı için Prepare otomatik olarak hazırlamak her pizza düzgün dayanarak kendi yazın bile koleksiyonuna sahip birden fazla tür pizza.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DetroitBORG

    DetroitBORG

    29 Temmuz 2008
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • michal lelkowski

    michal lelko

    9 Temmuz 2006