无法创建抽象类的实例 - 来自文档

时间:2014-11-05 13:26:51

标签: c# .net

我正在尝试使用Microsoft文档中提供的代码解码Tiff图像:

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.tiffbitmapdecoder(v=vs.110).aspx

然而,当我到达这一行时:

Image myImage = new Image();

我收到一条错误,告诉我无法创建抽象类的实例。我已经知道你不能创建一个抽象类的实例,我想知道为什么这在文档中?

以下是导致问题的整个代码块:

Image myImage = new Image();
myImage.Source = bitmapSource;
myImage.Stretch = Stretch.None;
myImage.Margin = new Thickness(20);

它还说System.Drawing.Image不包含.Source.Stretch.Margin的定义,这让我觉得我需要使用不同的命名空间?所以当我查找Image.Source的文档时:

http://msdn.microsoft.com/en-us/library/system.drawing.image(v=vs.110).aspx

它说它使用System.Windows.Controls命名空间,当然它是一个包含PresentationFramework.dll中定义的类的命名空间 - 我已经拥有它。

我缺少什么想法?

2 个答案:

答案 0 :(得分:3)

System.Windows.Controls.Image和System.Drawing.Image之间可能存在模糊的引用冲突。如果您没有使用它,请尝试删除System.Drawing.dll引用,或者只使用完全限定的类名(命名空间+类名)

答案 1 :(得分:1)

文档 - which you linked to - 正如您所说,包含以下代码行:

Image myImage = new Image();

你说你得到这个编译错误:

  

无法创建抽象类或接口的实例

这意味着你使用了错误的Image类。

在.NET框架和周围的核心库中,只有2个这样的Image类:

框架使用第一个作为图像解码和编码的基类,除了它是 true 基类之外,它对你的问题看起来很有希望,所以它是抽象的,解释了你得到的错误信息。

演示框架WPF使用另一个类来表示屏幕上的图像。但是,这个类不是抽象。

所以你很可能在这里使用了错误的类并且已经进入了System.Drawing.Image类,而你确实想要使用System.Windows.Controls.Image类。

有几种方法可以解决此问题:

  1. 在您的文件中添加using指令:

    using System.Windows.Controls;
    

    但是,这可能只是用另一个编译器错误替换现有的编译器错误,即

      

    'Image'是'System.Drawing.Image'和'System.Windows.Controls.Image'之间的模糊引用

    要让现有代码确定您使用的是错误的类,您可能已经拥有using System.Drawing;。如果你可以删除它,太棒了!否则,......

  2. 添加using别名以专门控制您正在谈论的Image班级:

    using Image = System.Windows.Controls.Image;
    

    可以工作,然后可能不会。如果确实如此,太棒了!否则,......

  3. 使用完整命名空间前缀类的使用:

    System.Windows.Controls.Image myImage = new System.Windows.Controls.Image();