DOBON.NET DOBON.NETプログラミング掲示板過去ログ

クラスを継承してコンストラクタでbase()を呼ぼうとするとObjectのコンストラクタが呼ばれるてしまう

環境/言語:[OS : Windows 7 / 言語 : C# / .NET Framework : 3.5]
分類:[.NET]

既存のSystem.Drawing.Bitmapクラスを拡張したImageクラスを作ろうとしています。
Imageクラスのコンストラクタからbase()としてBitmapクラスのコンストラクタを呼びたいのですが、Objectクラスのコンストラクタが呼ばれてしまいます。
Bitmapクラスのコンストラクタを呼ぶ方法を教えていただけないでしょうか。
以下、問題の発生するコードです。
---------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Program1
{
    class Image : System.Drawing.Bitmap
    {
        public Image(string fileName) : base() { }
    }
}
Bitmap クラスにデフォルトコンストラクタ(引数なしのコンストラクタ)は存在しないので、適切なコンストラクタが呼べるように、base() の () 内に引数を指定してください。
そもそもSystem.Drawing.Bitmapはsealedなので派生させられないはずですが…。
■No31369に返信(四ツ矢さんの記事)

MSDNでとりあえずBitmapの定義を確認された方がいいです。
http://msdn.microsoft.com/ja-jp/library/system.drawing.bitmap.aspx

(1)System.Drawing.BitmapはSystem.Drawing.Imageから派生しているのでその派生クラスに親クラスと同じImageを付けるのはどうかと思います。

(2)Hongliangさんが言われているようにsealedで定義されているのでそもそも派生が出来ません。

(3)Azuleanさんがいわれているようにコンストラクタの定義に引数なしのものはありません。

Bitmapのインスタンスになんらかの拡張をしたいのなら拡張メソッドかラッピングをされると良いかと思います。

※タイトルが長すぎてエラーになるので編集してあります。

DOBON.NET | プログラミング道 | プログラミング掲示板