我无法在C#上找到这个帖子。有没有办法做到这一点..
class parent {
public parent() { }
}
class child : parent {
public child() { }
}
class Program {
static void Main(string[] args) {
parent p = new parent();
child c = (child)p;
}
}
我想这样做的原因是为通过调用函数(UIGraphics.GetCurrentContext())
创建的对象添加一些方法。
答案 0 :(得分:4)
你做不到。
考虑一下这个例子:
class Fruit {
// bla
}
class Banana : Fruit {
// bla
}
以下是不可能的
Fruit f = new Fruit();
Banana b = (Banana)f;
因为不是所有的水果都是香蕉
答案 1 :(得分:1)
这是不可能的。 Polymorphism在另一个方向工作 - 使用下降的类,就像它是更通用的父类一样。
但是,可以向现有类添加方法。这称为extension method。但是,它将被添加到为其扩展而编写的类的所有实例中。
答案 2 :(得分:1)
如果您使用了Parent p = new Child()
,那么您的演员阵容就可以了。
如果要向现有对象添加方法,那么我认为您应该研究Extension methods
,因为它们是为了扩展您无法修改的类而创建的。
答案 3 :(得分:0)
您的基类引用所引用的实例不是您的子类的实例。
Parent c = new child();
Parent p = new parent();
Child good = (Child )c; // OK
Child fail = (Child )p; // Throws InvalidCastException
要使转换成功,您正在转发的实例必须是您正在向下转发的类的实例。
为了实现这一点,您必须执行以下操作:
class Program {
static void Main(string[] args) {
parent p = new child();
child c = (child)p;
}
}
答案 4 :(得分:0)
您正在讨论多态性的概念。您要求的是不可能的。原因很明显,有一点解释:
允许child
类扩展parent
类的功能但它想要...添加大量新方法和属性等... child
是< parent
的强>超集。因此,将parent
转换为child
会留下未覆盖的超集的一部分 - 对于子级的新成员,方法和属性,将没有已定义的功能。