[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/16 23:53 / Filesize : 244 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part46



1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part45
pc11.2ch.net/test/read.cgi/tech/1200911737/

その他テンプレ>>2-5くらい

116 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:10:55 ]
class newobj
{
public object o { get; private set; }
public newobj(object o)
{
this.o = o;
}
}
例えばこんなクラスがあったとして
object[] arg = new object[3] {1,2,3};
newobj[] list = new newobj[arg.Count()];
arg.Where((obj, i) => { list[i] = new newobj(obj); return false; }).Count();
こんなことできたら便利だなと思いましたが確かにキモイですね。
素直にfor文使います

117 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:12:46 ]
せめて、int i を引数に取る Aggregate 書くとかした方が。

118 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:27:19 ]
Array.ConvertAllだろどう考えても
せいぜいSelect

119 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:37:01 ]
なんだこの Where, return false, Count 厨は

120 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:41:32 ]
俺なら

>>112
var arg = new [] { "a", "b", "c" };
var value = arg.Aggregate(new StringBuilder(), (b, i) => b.Append(i));
Console.WriteLine(value.ToString());

>>116
var arg = new [] { 1, 2, 3 };
var list = arg.Select(i => new newobj(i)).ToArray();

と書くな。
副作用を目的としたWhereなんて嫌すぎる。

121 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 19:55:47 ]
newobj[] list = Array.ConvertAll<object, newobj>(arg, (obj) => new newobj(obj));
こういったメソッドも用意されていたのですね。
SQL?の知識が無いためSelectの使い方がよく解らなかったのですがそういう風に使えるんですね。
Aggregateはヘルプ見たのですがいまいち使い方わからなっかのですが便利そうですね。様々な使い方できそうです。
皆様どうもありがとうございました。

122 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 20:00:10 ]
>>120
112の方、仕様満たせてないぞ

123 名前:101 mailto:sage [2008/05/06(火) 21:11:59 ]
>>102-111
レスありがとうございます。

>>110の設定は知りませんでした…ありがとうございます。
・ブルースクリーンのエラー内容を見たところ、以下の通りでした。

STOP: 0x000000D1 (0x00000000, 0x00000002, 0x00000000, 0xBABC9185)
vrcomIT2k.sys Address BABC9185 base at BABC8000, DateStamp 3ec3702e
www.uploda.org/uporg1408089.jpg.html

(FYI:
>>106「デバイス、ドライバ、etc.が異常である」ということで思い出したのが、
PCのUSB端子から、蛍光表示管メーカーが用意している仮想COMドライバを使って
蛍光表示管にデータ送信している、ということをやっています。
もしかしたら本件と関係があるかもしれないので、書いておきます。)

他PCでの再現性については、PCを1台しか持っておらず、
申し訳ないのですがすぐ確認できる状況にはありません。

最小のコードについては、現在調査中です。再現ができ次第、UPしたいと思います。

124 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 21:41:38 ]
> 蛍光表示管メーカーが用意している仮想COMドライバ

臭いな。というかたぶんこれだろう。



125 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:50:39 ]
>>123
エラー内容みるかぎり、蛍光管メーカーに問い合わせるのが正解かと
ここで聞いても、運よく同じメーカー同じドライバで同じトラブルに見舞われている人以外には分からないかと。
とりあえずは、ドライバがそのOSに対応しているのか、そのへんから全部チェックしてみたらどうだ?
2kとかついてるから、Windows2000専用とかそういうのないか?

126 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:06:52 ]
STOP: 0x000000D1 は、メモリエラーの可能性も無きにしもあらずだから、
念のためmemtest86かけてみたら?まあ、そのエラーでブルースクリーンは
シリアル周り(ハードウェアモデムとか)のエラーとしてすっごくありふれた
ものだから、たぶんドライバの問題だろうね。

127 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 18:53:43 ]
VS2008は起動してるだけでメモリアクセスしてるから
たまに起動してるだけでブルスク(0x9C)になることがあるぜ。
まあ原因は安物メモリのせいかもしれないが。

128 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:46:29 ]
それがみんな出ていたらFAQに入るわ

129 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:59:12 ]
あきらかにハードが原因だろ

