2010-09-15 51 views
0

我有一个叫Resource类,这是由一种叫做ResourceMeta上溯造型没有固定参考派生类型

我需要上溯造型ResourceMetaResource没有它仍然认为它类继承是一种类型的ResourceMeta

当我尝试使用实体框架保存我的对象时,它会抱怨映射不存在,这是正确的,因为它将试图保存ResourceMeta而不是Resource

我试过(Resource)resourceMeta但是这仍然保留ResourceMeta的类型只是限制Resource可用的属性。

+0

假设Resource是ResourceMeta(ResourceMeta:Resource类)的超类,从ResourceMeta到Resource的投射将是向上投射,而不是向下投射。 – TheFogger 2010-09-15 12:12:43

+0

你是对的,抱歉的混淆。 – Tablet 2010-09-15 12:41:27

回答

0

简单的话不可能的,你需要创建资源的新实例,然后返回

2

这是不可能的,你不能改变一个对象的实际类型。

要从ResourceMeta对象获取Resource对象,必须使用ResourceMeta对象中的数据创建新的Resource对象。

+0

我只认为这是可能的,因为点3在http://stackoverflow.com/questions/2458025/how-to-properly-downcast-in-c-with-a-swig-generated-interface但是我没有似乎有方法getCPtr – Tablet 2010-09-15 12:43:15

+0

@Shahin:是的,有可能破解一个对象,认为它是一个不同的对象,但这很容易炸毁。例如,垃圾收集器在内存中偶尔地移动对象,如果它移动了一个对象,认为它是一个不同的类型,它可能会损坏其他对象或内存管理本身。 – Guffa 2010-09-15 12:56:32

+0

啊,不是我准备冒险的事情......那么这可能是通过序列化作为期望的对象和反序列化? – Tablet 2010-09-15 13:02:32

0

是继承ResourceMetaResource实例之间的关系的正确表示。如果没有,你可以支持组合而不是继承,并且以这种方式当你想保存资源实例时,你可以做resourceMetaInstance.Resource