
No.2
- 回答日時:
> .NET FrameworkのStreamに対するStreamReaderやStreamWriterのソースって見れますか?
ここあたりからダウンロードできます。
MS: .NET Framework Libraries
http://referencesource.microsoft.com/netframewor …
VS2008 Professional以上 かつ .NET Framework 3.5 (SP1なし) なら,
@IT: Visual Studio 2008で見る.NET Frameworkのソースコード
http://www.atmarkit.co.jp/fdotnet/insiderseye/20 …
などを参考にすると,ステップイン可能です。
# うかつに.NET Framework SP1入れるとステップインできません。が,重要な更新として来ているので普通は入れてしまうという……。
ただし,上記のコードは原則として C# です。
まぁ,VB とは原則的に読み替えるだけなので,その面において難しいことはないですが。
> 実はインターフェース型がわかりません。
Interface はまさしくインターフェイス,外部から可能な操作の集合を定めたものです。
必要になった場合に Interface を実装する方法は知っていないと困りますが,
型を提供する側 (自分への提供を含む) として使用するための,理論的な背景は継承とか抽象クラスとかがわかってからでよいと思います。
個人的には,
・単体のクラス (Object 型のみを継承)
・共通のクラス (MustInherit なしのクラス,継承に使われる)
・抽象クラス (MustInherit つきのクラス,単独では実体化できない)
・インターフェイス
の順 (下に行くほど) に抽象度が上がってくると思います。
そのため,クラスライブラリを自分で作っていると,上の方から順にわかってくると思います。
私の過去のインターフェイスの提供を思い返すと,
・IXXXable系 (○○できる,ということを示す型)
・アドインやプラグインといった機構で使う (System.AddIns や,リフレクションを使った独自実装)
・他のインターフェイスの戻り値やプロパティの型
が主です。
# 2番目の理由の派生で,プラグイン化可能までいっていないようなものでも使っていることがありますが。
> 本を何冊も読んでいるのに、ライブラリにあるインターフェース型の使い方がわからないでいます。
クラスライブラリのインターフェイス型を実装するのは,
・必要に迫られて (別のクラス/インターフェイスで利用しているから)
・便利な構文を別途使うため (System.Collections.IEnumerable とか System.IDisposable とか System.Runtime.Serialization.ISerializable とか)
・なんらかの目的でまったく関係ないクラスで統一感を出したい (System.IDisposable とか System.ICloneable とか)
が主な目的になると思います。
> Streamクラスがラッパークラスで、StreamReaderやStreamWriterはインターフェースクラスという認識でいいですか?
StreamReader や StreamWriter がラッパークラスです。
根本的に存在するのが System.IO.Stream クラスです。
それを内部に持って,文字列の入出力に特化したのが System.IO.StreamReader クラスや System.IO.StreamWriter クラスになります。
# つまり,Stream を StreamReader / StreamWriter が「ラップする (包む)」のです。
ちなみに,System.IO.StreamWriter まわりを GoF の Adapter パターンとして見ると,
・Target クラス : System.IO.TextWriter クラス
・Adaptee クラス : System.IO.Stream クラス
・Adapter クラス : System.IO.StreamWriter クラス
になります。
# Client クラスはユーザー作成クラスなので省略。
ありがとうございます。
AクラスがあってBクラスがラッパーだとしたら、
AクラスにBクラスの機能を付けることだと思っています。
System.IO.Streamクラスに読み取りの機能を付けるのにSystem.IO.StreamReaderクラスでラッパーするわけですよね???
この認識は合っていますか?
Available Source Code Componentsをダウンロードしました!ありがとうございます。
VS2005なのではやくVS2010が出てそのデバッグをやってみたいです。
No.1
- 回答日時:
継承ではない,というか,継承とは限りません。
元のクラスを使いやすくする為の薄皮のことを,ラッパークラスといいます。
たとえば,.NET Frameworkにおいて,Streamに対するStreamReaderやStreamWriterが相当します。
上記の例ではラッパークラスがラップされるクラスを持つことによって実現されています。
もちろん,可能であるならばラッパークラスがラップされるクラスを継承してもよいです。
AdapterとかProxyとかのパターンでできる「新しいクラス」が,ラッパークラスと呼ばれることが多いような気がします。
# GoF本で別名にWrapperがあったのはAdapterとDecorator
ありがとうございます。
.NET FrameworkのStreamに対するStreamReaderやStreamWriterのソースって見れますか?
GoF本を読みました。
AdapterとDecoratorもインターフェース型を実装します。
実はインターフェース型がわかりません。
本を何冊も読んでいるのに、ライブラリにあるインターフェース型の使い方がわからないでいます。
クラスを装飾するのがインターフェイスクラスだと認識しました。
Streamクラスがラッパークラスで、StreamReaderやStreamWriterはインターフェースクラスという認識でいいですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヒグマを撃退
-
命名規約は連番でいいのか?
-
配列の重複する値とその個数を...
-
EclipseでJSPのコンパイルエラー
-
UMLのクラス図はmain()も含むん...
-
そんなにお金がなくても年に1度...
-
標準モジュールとクラスモジュ...
-
packageとimport の違いって?
-
同じパッケージ、クラス名が含...
-
Eclipseでのクラス作成について
-
数学の計算問題。 3年間同じク...
-
Cstring(日本語含む)をcharに...
-
定数はどこでまとめますか?
-
Sub-LVDS規格とは
-
main()を持つクラスが2つ以上...
-
河合塾のクラス分けについて
-
javaのコンパイルができません...
-
同じクラスにならない確率を教...
-
皆さんはクラス替えしたくない...
-
どういう処理でしょう?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java eclipse 型に解決できません
-
どこからも呼ばれていない無意...
-
EclipseでJSPのコンパイルエラー
-
そんなにお金がなくても年に1度...
-
複数のクラスで共通した関数を...
-
dllと同じプロジェクトにする方法
-
恋愛
-
UMLのクラス図はmain()も含むん...
-
僕の出身中学校は200人同級生が...
-
配列の重複する値とその個数を...
-
同一パッケージにあるクラスが...
-
IPアドレスの3バイト目の呼び方
-
標準モジュールとクラスモジュ...
-
main()を持つクラスが2つ以上...
-
eclipse でクラスに色
-
共通で使う関数を集めたクラス...
-
VBAもしくはVB6:クラスの中で...
-
Cstring(日本語含む)をcharに...
-
IPアドレスのクラスAを取得して...
-
コンボボックスのマウスホイー...
おすすめ情報