130 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:50:15 ]
>VS2008は起動してるだけでメモリアクセスしてるから
そりゃそうだろ。
メモリアクセスしないアプリがあったら見てみたい物だ。


131 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:42:28 ]
>>130


132 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:47:01 ]
>>131


133 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:50:47 ]
>>132

134 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:08:25 ]
>>133




135 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:20:16 ]
>>134

136 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:25:29 ]
>>135


137 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:13:00 ]
>>137

138 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 23:43:39 ]
>>139

139 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 06:10:53 ]
>>139

140 名前:130 mailto:sage [2008/05/09(金) 12:01:02 ]
あれ?なんか変なこと言った?

141 名前:デフォルトの名無しさん [2008/05/09(金) 12:17:29 ]
ArrayList arrayをDataGridViewに表示させたいのですが、DataSource=arrayとやっても何も出ません。
何か良い方法はありませんでしょうか?

142 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 12:19:48 ]
>>140

143 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:03:35 ]
>>142


144 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:06:51 ]
>>141
System.Collections.ArrayList array = new System.Collections.ArrayList();
array.Add(new { X = 3, Y = 4 });
array.Add(new { X = 5, Y = 6 });
this.dataGridView1.DataSource = array;
動作します、原因はArrayListに追加した要素が、プロパティーではなくフィールドになっていたとか、そんなオチでは?




145 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:58:27 ]
arrayが空っぽ

146 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 22:10:19 ]
そろそろ麻雀やろうか

147 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 00:22:23 ]
readonly(private setじゃなくてコンストラクタ以外で変更できないようにする方ね)にするためだけに
自動プロパティを使うのを諦めてフィールドを手書きするのが悔しい

148 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 06:34:59 ]
public struct T_INFO_DATA
{
public uint Id;
public uint Fixed;
public byte[] Array;
};

switch (WParam.ToInt32()){
case 0x1200:
COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(LParam, typeof(COPYDATASTRUCT));
T_INFO_DATA a = (T_INFO_DATA)Marshal.PtrToStructure(cds.lpData, typeof(T_INFO_DATA)); ←ここでエラー



WM_COPYDATA受信時に上記のような処理を行うと下記のエラーメッセージが出ます。

保護されているメモリに読み込みまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。

誰かどのように修正すれば直るのか教えてください。
構造体Arrayの中に入ってる配列数は48個です。
これ以外の構造体(配列を使っていない構造体)の受信は正常に取得できます。よろしくおねがいします。


149 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:55:28 ]
良くわかんないけど
C側のイメージとしては
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE * Array;
}
となっているわけですが、問題ないのですか?

150 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 07:59:51 ]
>>149
+アルルファ
byte [] Array の位置にはポインタが入っているわけでなく、メモリーブロックへのハンドルが入っています。
byte [] オブジェクトを確保して、そこに格納する必要があるのではとか?
ぱっとみ思いつく限り

151 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:48:21 ]
やったことはないけども、
int とか IntPtr にして MarshalAs でなんとかできないかな。

152 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 09:55:02 ]
なぜか Word .doc だけど、↓なんてどうだろう。
download.microsoft.com/download/4/f/d/4fd49a94-8772-4bd0-88ca-bf46e2d029fc/WHITEPAPERS/Accessing%20the%20eID%20Middleware%20from%20.NET%20(Version%201.0).doc

153 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:07:22 ]
メモリハンドルをIntPtrで受け取っておいて、LocalLock、Marshal.Copy、かな。
あと、Arrayというメンバは名前をhMemとかに変えろ。

154 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:16:46 ]
>hMem
むしろキモイ



155 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:23:41 ]
そうか?
すぐAPIに渡すものなら、APIの引数名に合わせた方がわかりやすいだろ?

156 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:34:18 ]
C#を一から始める際に参考になるサイトとか教えてもらえませんか?

157 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:38:40 ]
ケースバイケースだろうね。
Win32APIはともかく、デバイス屋が提供している制御用のAPIなんて
意味不明すぎる命名がされてること多いし。

158 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:45:03 ]
>>156
「C# 入門」でぐぐって一番上。

159 名前:148 mailto:sage [2008/05/11(日) 17:40:01 ]
>>149
C側のイメージだと、
struct T_INFO_DATA
{
DWORD Id;
DWORD Fixed;
BYTE Array[48];
}

