No.1
- 回答日時:
継承ではない,というか,継承とは限りません。
元のクラスを使いやすくする為の薄皮のことを,ラッパークラスといいます。
たとえば,.NET Frameworkにおいて,Streamに対するStreamReaderやStreamWriterが相当します。
上記の例ではラッパークラスがラップされるクラスを持つことによって実現されています。
もちろん,可能であるならばラッパークラスがラップされるクラスを継承してもよいです。
AdapterとかProxyとかのパターンでできる「新しいクラス」が,ラッパークラスと呼ばれることが多いような気がします。
# GoF本で別名にWrapperがあったのはAdapterとDecorator
ありがとうございます。
.NET FrameworkのStreamに対するStreamReaderやStreamWriterのソースって見れますか?
GoF本を読みました。
AdapterとDecoratorもインターフェース型を実装します。
実はインターフェース型がわかりません。
本を何冊も読んでいるのに、ライブラリにあるインターフェース型の使い方がわからないでいます。
クラスを装飾するのがインターフェイスクラスだと認識しました。
Streamクラスがラッパークラスで、StreamReaderやStreamWriterはインターフェースクラスという認識でいいですか?
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が出てそのデバッグをやってみたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- R&B・ヒップホップ 世界一のラッパーは誰だと思いますか?現役のラッパーでお願いします。 1 2022/04/05 20:15
- カントリー・フォーク 教えてください。 2 2023/01/02 18:58
- R&B・ヒップホップ ヒップホップの歌詞ってマリファナだったり薬物系の歌詞使われてる事めっちゃ多いのは何故ですか?そしてラ 2 2023/03/02 17:19
- 友達・仲間 クラス替えでボッチ辛い 6 2023/04/07 13:49
- C言語・C++・C# C# 継承の問題で programに示された拡張をすべて含んだ上で,クラス Mammal に,そのオ 1 2022/07/22 09:48
- 日本語 ラッパーのバダサイクッシュさんが言っている 「俺は間違っていることを正しいとは謳わない」と言っている 3 2022/07/25 15:07
- 学校 箱ティッシュを持っていったら、担任に取り上げられました。 ほかのクラスは持ってきているのに、うちのク 7 2023/03/16 08:13
- R&B・ヒップホップ ラッパーでたとえば(ラップスター誕生)などステージに上がった事なくいきなりYouTubeにあげて売れ 3 2022/04/07 07:36
- その他(悩み相談・人生相談) 今とても悩んでる人間関係があります。少し面倒臭いくらいです。今年の春から通い始めた専門学校で出会った 1 2022/09/13 01:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3年間同じクラスになる確率
-
配列の重複する値とその個数を...
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
java eclipse 型に解決できません
-
string formatについて
-
同じクラスにならない確率を教...
-
同一パッケージにあるクラスが...
-
自作のクラスファイルがインポ...
-
「自作クラスの型」にキャスト...
-
意味の違いを教えてください Sh...
-
A・B・Cクラスとは?
-
標準モジュールとクラスモジュ...
-
JSPでclassのimport
-
Java「デフォルトのパッケージ...
-
どこからも呼ばれていない無意...
-
クラスのプロパティに構造体を...
-
JSP jsp:usebean で総称型クラ...
-
クラスの継承でメンバ変数が・・
-
UMLのクラス図はmain()も含むん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報