![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java eclipse 型に解決できません
-
共通で使う関数を集めたクラス...
-
main()を持つクラスが2つ以上...
-
私はクラスLINEにまだ入れてな...
-
「天声人語」をインターネット...
-
ATLとMFCの違いは何でしょうか?
-
3年間同じクラスになる確率
-
eclipse でクラスに色
-
JAVA3D実行時のエラー
-
内部クラスを別ファイルに
-
どこからも呼ばれていない無意...
-
体育祭クラス全員参加のムカデ...
-
ラッパークラスってインヘリタ...
-
Eclipseでのクラス作成について
-
Excelでクラス分け表を作成した...
-
packageとimport の違いって?
-
1 つのヘッダファイルに複数の...
-
エクセルのデータ振り分け方法...
-
javaのコンパイルができません...
-
UMLのクラス図はmain()も含むん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の重複する値とその個数を...
-
どこからも呼ばれていない無意...
-
java eclipse 型に解決できません
-
「天声人語」をインターネット...
-
main()を持つクラスが2つ以上...
-
1 つのヘッダファイルに複数の...
-
IPアドレスのクラスAを取得して...
-
同一パッケージにあるクラスが...
-
同じクラスにならない確率を教...
-
重複エラーを解決するには
-
共通で使う関数を集めたクラス...
-
3年間同じクラスになる確率
-
複数のクラスで共通した関数を...
-
同じパッケージ、クラス名が含...
-
A・B・Cクラスとは?
-
自作のクラスファイルがインポ...
-
ATLとMFCの違いは何でしょうか?
-
eclipse でクラスに色
-
コンボボックスのマウスホイー...
-
UMLのクラス図はmain()も含むん...
おすすめ情報