"Soyut sınıf" ve "arabirim" benzer kavramlardır; arabirim ikisinin daha soyut olmasını sağlar. Farklılaşan bir faktör, soyut sınıfların gerektiğinde türetilmiş sınıflar için yöntem uygulamaları sağlamasıdır. Bununla birlikte, C # 'da, bu farklılaşma faktörü, arayüz yöntemleri için uygulamaların sağlanmasına olanak tanıyan uzatma yöntemlerinin tanıtımıyla azaltılmıştır. Bir başka farklılaşma faktörü, bir sınıfın sadece bir soyut sınıfı miras alabilmesidir (yani, çoklu miras yoktur), ancak çoklu arayüzleri uygulayabilmesidir. Bu arayüzleri daha az kısıtlayıcı ve daha esnek hale getirir. Öyleyse, C # 'da, uzatma yöntemlerine sahip arabirimler yerine soyut sınıfları ne zaman kullanmalıyız?
Arabirim + uzantı yöntemi modelinin kayda değer bir örneği, IEnumerable
çok sayıda uzantı yöntemi ile uygulanan her tür için sorgu işlevinin sağlandığı LINQ'dur.