公開するのはプロパティであるってのがポイントです。記事の続編としてちょっといじってみようかと思ったりもしたものですが結局お蔵入りでした。いうかそもそも何をどう拡張しようとしたのかすら思い出せません。呼び出してみましょう。公開されているのが確認できます。なる型であることが分かります。データを取得・設定することは容易に想像できます。データを取得してみましょう。Console.WriteLine();}うまいこと取れることが確認できます。実装するかと言う話になります。表示するだけではつまりません。固定長と言う制約上、行追加はできないにせよ、編集はしたいところです。編集結果はもとの二次元配列にも及ぶべきです。二次元配列にキャストできるのですが)、ジェネリックな構造が望まれます。実装するクラスが必要です。これで二次元配列をラップします。プロパティ(インデクサ)ぐらいですが。プロパティで何を返すかが問題ですね。なんのデスクリプタなのかというのを考えます。場合、いずれかの列を記述するものでした。一つの列を表現する記述子」と言うことになります。列を記述するものとなります。そのコンポーネントは何かとなると、少々考えさせられます。単純には二次元配列の特定の行を指す一次元配列ですが、二次元配列から任意の行の一次元配列を取り出すとなると要素のコピーと言うことになってしまいます。ポインタですんだりしますけど。なるとそのポインタ代わりの「任意の行を指す何か」が必要です。この何かは複雑な機能は必要ありません(ポインタ代わりですし)。元となる二次元配列にアクセスできること、自分が指している行。あとは要求された列に対して自分が指している行と合わせて元となる二次元配列の要素を入出力するだけですね。プロパティ(インデクサ)が返すオブジェクトにもなります。以上で解説は大体終了です。それでは実装を見てみましょう。「ポインタ代わりのコンポーネント」から。Class実に単純ですが。しないみたいなんで、ラッパクラスにネストされたクラスとして実装します。外側のラッパクラスのほうを後回しにする都合上パーシャルクラスで表現。Classオーバーライドするメソッドは多めですが複雑ではないですね。実装するラッパクラス。それぞれの行について記述子を作成。ほとんどのメンバは実装していませんので、あまり見るべきところはありませんね。順だと思うので今回のクラス群はそういう前提で記述しています。作成していますが、コンストラクタで作ってしまってフィールドに置いておいたほうがいいかもしれません。一度作ったら変わらない物ですし。引数に取るインデクサ/デフォルトプロパティを用意すればもうちょっと便利になるかもしれません。使い方は別に難しいものではありませんので省略します。一つ既知の問題があります。一部の型で型コンバータがうまく動きません。変換でこけてしまいます。参照型だからかと思ったけど自前で型コンバータを持つ参照型を作って試したら問題なかったりと、詳細はよく分かりません。イベントで適切に型変換してやると動くようです。扱ったときもこの辺で苦労したような記憶が。[必須入力]※画像の中の文字を半角で入力してください。この記事へのトラックバックここ(hongliang.seesaa.net)で公開しているものについて、利用は自由に行って頂いて構いません。改変、再頒布もお好きになさって下さい。利用に対しこちらが何かを要求することはありません。公開するものを使用、または参考したことによって何らかの損害等が生じた場合でも、私はいかなる責任も負いません。あ、こんなのに使ったってコメントを頂ければ嬉しいです。Seesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。