Powiedzmy mam interfejs wiele wiele odrębnych klas wdrożenia:Obejście do bycia w stanie umieścić kod w interfejsach
public interface IHaveObjects
{
object firstObject();
}
(Uwaga: Nie mogę zrobić to abstrakcyjna klasa podstawowa jako Twórcy implementacji IHaveObjects może Mam już klasę podstawową.)
Teraz chcę dodać nową metodę do interfejsu, aby jeden implementator interfejsu mógł mieć dla niego specjalne zachowanie. Idealnie byłoby zrobić coś takiego:
public interface IHaveObjects
{
object firstObject();
object firstObjectOrFallback()
{
return firstObject();
}
}
następnie udać się do tego jednego implementor interfejsu i nadać jej ręczne:
public class ObjectHaverPlus : IHaveObjects
{
public override object IHaveObjects.firstObjectOrFallback()
{
return firstObject() ?? getDefault();
}
}
Jednak to jest zabronione w C#, aby zapewnić ciało metody w sposób interfejs i chciałbym uniknąć odwiedzania każdego pojedynczego implementatora w wersji IHaveObjects
, aby pominąć definicję firstObjectOrFallback()
. (Wyobraź sobie, że istnieją setki lub tysiące)
Czy można to zrobić bez dużej ilości wkleić?
Dlaczego nie utworzyć drugiego interfejsu dla tego specjalnego przypadku? Nie możesz mieć wielu dziedziczeń klas, ale możesz wdrożyć wiele interfejsów. – Tim