という認識です。
ポインタを送るほうがいいのでしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:23:15 ]
>>159
構造体メンバの固定長配列は、
unsafe 限定で fixed って構文がある。

ufcpp.net/study/csharp/sp_unsafe.html#fixed

161 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:42:03 ]
属性使っていろいろする必要がある。
[StructLayout(LayoutKind.Sequential)]
public struct T_INFO_DATA { 
 public uint Id;
 public uint Fixed;
 [MarshalAs(UnmanagedType.ByValArray, SizeConst=48)]
 public byte[] Array;
};
なお、コンパイルは通してないからこのままでOKかどうかの保証はない。
あとは調べてくれ。


162 名前:148 mailto:sage [2008/05/13(火) 07:16:56 ]
>>161
ありがとうございます。
構造体をその記述にするだけでうまくいきました。

163 名前:デフォルトの名無しさん [2008/05/13(火) 15:55:00 ]
相談内容
RS232C通信のプログラムを作っているのですが、
デバックの効率化のために実際の通信内容を別Windownにてモニタリング
できないか検討してます。

本当はStreamにフックするだけで使えるものが他のデバックにも使えて
望ましいのですが、そんな便利なクラスってないれすか?


164 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:02:31 ]
.Net には、フックの類はないよ
自分がやるとしたら、Streamクラスから派生したクラスにフックコードを挿入したアダプタクラスを作って
RS232C通信をアプリ側でフックする
引き続いてWCFを使ってプロセス間通信ができるように、サービスを作って
別ウインドウで作ったデバッグウインドウは、そのサービスに接続して、状況を読み取るといった形式にすると思う。
ついでに、通信情報以外の各種情報もモニターできるようにするかな。



165 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:09:14 ]
昔、まさにそういうツールがフリーであって重宝したなあ。
NTで動いてたから、今でも使えるとは思うが何って言ったっけな。

166 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:12:25 ]
便利とは思うが、盗聴まがいのAPIはよろしくないから無くした方がいいと思う。
キーボードフックを筆頭に。

167 名前:163 mailto:sage [2008/05/13(火) 16:38:31 ]
>>164さん,165さん
レス有難う御座います。
アダプタクラスですか・・
腑抜けの私には、むりっぽそうですw。

申し訳ない、追加で質問なんですが、
フックがだめなら、
またStreamの中身を盗見することって難しいのでしょうか?

普通に考えると
ReadStreamは一度読み取ると消えちゃうし、
WriteStreamはそもそも読めないですよね。

これができれば、何とか簡易もどきが作れそうな気がするのですが


168 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:47:43 ]
>>167
中身みるよりアダプタの法がよっぽど楽だ、Streamクラスの抽象関数オーバーロードして、呼び出しをそのままReadStreamなりWriteStreamなりに渡せば以上終了だぞ。

169 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:53:10 ]
>>167
いい機会だからデザインパターンを勉強しような

170 名前:163 mailto:sage [2008/05/13(火) 16:57:26 ]
>>168
そうですか。了解です。

普段は組み込み関連の仕事が多いもので、
不慣れな環境なんで、他に良い手がないか、
無駄に時間をつぶして調べ回っていました。

アダプタ法で頑張ってみます。
勉強になります。有難う御座います!!

171 名前:163 mailto:sage [2008/05/13(火) 17:20:28 ]
ぐは、早くも生きづまった・・
SerialPortクラスのBaseStreamメンバはReadOnly・・・
Streamの継承クラスを渡せない・・
早くもだめぽw

そうすると専用のStreamReadrとWriterを自作するのが王道でしょうか?
それとも、SerialPortクラスを継承してメソッドを書き換えるか・・

>>169さん
アドバイス有難う御座います
今度本を買ってきます。
デザインパターンの根本的なところを理解していないのに、
何か作ろうとするから、いつもメタメタになる・・

172 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:39:58 ]
本買って読むのもいいが、この種の本は場数が足りんとどうせ読めんよ。
自分で頭をひねって考えるのが重要。
class MyStream : Stream
{
Stream rs232 = ここで、BaseStream を突っ込む
override 関数各種() { rs232.同名の関数() ; }
}
基本は、こうやって作る。とにかくオブジェクト図を描くこと。
オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。

