【发布时间】:2011-03-01 22:37:39
【问题描述】:
鉴于我有一个设置了一些属性的 Fruit 实例,并且我想将这些属性放入一个新的 Pear 实例中(因为这个特殊的 Fruit 恰好具有梨的品质),实现这一目标的最佳方法是什么效果?
例如,我们不能简单地将水果转换为梨,因为并非所有水果都是梨:
public static class PearGenerator {
public static Pear CreatePear () {
// Make a new generic fruit.
Fruit genericFruit = new Fruit();
// Upcast it to a pear. (Throws exception: Can't cast a Fruit to a Pear.)
Pear pear = (Pear)genericFruit;
// Return freshly grown pear.
return ( pear );
}
}
public class Fruit {
// some code
}
public class Pear : Fruit {
public void PutInPie () {
// some code
}
}
谢谢!
更新:
我不控制“new Fruit()”代码。我的出发点是我有一个可以使用的水果。我需要以某种方式把那个水果变成一个新的梨。是否可以一一复制所有属性?
【问题讨论】:
-
这不是向上转换,您正在尝试将超类型“向下转换”为派生类型,这是不合法的
-
你想让你的未知水果做什么梨的事情?你怎么能保证 Fruit 能够做这些 Pear 的事情呢?
-
你真的不希望你的代码变成梨形,是吗? {G}