在c#中将对象转换为子类

时间:2013-06-13 20:36:47

标签: c# oop subclass

我无法在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())创建的对象添加一些方法。

5 个答案:

答案 0 :(得分:4)

你做不到。

考虑一下这个例子:

class Fruit {
    // bla
}

class Banana : Fruit {
    // bla
}

以下是不可能的

Fruit f = new Fruit();
Banana b = (Banana)f;

因为不是所有的水果都是香蕉

答案 1 :(得分:1)

这是不可能的。 Polymorphism在另一个方向工作 - 使用下降的类,就像它是更通用的父类一样。

但是,可以向现有类添加方法。这称为extension method。但是,它将被添加到为其扩展而编写的类的所有实例中。

答案 2 :(得分:1)

你不能这样做。您的声明是Child继承自Parent。没有什么可以说父母必须是孩子。

如果您使用了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会留下未覆盖的超集的一部分 - 对于子级的新成员,方法和属性,将没有已定义的功能。