173 名前:163 mailto:sage [2008/05/13(火) 17:55:08 ]
>>172さん
有難う御座います。
コードまで書いて頂き、お時間を取らせてしまって、
すいません。

なるほど!!、こうすればBaseStreamそのものがReadOnlyでも制御できる。
こうすれば、デフォルトのStreamReaderが使いまわせる。
つくづく自分の頭の固さが嫌になります。

>とにかくオブジェクト図を描くこと。
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
>さっさとオブジェクト指向アプローチをおぼえて、古いやり方は捨てること。
こういった、アドバイス非常にありがたいです。!!
自分でもあがいてはいるのですが、
周りにこういった話が出来る人がいないんです。

オブジェクト図ですね。書きまくって見ます!!

174 名前:163 mailto:sage [2008/05/13(火) 18:04:07 ]
>>172さん
まだいらっしゃるかな・・
>オブジェクト間のメッセージ(関数の呼び出し)の接続が最少になるのはどういう時かよく考えること。
もしよろしければ、この部分についてもう少し解説していただけないですか?
これは、どんなときに考えるのでしょうか。
クラスの責務の振り分け/分割時?
またメッセージの接続が最小になると、どんな良いことがあるのでしょうか?

質問ばかりですいません。




175 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:11:30 ]
オブジェクト指向のもっとも重要なポイントは、クラスではなくインスタンス。
インスタンスが主役であって、クラスはオマケ。継承がウンタラとかいう連中もいるが間違っているから相手にするな。
今四つのインスタンスがあるとする、それぞれ A , B , C , D
粒度が細かすぎて取り扱いにくいので、二つにまとめてみようと考えてみる。
インスタンスAがBを呼び出すなら
A --関数名--> B
と書いてみる。
まとめる方法は[A,B,C] [D]がよいか[A,B] [C,D]がよいか。
呼び出しが最少になるような図を考えてみよという事。
適当に矢印書きまくって、最小になるように分離してみるといい。
あとは応用。

176 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:56:57 ]
インスタンスが主役でクラスがおまけ、って俺には理解できない発想だマジで。
っていうか、それに類するような主張をこれまでに聞いたことがないよ。

177 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:06:45 ]
なにいってるかよくわからんが、継承か包含かちゅー話じゃないのか

178 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:12:02 ]
プロトタイプ指向のことなんじゃね

179 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:16:53 ]
インスタンスが主役w

180 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:21:47 ]
C#は型指向

181 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:35:08 ]
>>176
オブジェクト指向を扱っているサイトにいってみたら?
そうすれば無知も治るよ

182 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:39:21 ]
オブジェクト指向ではインスタンス(実体)は脇役だろう。

183 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:40:36 ]
>>182
今から15年前くらいは、確かにそういう事になっていたが、そのまま固まったか?

184 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:43:19 ]
Javaが登場して以降、体系的に研究されたオブジェクト指向もちょっとは勉強するといいよ。
でないと、デザインパターン意味や使い方など理解に及ぶことはできないし、上の例だって発想することすら難しいだろう。



185 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:46:44 ]
Javaと関係なく研究は進んでいたと思うんだけど。

186 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:50:18 ]
何言ってんの。
オブジェクト指向イコールJavaと言ってもいい程だよ。

187 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:52:15 ]
その進んだ研究を勉強していないのは駄目だという事だよ
今のライブラリは当たり前にその設計思想が入っているからな、知らないと使い方分らんだろ。

188 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:53:17 ]
>>186
ゴールじゃねぇよ、LINQとか見てみろ

189 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:54:35 ]
別にオブジェクト指向がどうとかこうとかどうでも良いよ

190 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:55:05 ]
インスタンスは実体。
お前はパソコンに文字を表示させるとき、直にVGAのメモリを書き換えるのか?違うだろう。
ドライバやらOSやらGDI+やらライブラリ郡など抽象化されたものを通してアクセスし表示させるだろう。

オブジェクト指向はインスタンス(実体)を直接操作せず、抽象化して利用しやすくする手法。
インスタンスがメインなわけがない。

191 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:55:55 ]
>>188
ゴールなんて関係ないこと持ち出して自ら否定して
結局何が言いたかったのかね。


192 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:37 ]
>>190
ヒント:言葉遊び


