从密封派生类继承的解决方法?

时间:2013-11-19 22:54:55

标签: c# oop inheritance

我想从派生类SealedDerived派生,但我不能,因为该类是sealed。如果我改为从基类Base派生,是否有任何方法可以“欺骗”并将this引用重定向到SealedDerived类的对象?

例如,像这样:

public class Base { ... }

public sealed class SealedDerived : Base { ... }

public class MyDerivedClass : Base
{
    public MyDerivedClass()
    {
        this = new SealedDerived();  // Won't work, but is there another way?
    }
}

编辑根据请求,这里是上下文:我正在移植一个.NET类库,它将System.Drawing.Bitmap广泛用于 Windows应用商店库。我在 Windows Store 中解决缺少System.Drawing.Bitmap类的主要想法是实现一个从Bitmap继承的虚拟WriteableBitmap类,从而能够返回 Windows Store 类的位图对象。很遗憾,WriteableBitmapsealed。它的基类BitmapSource(当然)没有密封,但另一方面实际上没有提供操纵图像的方法。因此我的困境。

这样的事情:

using Windows.UI.Xaml.Media.Imaging;

namespace System.Drawing {
  public class Bitmap : BitmapSource {
    public Bitmap(int width, int height) {
      this = new WriteableBitmap(width, height);  // Will not work...
      ...
    }
  }
}

理想情况下,我希望我的假Bitmap代表 Windows商店类型的位图类型,以便我可以将我的假Bitmap类分配给{ {1}}。

1 个答案:

答案 0 :(得分:2)

作为答案添加,所以我可以提供代码示例,但随时可以作为评论。如果您认为必须遵守此模式,则隐式类型转换可能会对您有所帮助。在不知道你的图像库正在做什么的情况下,这只会更深入地解决问题,因为任何Graphics.FromImage都无法在任何方法下工作。如果您的图书馆仅限于GetPixelSetPixelLockBits,您可以付出足够的努力来完成这项工作。

public class Bitmap
{
    public static implicit operator WriteableBitmap(Bitmap bitmap)
    {
        return bitmap._internalBitmap;
    }

    private readonly WriteableBitmap _internalBitmap;

    public Bitmap(int width, int height)
    {
        _internalBitmap = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null);
    }
}

public partial class MainWindow : Window
{
    public Image XamlImage { get; set; }

    public MainWindow()
    {
        var bitmap = new Bitmap(100, 100);
        XamlImage.Source = bitmap;
    }
}