- 1 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:19:33 ]
- このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 前スレ ふらっとC#,C♯,C#(初心者用) Part38 pc11.2ch.net/test/read.cgi/tech/1235864730/
- 445 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:56:36 ]
- >>441
消すんだよ。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:58:42 ]
- この場合はthrowの前に独自コードを記述してthrowの前に分岐でreturnに飛ばして
returnに辿りつかなかったら最後のthrowを実行するように書けばいいんですかね
- 447 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:00:26 ]
- >>445
やっぱり消すのが自然ですよね MSのひな形なんですが、このパターン初めてなので消してはいけない理由があるのかと思ったんですが 普通消しますよねTHX!
- 448 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:01:54 ]
- >>447
実装されてないことを示す例外だから、実装が終わったら消せばいい。 ということ。
- 449 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:02:45 ]
- setjmp,longjmpと同様に、大域脱出に使われるので、乱用はよくない。
プロジェクトによっては、自前で例外throwするのは禁止してることもあるよ。 だから、必須の機能とは言えない。
- 450 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:03:45 ]
- あ、禁止ってわかりにくいな。
そのプロジェクトのコーディング規約(≒ローカルルール)で禁止ね。
- 451 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:04:23 ]
- >>449
誰も必須だとか言ってないだろハゲ
- 452 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:04:50 ]
- >>433
要求されたメソッドまたは操作が実装されない場合にスローされる例外。
- 453 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:06:51 ]
- NotImplementedException を初めて見た時は感心した。
スタブを示す、標準的な例外が用意されているのは便利。 // TODO: とかより、ずっといい。
- 454 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:19:35 ]
- 中身が空なだけで実際にメソッド自体はあるのに、NotImplementedってのも変な話だな。
ぜひ「空関数例外」みたいな名前に変えて欲しい。 俺の中ではNotImplementedはSystem.Reflectionでひっかかったときに投げるイメージ。
- 455 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:23:02 ]
- 勝手に作れよハゲ
- 456 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:48:15 ]
- NotImplementedException 使うかどうかとかは開発スタイルによるかも
しれないなぁと思った。俺は結構使うほう。
- 457 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 23:07:21 ]
- 抽象クラスのvirtualメソッドに使ったりするかな
これを継承したクラスで要るメソッドだけオーバライドして実装 NotImplementedExceptionじゃなくてNotSupportedExceptionでやる場合もあるけど
- 458 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:41:56 ]
- >>455
失礼な まだほんのりと残っていますぞ
- 459 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 00:51:28 ]
- >>454
中身が空っぽのメソッド作るのは、 「宣言だけして実装してないよ」って感じだと思うんだけど。 C++ みたいに宣言と実装が分かれてないから空っぽの動体付けてるだけで。 >>457 NotSupported は、 「interface 的には実装しないといけないんだけど、 このクラスでは実装しません」みたいな時に使いたい。
- 460 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 01:50:52 ]
- NotImplementedExceptionはよく使うなー
午前7時に盲状態でコード書かなきゃいけないときとか頼りになる
- 461 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 09:02:10 ]
- レビューで指摘されたんですが
usingディレクティブの記述順序がパフォーマンスに影響する事ってあるんですか? 単に視覚的な問題くらいの認識しかなかったので ググってみましたが、そういったソースはみあたりませんでした。 教えて!エロい人!
- 462 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 09:17:08 ]
- using の順序が問題になるのって、
拡張メソッドのインポート時くらいしか知らない。
- 463 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:21:29 ]
- コントロールにイベントを実装しようとおもって、delegateを記述してるんだけど、
メソッドの戻り値がvoidのとき、Func<void, string> _EventHandlerみたいに記述できないの? delegateを記述するの面倒だよ(´・ω・`)ショボーン
- 464 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:22:53 ]
- >>463
Action<>
- 465 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:41:31 ]
- おおありがとう(`・ω・´)シャキーン
- 466 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 18:46:07 ]
- EventHandler<T>にしようよ。
- 467 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:58:59 ]
- クラスのメンバで
public string Name; とすることと private string _name; public string Name { get { return _name; } set { _name = valiue; } } はどう違いますか?
- 468 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:18:48 ]
- なんの釣りだよ。
- 469 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:19:50 ]
- いや本当に違いがよくわからないので教えて下さい
- 470 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:21:43 ]
- ぐぐったんですか?
- 471 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:23:51 ]
- プロパティ public privateで試してみましたが書かれているサイトはよくわかりませんでした
何か専門用語があるのかもしれませんがそれがわからないのでぐぐれません
- 472 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:34:58 ]
- >>467のコードの通りなら、特に使う上での違いはないのでは?
フィールドをPublicにするのは習慣としておすすめできない、というくらいで。
- 473 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:39:03 ]
- フィールドをpublicにするくらいなら、自動プロパティにしろ
public string Name { get; set; }
- 474 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:42:11 ]
- >>473
なんでpublicじゃだめなのかを聞いてるのに自動プロパティにしろなんてのは筋違いだろ
- 475 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:43:15 ]
- private string _name;
public string Name{
- 476 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:48:12 ]
- >>474
誰がそんなこと聞いてる?
- 477 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:48:26 ]
- 誰も訊いてない。
- 478 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:54:34 ]
- class cls
{ float[,] test; } これって動的配列なんでしょうか? float a = 0; for(i=0;i<100;i++){ for(j=0;j<100;j++){ test[i, j] = a; a++; } } こうやって他のクラスから自由に配列の大きさを決めて格納するのに使えるんですか?
- 479 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:00:12 ]
- 配列は確保するまで使えません
未割り当てエラー出すだけ つーかそのくらい実行してみりゃ分かるだろうが
- 480 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:27:17 ]
- フィールドをプロパティに変えたときに互換性が取れなくなるから
最初からプロパティにしとけって話だろうけど 再コンパイルすればいいだけだからほとんど意味は無いよね
- 481 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:30:52 ]
- >>476
>>467の趣旨はそういうことだろ?
- 482 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:24:58 ]
- >>481
そんなの本人じゃないと分からない。単に違いを聞いてるだけに読める。 >>467の字面通りなら、ほとんど違いはないけど、作法としてパブリックフィールドは 推奨されていない、としか答えようがない。
- 483 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:36:10 ]
- >>482
少なくとも自動プロパティを使えはおかしいだろ 何をいってんだ?
- 484 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:46:58 ]
- >>467
プロパティってのは実はメソッド。 private string _name; public string Name { get { return _name; } set { _name = value; } } てのは private string _name; public string get_Name() { return _name; } public void set_Name(string value) { _name = value; } と書いてるのと同じ。
- 485 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:48:07 ]
- で、どう違うんだ?
- 486 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:02:01 ]
- プロパティならそのまま格納取り出しするだけじゃなくて
条件チェックやらなんやら色々できるだろ
- 487 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:03:37 ]
- そういう理屈なら格納取り出しするだけの自動プロパティって何のためにあるんだよ
- 488 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:11:28 ]
- 今は格納取り出しするだけかもしれないけど後でなんか書きたくなるかもしれんだろ
- 489 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:17:26 ]
- まずpublicなフィールドとして記述し、アクセサが必要とされた時点でプロパティに書き換えればいいじゃない
- 490 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:25:44 ]
- フィールドとプロパティではメタデータ上でも区別される
- 491 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:30:58 ]
- ソースレベルで互換性があればいいだろ
そこだけアップデートされるようなライブラリを作ってるなら別だけど
- 492 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:36:24 ]
- 使いたくなきゃ使わなきゃいいじゃない
- 493 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:42:17 ]
- じゃメンバ関数をpublicにするということと等価ってこと?
- 494 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:44:13 ]
- もうそれでいいよ
- 495 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:55:53 ]
- 屁理屈すぎてもう面倒臭い
- 496 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:01:32 ]
- 自分の理屈に合わない理屈は屁理屈ということにしたいんですね わかります
- 497 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:07:10 ]
- >>496
それを屁理屈って言うんだよ。
- 498 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:09:11 ]
- >>497
まるですじの通らない理屈とは思えないが? >へ‐りくつ【×屁理屈】 >まるですじの通らない理屈。道理に合わない理屈。「―を並べる」「―をこねる」
- 499 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:09:11 ]
- フィールド直接触るとかやめてくれ・・。
未来の自分でさえ信用できないのに、他人の利用者を信じれるわけがないだろJK
- 500 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:10:30 ]
- いやいや好きにやりゃいいじゃん
そいつにとってフィールドもプロパティも一緒つーなら それ以外の使い方しないんだろうから どうせ個人でやるだけだろうしw
- 501 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:18:35 ]
- じゃ違うの?
- 502 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:22:27 ]
- Control.DataBindingsと組み合わせるならpublicフィールドの選択肢は無いけどね。
- 503 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:29:35 ]
- なんで?
- 504 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:39:07 ]
- >>503
FormにTextBox2つ貼り付けて class MyData { public string PublicField; public string PublicProperty { get; set; } } 作って textBox1.DataBindings.Add("Text", data, "PublicField"); textBox2.DataBindings.Add("Text", data, "PublicProperty"); として動かしてみたらわかる。 PublicFieldはDataBindの対象にならない。
- 505 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 03:01:01 ]
- >>501,503
その頭の悪そうなレスはやめてくれ
- 506 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 03:42:08 ]
- >>505
同意 とりあえずここ読め ufcpp.net/study/csharp/oo_property.html オブジェクト指向には実装の隠蔽というものがあってだね(ぶつぶつ
- 507 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:13:36 ]
- パブリックプロパティを自動実装すると
パブリックフィールドを直接公開するよりも一般に良いということを示さない限り 一般にプロパティにするべきだという理屈は屁理屈でしかないだろ
- 508 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:20:52 ]
- なんでそこまで拘るんだw
自分しか使わない&拡張する予定がなければフィールド使えばいいじゃない。
- 509 名前:デフォルトの名無しさん [2009/03/29(日) 13:27:47 ]
- >>508
拡張する予定があっても他人が使っていても フィールドで問題ないだろ どういう時に問題が起きるわけ?
- 510 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:31:33 ]
- フィールドで問題ない問題ない
- 511 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:38:43 ]
- はいはい、その通りですね。
君はパブリックフィールド使えばいい。私は今まで通りプロパティ使うけどな。
- 512 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:44:41 ]
- はいはい、その通りですね。
君はプロパティ使えばいい。おいらは今までどおり使い分けるけどな。
- 513 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:46:51 ]
- 春だな
さすがに今日は言っても文句ねえだろ
- 514 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:51:35 ]
- 桜も咲いてるしな・・・
- 515 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:19:23 ]
- ・get setを制限する必要がない
・setされた値を事前に評価する必要がない ・バッキングストアを仮想化する必要がない ・プロパティ自体をvirtualにしたりsealedにしたりする必要がない など、すなわち単なる「変数」であれば、プロパティのほうがコストが 高いのは明らかだから、あえてプロパティを使わずフィールドを公開して 構わないと思うよ。 また、将来上記のうち上3点(最後の1点はまるっきりの変更なんで別だが)の 方針が変更される可能性があったとしても、その時点でフィールドを プロパティに変更すればソースレベルでの互換性は保てるので、問題ない。 (ただし、公開クラスライブラリで、バイナリ互換性が必要な場合を除く)
- 516 名前:デフォルトの名無しさん [2009/03/29(日) 14:21:23 ]
- setを制限したければreadonlyにすりゃいいじゃん
- 517 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 14:39:21 ]
- 明示的に初期値が設定できない自動実装なんて
- 518 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 15:06:45 ]
- プロパティもインライン化されればコストは変わらないんじゃないの
- 519 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:12:56 ]
- 自作クラスを2つのプロジェクトで使いたい場合、使いたいクラスはどっちのプロジェクトに含ませればいいんですか?
今どっちのプロジェクトにも同じクラスを書いていて修正するときなんか無駄があるような気がしてきました この場合どっちのプロジェクトにも含ませない方法とかがあってそうした方がいいんでしょうか?変更は頻繁にするんですが
- 520 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:15:44 ]
- >>519
片方のプロジェクトからもう1つを参照してもいいし、 別にライブラリプロジェクト作って、それを2つのプロジェクトから参照してもいいし、 ソースを「リンクとして追加」もできるし。
- 521 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:52:48 ]
- できました。ありがとうございました
読み込まれるプロジェクトの順番が大事なのかとか変な方向に考えてましたどうもです
- 522 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:07:04 ]
- イベントハンドラのサンプルなんかだと、フィールドでそのまま公開されてるようにみえるけど、
これもプロパティで表示したほうがいいの? msdn.microsoft.com/ja-jp/library/db0etb8x.aspx
- 523 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:16:17 ]
- >>522
event キーワードがついてると、普通のフィールドじゃなくなる。 プロパティのデリゲート版みたいな状態のなので、 そのまま公開されてるわけじゃない。
- 524 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:22:34 ]
- そうなんだ意味が違うんだね サンクス
- 525 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 22:08:28 ]
- ReadBytesで2次元配列に格納する方法がわかりません
これは1次元としてしか扱えないんですか?
- 526 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:56:19 ]
- >>525
嫁が欲しいなら2次元で我慢しとけ
- 527 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:59:32 ]
- 質問です。
C#の本買って勉強してるんですがNorthwindが何なのかわかりません。 Northwindってなんですか? ぐぐっても www.dreamsoft.jp/northwind/index.html こんなのとか msdn.microsoft.com/ja-jp/library/ms143221.aspx こんなのしか見つかりませんでした。
- 528 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:00:56 ]
- MSのデータベース関連のサンプルにちょくちょく出てくる
サンプルデータの名前。 航空会社かなんかのデータっていう想定のサンプル。
- 529 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:01:05 ]
- >>527
後者のリンクにある、サンプルデータベースじゃないの?
- 530 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:01:12 ]
- VS2008EEでプログラムを勉強してる素人です。
拡張コントロールをいくつか作ることで、継承のありがたみは 少しずつ理解できてきたところなんですけど、 インターフェースや抽象クラスの存在意義がなかなか理解できません。 インターフェースの実装を明示することで その機能が実装されてることが一目でわかるというようなこと以外にメリットが思いつかないんですが 大規模なものを書かないとそこら辺の概念は理解できないものなのでしょうか。
- 531 名前:デフォルトの名無しさん [2009/03/30(月) 00:14:27 ]
- >>530
↓の14章を読んでみればどうかな? それでも理解できなければ、今は使う必要性がないんだよ。 www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_014/cs2_014_01.html
- 532 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:15:15 ]
- うぐ、あげちまった
- 533 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:16:12 ]
- ありがとうございます。読んでみます。
- 534 名前:530 mailto:sage [2009/03/30(月) 00:17:11 ]
- ↑530=533です。ID出ないの忘れてました。
- 535 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:22:40 ]
- >>530
インターフェースと抽象クラスの説明は確かに難しいのかも 例えば家電でいうと・・・ ・抽象化 家電は電気製品なのでどんな製品にも必ず電源のオンオフスイッチがある→抽象クラスで記述 ・インターフェース 家電は電気製品なのでどんな製品にも必ず通電する必要がある→ だけど電源を供給する方法は、コンセント、電池、バッテリー、ソーラーパネルと多種多様なので、 電源を供給するための端子は付けておくけど、実際の供給方法は製品に任せる こんな感じ?
- 536 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 00:36:10 ]
- >>525
どんなデーター形式でも扱えるよ。
- 537 名前:530 mailto:sage [2009/03/30(月) 00:42:32 ]
- >>535
なるほど。既に定義されてるインターフェースを使ってみたら だいぶそういう概念が理解できてきました。 もっとも自分で定義して実装する必要性を感じるには もっと大規模なコードを書く必要があるみたいです。 少しずつ使えるようになりたいと思います。ありがとうございました。
- 538 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:07:27 ]
- >>537
stringをフィールドに持つクラスと、intをフィールドに持つクラスで、 それぞれ共通に名前を持つフィールドを持ち、 さらに、それぞれstringに保存された文字列の文字数とintに保存された数字の桁数を取得するメソッドを interfaceを用いて取得する方法を記述してみれ abstract public class BaseClass public string Name { get; set; } public class StringClass : BaseClass public string StringData{ get; set; } public class IntClass : BaseClass public int IntData { get; set; } ここまではわかるっしょ
- 539 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:18:46 ]
- >>538
先生!なぜabstractのBaseクラスを定義しているのかわかりません! その場合インターフェイスじゃなくて abstract int GetLength();をBaseクラスに書くのが適切だと思います!
- 540 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:30:02 ]
- boolのような論理値やimageを格納するclassもあるので、
すべて一様にGetLength()が適用できないんです>< でも、それぞれ名前はもってるんです><
- 541 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:40:42 ]
- Interfaceってのは、RubyやPythonなんかの動的型付言語なら不要だけど、
C#みたいにコンパイル時に確定してないと我慢できない潔癖な処理系に 対して、私はこのメソッド持ってますよと、とりあえず宣言するための 姑息な手段。 うっかり安心して呼び出すと実体は、 throw new NotImplementedException();と書いてあるだけなので、結局 1行目と同じ結果になる。 って、あんまり夜中にアンサイクロペディアとか読みふけってちゃ駄目だな。
- 542 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 01:53:11 ]
- >私はこのメソッド持ってますよと、とりあえず宣言するための姑息な手段。
リフレクションで代用できないの? それはともかく、まぁ、姑息かどうかはわからんけども、 interfaceを継承してるクラスは、そのinterfaceで宣言した型にキャストして実行できるから、 メソッドを持っていますよと、とりあえず宣言するためだけの手段ではないんでないの? キャストできますよという意味と同義で書いてるのならその通りかもしらんが。
- 543 名前:539 mailto:sage [2009/03/30(月) 02:22:10 ]
- >>540
interfaceだって戻り値がintのGetLength()作ったら同じことではないの? abstract int GetLength()をovarrideするのと何が違うの? 俺の言いたかったのはinterfaceの例題を出すなら抽象クラスを使ったら駄目じゃないのかいと言いたい。 >>538のサンプルの場合 public Interface ISample { int GetLength() } を定義したとしてそのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass? BaseClassがInterfaceを実装したとして publice abstract int GetLength();
- 544 名前:539 mailto:sage [2009/03/30(月) 02:26:17 ]
- を定義して IntClassや StringClassがそれをoverrideするなら
GetLengthを呼び出す側はわざわざInterfaceで呼ぶ必要もなくなるわけで。 IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
- 545 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 02:33:03 ]
- >>543
>IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元 すべてはobject型を継承するのは混乱の元? >interfaceだって戻り値がintのGetLength()作ったら同じことではないの? 違うでしょ bool型などの論理型にはGetLength()は必要ないわけで。 その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、 objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。 >そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass? インターフェースを実装するのはintclassやstringclassだね intclassやstringclassをキャストしてISample型のarrayに保存したり、 is ISample で型を確かめてGetLengthを実行したりとか。
|

|