193 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:38 ]
>>190
そうだな、もう永久にそう思っていろよw

194 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:59:04 ]
>>190
そんな考えでも君のプログラムがちゃんと動くならそれでいいよ
それはそれで正しいわけだから




195 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:00:26 ]
良いコード:動くコード
悪いコード:動かないコード

196 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:05:01 ]
クラスが主役 に一致する日本語のページ 約 290,000 件中 1 - 10 件目 (0.30 秒)
インスタンスが主役 に一致する日本語のページ 約 1,790 件中 1 - 10 件目 (0.06 秒)

197 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:11:37 ]
タイヤキの型とタイヤキそのもの
どっちも主役です(ゆとり教育的発想)

198 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:34:08 ]
もうこの手の話がしたい奴はOOPスレ行った方がいいよ。
あそこは>>175的なトンチキな自説をぶってるアホが延々同じネタをループしてて楽しいと思うよ。
俺は正直吐き気がするけどねああいうの。

ちなみに>>190は半分はいいこと言ってると思うんだよね。
OOPというアイデアの肝は、>>190の言う抽象化(より正確には仮想化と言うべきだと思うけど)された
仮想機械をより直感的に表現するコーディング手法ということだと思う。

ただ「実体=インスタンス」ってのは全然意味不明だが。

199 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:36:29 ]
インスタンスの和訳が実体だろ・・・

200 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:43:41 ]
>>188
LINQはオブジェクト指向とはまた別だろ。
関数型プログラミングのほうが近い。

201 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:45:09 ]
なんか、こう訳わからん事になっているから、少し書くと
たとえば、C++でいう所の仮想テーブルは、virtual などなくても class のみで作り出すことができる。
これは非常に重要なことで、仮想テーブルは書き換えられないが、自分で作った仮想テーブルは書き換えられる。
このような実装は、Strategyパターンと呼ばれる。
つまり、classを使った抽象化は実は必要なく、ただ『頻繁に出てくるので言語上にvirtualとして実装しておくと便利であるという程度の意味』しかないのだ。
オブジェクト指向を理解する上で、この点について理解しているかどうかは決定的だ。
理解せずクラスと継承を中心に置くとやれる事が一気に限定されてしまうのだ。
さらには、継承には各種問題点も指摘されてり、特に深い継承は良くないと最近はされている。
また原則、継承を考える前にインターフェイスを検討するべきとされている。

参考コーディング規約
www.kawabata.com/dotnet/CodingStdCS.pdf
参考サイト
www.objectclub.jp/


202 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:49:06 ]
>>199
話の文脈を読まなきゃ。
>>190の言う「実体」とは「クラスによって抽象化される前の何者か」。

たとえばGDIならビデオカードやプリンタのハードウェアのことを「実体」といっている。
少なくとも話の前半ではね。

203 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:51:16 ]
>>201
それって結局、包含と委譲のことだろ。クラス対インスタンスという話ではない。
継承だけがクラスの特徴ってわけじゃないぞ。

204 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:51:26 ]
>>202
確かに変だな。



205 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:53:21 ]
>>203
つってもインスタンスを大量生産するための鋳型以上の意味もないだろ?

206 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:55:38 ]
>>175
ひょっとしてインターフェイスと書くところをインスタンスにしてしまって
引っ込みが付かなくなったとか。それなら文脈があうが・・・

207 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:57:38 ]
>>206
インターフェイスもインスタンスの一つと見なしてよいものだよ。
インターフェイスは取得するものだ。

208 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:58:17 ]
>>207
またまた荒れるような書き方をするな。

209 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:59:06 ]
いったい君たちは何の話をしてるの?
誰か頭のいい人ドラゴンボールに例えてくれよ

210 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:00:06 ]
ドラゴンボールの主人公はヤムチャなのか天津飯なのかと言う話

211 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:27:53 ]
実装と概念は分離して語れよ

212 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:30:20 ]
↑といいつつ乖離して語る馬鹿


213 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:10:09 ]
主役はキーボードを打つキミだ!!

214 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:52:33 ]
>>209
サイヤ人→クラス
悟空→インスタンス



215 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:57:38 ]
スーパーサイヤ人→スーパークラス

216 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 04:08:51 ]
ブルー将軍→サブクラス






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef