向下倾斜 - 基础

时间:2016-04-12 22:58:04

标签: c#

我是C#的新手,并且在这里搜索了这个主题。我想我错过了一些基本的东西,如果这是一个愚蠢的问题,请道歉。

我有两个对象FullAlbum和Album。 FullAlbum继承自Album。我试图将Album对象转换为FullAlbum对象,以便我可以使用它。我认为这就像“向下倾倒”一样简单。它从Album到FullAlbum但是我无法让它工作,我得到一个运行时错误,表示它无法从一个转换为另一个。

我已经有一个Album对象_album,它在我调试时填充。我正在尝试;

FullAlbum _fullAlbum = new FullAlbum();
_fullAlbum = _album as FullAlbum;

我希望将所有属性从_album复制到FullAlbum。我错过了这一点吗?

2 个答案:

答案 0 :(得分:0)

您始终可以将FullAlbum强制转换为相册,即将特定对象视为更通用的类型。另一种方法并不能保证有效。没有复制任何属性,您只需指定程序查看变量的方式(可以说在哪个角度下)。

编辑:可以将Album转换为FullAlbum并使其在编译时工作,但是在运行时它只有在FullAlbum实际存储在该Album变量中时才有效。否则会抛出运行时错误。

示例:

class A { }

class B: A { }

//this will work
var A = new B();
var B = (B)A;

//but not this
var A = new A();
var B = (B)A;

答案 1 :(得分:0)

FullAlbum _fullAlbum = new FullAlbum();
_fullAlbum = _album as FullAlbum;

这不符合您的期望。 as运算符说“如果此对象实际上是FullAlbum,则返回一个FullAlbum指针,否则返回null”。它不是复制或转换操作。

你说你想'将一个专辑对象转换成一个fullalbum对象'你不能通过魔法来做到这一点,你必须创建一个FullAlbum对象并填充它。

'as'运算符只是为了恢复这个实际上已经是FullAlbum对象的事实,你有一个Album指针。