2011-06-28 15 views
0

私は、.NETフレームワークの作成者がSystem.Drawing.Imageクラスを設計したときの設計上の決定を理解しようとしています。それは抽象的ですが、重いリフティングの多くはImageクラスで直接行われます。また、Imageオブジェクトを直接作成する2つのメソッド、Image.FromFileおよびImage.FromStreamを定義します。System.Drawing.Imageクラスが抽象クラスとして定義され、型として返されるメソッドも定義されているのはなぜですか?

抽象クラスの目的は、子クラスだけが継承すべき機能を定義する方法を助長することだと思いました。抽象クラスが、抽象クラスのインスタンスを返すメソッドを実際に定義するのは不思議なことです。

なぜこのように実装されましたか?

答えて

3

これは​​のインスタンスです。このパターンは.NETフレームワーク全体で広く使用されています。別の例では、指定されたUriに応じて異なるサブクラスを返すことができるSystem.Net.WebRequest.Createです。

パターンが推論される理由は、画像の種類に応じてBitmapなどの異なる画像のサブクラスを作成できることです。

+0

@eulerfx:しかし、イメージクラスはサブクラスを返さないが、実際にはそれ自身のインスタンスを返す。 。 。 – richard

+0

このメソッドのシグネチャは、Imageが返されるように指定しますが、返される実際のオブジェクトインスタンスはImageのサブクラスになります。これを確認するには、デバッグセッションを開始し、イメージインスタンスが返された後にブレークポイントを設定し、変数を調べて実際のタイプを確認します。 – eulerfx

+0

@eererfx:それはどういうことか分かりません。戻り値 'Type'は' Image'であり、返すべきサブクラスを知らせるためのパラメータや何もありません。私は本当に 'Image'のサブクラスではなく、' Image''型を返すと思います。ここをクリックしてください:http://msdn.microsoft.com/en-us/library/stf701f5(v=VS.80).aspx – richard

関連する問題