問題を要約すると、 ushort [、]ピクセルフィールド(16ビット/ピクセル)とuint32 [、]ピクセルフィールド(32ビット/ピクセル)を持つクラスを作成できるようにする必要があります。。これを実現するには、いくつかの異なる方法があります。
32ビットおよび16ビットのサブクラスでPixelクラスを作成し、wazooのさまざまな演算子をオーバーライドすることで、ushort / uint32の代わりを作成できますが、これには多くのオーバーヘッドが発生し、正しく理解するのが難しく、決定するのがさらに難しくなります。その権利があれば。または、ピクセルデータのプロキシクラスを作成することもできます(ushort [、]またはuint32 [、]配列が含まれ、必要なすべてのアクセサーが役立ちます)。欠点は、16ビット/ 32ビットモードフラグに応じて、いずれかの方法で実行されるImageDataクラスに多くの特殊なケースのコードが含まれる可能性があることです。
より良い解決策は、ImageDataを16ビットクラスと32ビットクラスにサブクラス化し、ファクトリメソッドを使用してインスタンスを作成することだと思います。たとえば、ImageDataは基本クラス、ImageData16bppとImageData32bppはサブクラス、静的メソッドImageData.Create(string imageFilename)は、ヘッダーデータに応じてImageData16bppまたはImageData32bppのいずれかを作成するファクトリメソッドです。例えば:
public static ImageData Create(string imageFilename)
{
// ...
ImageDataHeader imageHeader = ParseHeader(imageFilename);
ImageData newImageData;
if (imageHeader.bpp == 32)
{
newImageData = new ImageData32(imageFilename, imageHeader);
}
else
{
newImageData = new ImageData16(imageFilename, imageHeader);
}
// ...
return newImageData;
}