我正在阅读C#Image类。这个类是抽象的。由于它是一个抽象类,我无法创建一个对象,但它有一个返回Image.FromFile(string path);
对象的方法Bitmap
。现在在代码中,Image img = Image.FromFile(path)
有效,但Bitmap img = Image.FromFile(path)
没有。但是,Bitmap img = (Bitmap) Image.FromFile(path)
确实有效!
我的问题是:如果方法返回类型是Bitmap,为什么我需要显式转换为Bitmap?发生了什么事?
澄清一下:我知道MSDN文档说该方法返回一个Image。当我使用断点检查时,图像包含一个位图。即使它确实持有一个Image,这对我来说会更加混乱,因为Image是抽象的,所以我不可能拥有一个Image对象,不是吗?我错过了一些明显的东西吗?
答案 0 :(得分:0)
Image.FromFile
的返回类型不一个Bitmap
,它是Image
(MSDN Docs)。
public static Image FromFile(
string filename,
bool useEmbeddedColorManagement
)
因此,您需要显式强制转换才能获得所需的类型。
编辑。 Bitmap
继承自Image
,定义为public sealed class Bitmap : Image
。虽然当您检查从FromFile
返回的对象时,您会将基础类型视为位图,但该方法旨在处理“超类”Image
,因此它将对象视为对象。这使得也可以继承Image
的其他类型也使用此方法。经典的多态性在起作用......