Hem sınıf mirası hem de arayüzlerin her ikisi de kendi yerine sahiptir. Kalıtım, "bir" anlamına gelirken, arayüz, "neye benzeyeceğini" tanımlayan bir sözleşme sağlar.
Arayüzleri daha sık kullanmanın hiç de kötü bir uygulama olmadığını söyleyebilirim. Şu anda Bill Wagner tarafından "Etkili C # - 50 C #'nuzu Geliştirmenin Özel Yolları" nı okuyorum. 22 numaralı madde, ve "Mirasa Arayüzleri Tanımlama ve Uygulama" tercihini belirtir.
Genel olarak, kavramsal olarak ilişkili türler arasında belirli bir ortak davranış uygulaması tanımlamam gerektiğinde temel sınıfları kullanırım. Daha sık arayüzleri kullanıyorum. Aslında, normalde bir sınıf oluşturmaya başladığımda bir sınıf için bir arayüz tanımlayarak başlıyorum ... sonunda arayüzü derlemesem bile, bunun genel API'sini tanımlayarak başlamak için yardımcı olduğunu buluyorum. Baştan beri sınıf. Hem arayüzü uygulayan hem de uygulama mantığının aynı olduğu birden fazla sınıfa sahip olduğumu tespit edersem, ancak o zaman türler arasında ortak bir temel sınıf uygulamanın mantıklı olup olmadığını kendime soracağım.
Bill Wagners kitabından birkaç alıntı ...
türetilmiş tüm sınıflar hemen bu davranışı içerir. Bir arabirime üye eklemek, bu arabirimi uygulayan tüm sınıfları keser. Yeni yöntemi içermeyecekler ve artık derlenmeyeceklerdir. Her uygulayıcı, yeni üyeyi dahil etmek için bu türü güncellemelidir. Soyut bir temel sınıf ve bir arayüz arasında seçim yapmak, soyutlamalarınızı zaman içinde en iyi şekilde nasıl destekleyeceğiniz sorusudur. Arayüzler sabittir: Herhangi bir türün uygulayabileceği bir dizi işlevsellik için arayüzü bir sözleşme olarak yayınlarsınız. Temel sınıflar zamanla uzatılabilir. Bu uzantılar türetilmiş her sınıfın bir parçası haline gelir. İki model, çoklu arabirimleri desteklerken uygulama kodunu yeniden kullanmak için karıştırılabilir. " Yeni yöntemi içermeyecekler ve artık derlenmeyeceklerdir. Her uygulayıcı, yeni üyeyi dahil etmek için bu türü güncellemelidir. Soyut bir temel sınıf ve bir arayüz arasında seçim yapmak, soyutlamalarınızı zaman içinde en iyi şekilde nasıl destekleyeceğiniz sorusudur. Arayüzler sabittir: Herhangi bir türün uygulayabileceği bir dizi işlevsellik için arayüzü bir sözleşme olarak yayınlarsınız. Temel sınıflar zamanla uzatılabilir. Bu uzantılar türetilmiş her sınıfın bir parçası haline gelir. İki model, çoklu arabirimleri desteklerken uygulama kodunu yeniden kullanmak için karıştırılabilir. " Yeni yöntemi içermeyecekler ve artık derlenmeyeceklerdir. Her uygulayıcı, yeni üyeyi dahil etmek için bu türü güncellemelidir. Soyut bir temel sınıf ve bir arayüz arasında seçim yapmak, soyutlamalarınızı zaman içinde en iyi şekilde nasıl destekleyeceğiniz sorusudur. Arayüzler sabittir: Herhangi bir türün uygulayabileceği bir dizi işlevsellik için arayüzü bir sözleşme olarak yayınlarsınız. Temel sınıflar zamanla uzatılabilir. Bu uzantılar türetilmiş her sınıfın bir parçası haline gelir. İki model, çoklu arabirimleri desteklerken uygulama kodunu yeniden kullanmak için karıştırılabilir. " Herhangi bir türün uygulayabileceği bir işlevsellik kümesi için arayüzü bir sözleşme olarak yayınlarsınız. Temel sınıflar zamanla uzatılabilir. Bu uzantılar türetilmiş her sınıfın bir parçası haline gelir. İki model, çoklu arabirimleri desteklerken uygulama kodunu yeniden kullanmak için karıştırılabilir. " Herhangi bir türün uygulayabileceği bir işlevsellik kümesi için arayüzü bir sözleşme olarak yayınlarsınız. Temel sınıflar zamanla uzatılabilir. Bu uzantılar türetilmiş her sınıfın bir parçası haline gelir. İki model, çoklu arabirimleri desteklerken uygulama kodunu yeniden kullanmak için karıştırılabilir. "
"Kodlama arayüzleri, diğer geliştiricilere baz sınıf tiplerine kodlamadan daha fazla esneklik sağlar."
"Bir sınıf için API tanımlamak için arayüzleri kullanmak daha fazla esneklik sağlar."
"Türünüz özellikleri sınıf türleri olarak gösterdiğinde, arayüzün tamamını o sınıfa gösterir. Arabirimleri kullanarak, yalnızca istemcilerin kullanmasını istediğiniz yöntemleri ve özellikleri göstermeyi seçebilirsiniz."
"Temel sınıflar, ilgili beton türleri arasındaki ortak davranışları tanımlar ve uygular. Arayüzler, ilişkisiz beton türlerinin uygulayabileceği atomik işlevsellik parçalarını tanımlar. Her ikisi de kendi yerlerine sahiptir. Sınıflar oluşturduğunuz türleri tanımlar. Arabirimler, bu türlerin davranışını işlevsellik parçaları olarak tanımlar. Farklılıkları anlarsanız, değişim karşısında daha dayanıklı olan daha etkileyici tasarımlar yaratırsınız. İlgili türleri tanımlamak için sınıf sıradüzenlerini kullanın. Bu türlerde uygulanan arayüzleri kullanarak işlevselliği gösterin. "