Mając coś takiego to:Jak zaimplementować klasę podstawową za pomocą metody, a mimo to wymusić zastąpienie klasy pochodnej?
public abstract class AAA
{
protected abstract virtual string ToString() // Error
{
// Base Stuff
}
}
public abstract class BBB : AAA
{
public override string ToString()
{
// Use base.ToString();
// More Stuff
}
}
czytam kolejny post (abstract method in a virtual class) wiedźma była całkiem jak moje pytanie, ale istnieje niewielka różnica. Chciałbym, aby AAA.ToString() miał bazowe zachowanie i wymusić klasy pochodnej, aby je przesłonić.
Wiem, że mogłem zrobić coś takiego (przewiń w dół), ale szukałem właściwej drogi.
public abstract class AAA
{
public abstract string ToString();
protected string ToString2()
{
// Base Stuff
}
}
public class BBB : AAA
{
public override string ToString()
{
// Use base.ToString2();
// More Stuff
}
}
Mógłbym też prawdopodobnie uczynić interfejs IAAA i budować moją klasę BBB jak
public class BBB : AAA, IAAA { ... }
ale nie wygląda dobrze dla mnie.
Dzięki, Twój edit uświadomiły mi coś ważnego! Nawet jeśli znajdę cudowny sposób na zdefiniowanie ToString() w klasie bazowej i wymuszenie nadpisania w klasie pochodnej, po prostu nie ma mowy, żebym mógł wymusić zastąpienie, aby użyć ToString()! Znalazłem również ten post przez MVP o wymuszaniu przesłonięcia: http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/c25b6477-b990-4284-abaf-801ddf18207c. Thanks again sir. – Tipx
Cieszę się z usług. Ten post jest autorstwa Marca Gravell'a ... jest on dobrze znany również w SO :) –
Jak to się ma do poniższej odpowiedzi OP? – Armbrat