这在很大程度上取决于您真正想要实现的目标。在某些情况下,Steve Czetty 建议的是最好的选择。
在其他情况下,您可以只保持所有属性不同,并在基类中有一个虚拟方法,例如在这种情况下返回一个“字符串”,然后您可以在控制台或任何您希望的内容中编写它。
编辑:您可以按照 Olivier 的建议覆盖ToString 。但只有当你觉得你要重新调整的是“对象的字符串表示”时。
公共抽象类 A { 公共字符串 PropertyA { 获取;放; }
public virtual string GetString() //
{
return PropertyA;
}
}
public class B:A
{
public string PropertyB { get; set; }
public override string GetString()
{
return PropertyB;
}
}
public class C:A
{
public string PropertyC { get; set; }
public override string GetString()
{
return string.Format("{0} - {1}", base.GetString(), PropertyC) // for example if you wanted to do something more complex
}
}
现在,如果您需要的东西不能像这样解决,您可以按 Dennis Suggested 进行投射。
还有另一种可能性:您可以使用访问者模式。在这里你可以找到几种实现它的方法。
就这样你有一个想法,你最终会拥有一个类似于这样的类:(这将取决于你真正想要实现的目标)你必须实现一些其他基本的东西(接口和一些方法),但是从对基类,您将能够轻松调用相应的“访问”方法。我添加的链接中有很多细节。
class ClassicVisitor : IAVisitor
{
public string SuperComplexStringResult { get;set; }
public void Visit(B b) { SuperComplexStringResult = String.Format("Super Complex Stuff + {0}", b.PropertyB); }
public void Visit(C c) { SuperComplexStringResult = String.Format("Super Complex Stuff + {0}", c.PropertyC); }
}