gpt4 book ai didi

c# - 一种将基类型转换为派生类型的方法

转载 作者:IT王子 更新时间:2023-10-29 03:53:07 24 4
gpt4 key购买 nike

我不确定这是否是一件奇怪的事情,或者它是否是某种代码味道......但我想知道是否有一种方法(某种 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());
}

我知道这看起来很愚蠢,但是有什么办法可以完成这类事情吗?

最佳答案

不健全,在“管理”语言中。这是向下转型,并且没有明智的向下转型方式来处理它,这正是您所描述的原因(子类提供的内容多于基类 - 这种“更多”从何而来?)。如果您真的希望特定层次结构有类似的行为,您可以为派生类型使用构造函数,将基类型作为原型(prototype)。

可以构建一些具有反射的东西来处理简单的情况(没有加法状态的更具体的类型)。一般来说,只需重新设计即可避免问题。

编辑:糟糕,不能在基类型/派生类型之间编写转换运算符。微软试图“保护你”免受你自己的伤害,这是一个奇怪的现象。好吧,至少他们远没有 Sun 差。

关于c# - 一种将基类型转换为派生类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com