我不确定这是否是一件奇怪的事情,或者这是否是某种代码的味道…但是我想知道是否有一种方法(某种oop模式会很好)“投射”基本类型为其派生类型的形式。我知道这没有多大意义,因为派生类型将具有父级不提供的其他功能,这从根本上来说并不健全。但是有什么方法可以做到这一点吗?这是一个代码示例,以便我可以更好地解释我的要求。
public class SomeBaseClass { public string GetBaseClassName {get;set;} public bool BooleanEvaluator {get;set;} } public class SomeDerivedClass : SomeBaseClass { public void Insert(SqlConnection connection) { //...random connection stuff cmd.Parameters["IsItTrue"].Value = this.BooleanEvalutar; //... } } public static void Main(object[] args) { SomeBaseClass baseClass = new SomeBaseClass(); SomeDerivedClass derClass = (SomeDerivedClass)baseClass; derClass.Insert(new sqlConnection()); }
我知道这看起来很愚蠢,但是有什么办法可以完成这种事情吗?
不太好用“托管”语言。这是 垂头丧气的 ,并且没有合理的方法来处理它,这正是您所描述的原因(子类提供的不仅仅是基类-“更多”是从哪里来的?)。如果您确实希望特定层次结构具有类似的行为,则可以将构造函数用于派生类型,这些派生类型会将基本类型作为原型。
可以用反射来构建一些可以处理简单情况的东西(没有加法状态的更具体的类型)。通常,只需重新设计就可以避免该问题。
编辑:糟糕,无法在基本/派生类型之间编写转换运算符。微软试图“保护您”免受自己攻击的怪异行为。嗯,至少它们远没有Sun差。