SORU
16 HAZİRAN 2011, PERŞEMBE


Ördek yazarak C# derleyici

NotBudeğilveya C ördek yazarak uygulamak taklit hakkında bir soru#...

Birkaç yıldır etkisi altında bazı C# dil özellikleri veri yapıları dilin kendisi bana hep garip tavuk ve yumurta bir senaryo gibi görünüyordu () tanımlanan depdendent. Örneğin, foreach döngü kullanılabilir IEnumerable uygulanan türleri ile kullanım için olduğunu sanıyordum.

O zamandan beri geldim gayet güzel bir C# derleyicisi kullanır ördek yazarak olup olmadığını belirlemek için bir nesne kullanılabilir bir foreach döngü birini arıyorum GetEnumerator yöntem yerine IEnumerable. Bu tavuk ve yumurta bilmece kaldırır gibi çok mantıklı.

Bu using blok ile durum gibi görünmüyor değil mi neden ve IDisposable olarak biraz kafam karıştı. Derleyici ördek yazarak & kullan Dispose bir yöntem göremiyorum özel bir sebebi var mı? Bu tutarsızlık nedeni nedir?

Belki de başka bir şey IDisposable ile kaputun altında gong var?

Neden tartışıyorhiçElden IDisposable uygulayan yoktu yöntemi bu sorunun kapsamı dışında bir:) bir nesne var

CEVAP
16 HAZİRAN 2011, PERŞEMBE


IDisposable burada özel bir şey yok - ama varbir şeyler kullanımına özel.

# 2, foreach Bu ördek türü kullanarak C önceydisadecekesinlikle yazılan yineleyici ve değer üzerinden yineleme tek yolu da boks olmadan tipler. bir uygulamak olduğunu BenşüpheliC# ve .NET, foreach başlangıç jenerik olurdu vardıgerekliÖrdek yazarak geçirdi IEnumerable<T> yerine, ve değildir.

Şimdi derleyici aklıma başka yerlerde bir çift ördek yazarak bu tür kullanır:

  • Koleksiyon başlatıcılar bakmak için uygun Add aşırı yük (yanı sıra türü olan uygulamak IEnumerable sadece göstermek için bu gerçekten bir koleksiyon bir tür); bu izin için esnek ekleyerek tek öğeleri, anahtar/değer çiftleri vb
  • SERİ (Select vb.) - bu SERİ IEnumerable<T> kendisini değiştirmek zorunda kalmadan esnekliği, birden fazla tür karşı aynı sorgu ifade biçimi sağlayan, sağlar
  • # 5 C ifadeleri GetAwaiter 16* / OnCompleted / GetResult *hangi awaiter bir tür dönmek için gerektirir bekliyor

Her iki durumda da bu kavramı daha önce olmadığı daha kolay mevcut türleri ve aralarındaki özelliği eklemek için yapar.

IDisposable ilk sürümü beri çerçevesinde olduğu göz önüne alındığında, ördek fayda using deyimi yazarak olacağını sanmıyorum. Açıkça tartışma IDisposable uygulamadan Dispose olması için sebep görmemezlikten gelmeye çalışıyordu biliyorum, ama önemli bir nokta olduğunu düşünüyorum. Dilinde bir özelliği uygulamak için iyi bir sebep olmalı, ve ördek yazarak bilinen bir arabirim destekleyen üstünde ve ötesinde bir özelliği olduğunu iddia ediyorum. Eğer bunu yaparken net fayda ise yok, dili sona ermeyecek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DeAdPiXel6667

    DeAdPiXel666

    2 Ocak 2010
  • Sergio Lafuente Rubio

    Sergio Lafue

    11 Aralık 2008
  • sknbp

    sknbp

    16 Kasım 2006