Nie można, nie bardzo też rozumiem sens takiego działania. Zależnie od potrzeb można stworzyć wiele klas pochodnych dziedziczących z klasy bazowej. Nie rozumiem też sensu wykorzystywania wielu różnych typów generycznych w ramach jednej klasy. Logicznie ujmując zaprowadzi do stworzenia jakiejś super klasy do przechowywania wszystkiego. Jeżeli chcemy w klasie np. dodawać do jakiegoś kontenera obiekty różnego typu, można wydzielić im wspólny interfejs np.
Chciałem sobie trochę ułatwić sprawę. Przykład z życia. Mam sobie klasę bazową:
public class Base
{
public virtual void AddItem(Base item)
{
}
}
Po klasie Base dziedziczy mi kilka innych klas. I teraz któraś z tych klas może trzymać inne elementy, np:
public class Parent: Base
{
List<DerivedFromBase> m_items;
public override void AddItem(Base item)
{
}
}
W tym momencie, żeby dodać item do listy, muszę zrobić rzutowanie. Ale najpierw muszę się upewnić, czy item jest odpowiedniego typu i wychodzi mi coś takiego:
public override void AddItem(Base item)
{
Debug.Assert(item is DerivedFromBase); //albo jakiś if ... throw albo try..catch przy rzutowaniu
m_items.Add((DerivedFromBase)item);
}
Oczywiście, mógłbym mieć od razu listę zdefiniowaną jako List<Base>, ale ja tu oczekuję obiektu konkretnego typu.
Teraz mam też obiekty, które mogą trzymać kilka rodzajów podobiektów, np:
public class MultiParent: Base
{
List<DerivedFromBase> m_dfbItems;
List<OtherDerivedFromBase> m_odfbItems;
public override void AddItem(DerivedFromBase item)
{
}
public override void AddItem(OtherDerivedFromBase item)
{
}
}
Chciałem to zrobić dziedzicząc po prostu po klasie bazowej (gdyż klasa bazowa robi coś jeszcze w swojej implementacji), ale widzę, że się tak nie da. Odpowiedź DibbyDum zaakceptowałem, bo gdyby nie to, że klasa bazowa robi coś jeszcze w swojej implementacji, to użycie interfejsów w taki sposób byłoby właśnie tym, czego szukałem :)