SORU
3 Kasım 2008, PAZARTESİ


't neden C# Statik Yöntemler bir Arabirim Uygulamak için İzin?

Neden C# bu şekilde tasarlanmıştır?

Anladığım kadarıyla, bir arabirim yalnızca davranışlarını açıklar ve belirli davranışları uygulanan sınıflar arayüz uygulanması için bir sözleşme yükümlülüğü anlatan amaca hizmet eder.

Eğer sınıfları ortak bir yöntem bu davranış kuralları uygulamak istiyorsanız, Neden olmasın?

İşte aklımdaki bir örnek:

// These items will be displayed in a list on the screen.
public interface IListItem {
  string ScreenName();
  ...
}

public class Animal: IListItem {
    // All animals will be called "Animal".
    public static string ScreenName() {
        return "Animal";
    }
....
}

public class Person: IListItem {

    private string name;

    // All persons will be called by their individual names.
    public string ScreenName() {
        return name;
    }

    ....

 }

CEVAP
3 Kasım 2008, PAZARTESİ


Bunu yapamazsın neden soruyorsun varsayarsak:

public interface IFoo {
    void Bar();
}

public class Foo: IFoo {
    public static void Bar() {}
}

Bu bana mantıklı, anlamsal yapmaz. Yöntemleri bir arabirim belirli bir etkileşim için sözleşme belirtmek için orada bir nesne olmalıdır. Statik yöntemler değil izin ver sana etkileşim ile bir nesne kendini konumu uygulamanız olabilir yapılan statik, gerekebilir sor kendine eğer bu yöntem gerçekten ait arabirimi.

public class Animal: IListItem {
    /* Can be tough to come up with a different, yet meaningful name!
     * A different casing convention, like Java has, would help here.
     */
    public const string AnimalScreenName = "Animal";
    public string ScreenName(){ return AnimalScreenName; }
}

Daha karmaşık bir durum için, her zaman başka bir statik metot ve temsilci olduğu için olabilir. Denemeye gelip bir örnek, ben bulamadım herhangi bir nedenle yapardınız bir şey önemsiz olmayan hem statik ve örnek bağlamında, yani yedek bir Falanca blob, al gibi bir göstergesi olmayabilir iyi bir fikir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009
  • SaMmM123

    SaMmM123

    3 Mayıs 2006