请看下面(伪)模式:基类中的递归抽象ToString()?
public abstract class Animal {
public abstract AnimalType { get; }
public abstract override string ToString() {
return String.Format("{0}={1}", AnimalType, this.ToString());
^
// does this even work?
}
}
这将迫使每一个从它派生类是这样的:
public sealed class Horse : Animal {
// horse specific declaration
private string _name;
private int _age;
// forced
public override AnimalType {
get { return AnimalType.Horse; }
}
// horse specific declaration
public Name {
get { return _name; }
public Horse(string name, string age) {
_name = name;
_age = age;
}
// forced
public override string ToString() {
return String.Format("{0}({1}", _name, _age);
}
}
这将产生以下的输出:
Horse =MyHorseName(3);
Tiger =SomeOtherAttributesBecauseTigerIsDifferent
问题是:当我想f orce ToString()在派生类中,我不能在基类中有任何功能。我希望派生类提供它自己的字符串表示,但仍然希望有一个字符串表示,告诉我在这种情况下,它是什么类型的动物。
正是你想要达到什么目的? –
'公共抽象重写字符串ToString()'????????????? OMG,这超过了我的期望:-) –
你也许可以解释为什么要强制压倒一切,并提供(重写)的基本功能? (从我的理解 - 您的解决方案可能是你想要的东西已经在基本/一般格式及部分在子类中有部分数据) –