クラスがあるとしましょう。このクラスには System.Drawing.Bitmap であるパブリック プロパティが含まれていますが、クラスのコンシューマーがこの値をさまざまな種類の画像で設定できるようにしたいと考えています。彼らが何を渡しているのか考えてみてください。必要な変換は舞台裏で行います。これが私が意味することです:
var myBitmapImage = new BitmapImage();
var writeableBitmap = new WriteableBitmap(myBitmapImage);
var mySystemDrawingBitmap = new Bitmap(@"A:\b.c");
var classOne = new TestClass();
var classTwo = new TestClass();
var classThree = new TestClass();
//This should work:
classOne.MyImage = myBitmapImage;
//This should also work:
classTwo.MyImage = writeableBitmap;
//This should work too
classThree.MyImage = mySystemDrawingBitmap;
現時点では、次のようなことを考えています。
public class TestClass
{
private Bitmap _myImage;
public object MyImage
{
get
{
return _myImage;
}
set
{
if (value is Bitmap)
{
_myImage = (Bitmap)value;
}
if (value is BitmapImage)
{
var imageAsSystemDrawingBitmap = ConvertBitmapImageToBitmap((BitmapImage)value);
_myImage = imageAsSystemDrawingBitmap;
}
if (value is WriteableBitmap)
{
var imageAsSystemDrawingBitmap = ConvertWriteableBitmapToBitmap((WriteableBitmap)value);
_myImage = imageAsSystemDrawingBitmap;
}
throw new Exception("Invalid image type");
}
}
private Bitmap ConvertWriteableBitmapToBitmap(WriteableBitmap value)
{
//do work here
return null;
}
private Bitmap ConvertBitmapImageToBitmap(BitmapImage value)
{
//do work here
return null;
}
}
しかし、オブジェクトの使用とキャストは非常に 2001 年に感じられます。これを実現するには、もっと雄弁な方法があるに違いないと確信しています。ありますか、それともそもそもこれは悪い考えですか?