Farklı yetenek kombinasyonlarına sahip nesne koleksiyonlarına sahip olmanın yaygın olup olmayacağını ve kodun bir koleksiyon içinde onu destekleyen bu öğeler üzerinde bir eylem gerçekleştirmek isteyip istemediğini düşünün . Öyleyse ve bazı eylemler için yararlı desteği olmayan nesneler için mantıklı bir "varsayılan davranış" olacaksa, yalnızca kullanışlı bir şekilde davranabilenlerin değil, çok çeşitli sınıflar tarafından arabirimlerin uygulanması yararlı olabilir.
Örneğin, sadece birkaç tür yaratığın Woozles'e sahip olabileceğini ve bu tür yaratıkların bir NumerOfWoozles
mülke sahip olmasını istediğini varsayalım . Böyle bir mülk, sadece Woozles'a sahip olabilen yaratıklar tarafından uygulanan bir arayüzdeyse, karışık tür yaratıklardan oluşan bir koleksiyon tarafından tutulan toplam Woozles sayısını bulmak isteyen kodun şöyle bir şey söylemesi gerekir:
int total = 0;
foreach (object it in creatures)
{
IWoozleCountable w = trycast(it, IWoozleCountable);
if (w != null) total += w.WoozleCount;
}
Bununla birlikte, WoozleCount bir Creature / ICreature üyesiyse, birkaç alt tür Creature'ın her zaman sıfır döndüren varsayılan WoozleCount uygulamasını geçersiz kılacak olsa da, kod basitleştirilebilir:
int total = 0;
foreach (ICreature it in creatures)
total += it.WoozleCount;
Bazı insanlar, her Creature'ın yalnızca birkaç alt tür için gerçekten yararlı olan bir WoozleCount özelliği uygulamasına dikkat çekerken , bu türler olduğu bilinen öğelerle yararlı olsa da olmasa da , bu özellik tüm türler için anlamlı olacaktır, ve "mutfak lavabo" arayüzü trycast operatörü daha az bir kod kokusu olarak kabul ediyorum.
IEnumerable
,IEquatable
vb