2

我无法找到 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())

4

5 回答 5

4

你不能那样做。

考虑这个例子:

class Fruit {
    // bla
}

class Banana : Fruit {
    // bla
}

以下是不可能的

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

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

于 2013-06-13T20:42:51.223 回答
2

这是不可能的。多态性在另一个方向上起作用 - 使用下降类,就好像它是更通用的父类一样。

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

于 2013-06-13T20:42:10.493 回答
2

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

如果你用过Parent p = new Child(),那么你的演员就可以了。

如果您想向现有对象添加方法,那么我认为您应该研究Extension methods,因为它们是为了扩展您无法修改的类而创建的。

于 2013-06-13T20:43:05.583 回答
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;  
    }
}
于 2013-06-13T20:42:43.333 回答
0

您正在讨论多态性的概念。您的要求是不可能的。原因很明显,稍微解释一下:

该类child可以根据需要扩展该类的功能...parent添加大量新方法和属性等...child是. 因此,转换为将留下一部分未涵盖的超集 - 将没有为子项的新成员、方法和属性定义的功能。parentparentchild

于 2013-06-13T20:44:03.810 回答