1 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:15:52 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part51 pc12.2ch.net/test/read.cgi/tech/1233757615/ Visual C# 2008 Express Edition 日本語版 www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ その他テンプレ>>2-5 くらい
673 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 00:56:58 ] それはアレやないすかね、テンプレートの扱いがややこしいので 割り切って全部ヘッダにしただけやないですかね。 C++ は重複の多さもあるけど、コンパイル時に色々やりすぎって 話もあるんではなかろうか。
674 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 01:45:06 ] ひとまとめにしたほうがコンパイラも最適化を聞かせやすい品。 SQLiteがやってる。
675 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:10:54 ] .NetFrameworkのJITってSIMDを使わないんですか? 使う事があるのはmonoだけですか?
676 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:48:54 ] せいぜいmovqくらいじゃね
677 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:58:36 ] >>673 C++のコンパイル速度の遅さは文法の複雑さが主な原因。
678 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 03:10:57 ] >>674 VC++はリンク時の最適化というのがあって、 それ使えば全部ひとまとめにしたのと同じような効果が得られる。 まあこれ使うとさらにリンク時間が長くなるんだが。
679 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 03:47:29 ] >>675 SIMDが使える環境では使うようにJITコンパイルされる。 Mono.SIMDはSIMDによる"手動の最適化"を"マネージコードだけ"で行えるのが武器。 .NETでやるには部分的にC++/CLIを用いてネイティブで実装する必要がある。
680 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 03:53:06 ] むしろC#のコンパイル速度が速すぎる。 入力中にバックグラウンドでコンパイルしてるんじゃないかと疑ってしまったぞ。
681 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 07:14:37 ] >>680 VBにしてもJavaにしてもこんなもんじゃね? デルファイとかさらに早いし >>677 無意味なコンパイルだと思われる、一度コンパイルし結果が得られるはずであっても、直前のヘッダファイルが変更されると 全部コンパイルし直さない限り、そのままでいいか確定しないからな。 コンパイルの流れがちゃんとすれば、C++よりはるかに複雑な構造は取り扱えるし、C#だって今となってはC++と比較して遜色ないくらい複雑な内容をもっているし。
682 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 07:21:48 ] >全部コンパイルし直さない限り、そのままでいいか確定しないからな この原因を作り出しているのがプリプロセッサで、C系のプリプロセッサの仕組みは今となっては非常にマズイという事になっている。 それとincludeされるファイルがincludeし始めると、対象が指数関数的に増えるのも問題。 C#の場合はどんなに複雑でも、各ファイルが独立しているので、コンパイル時間は線形的にしか増えない。今の言語はほとんどこのスタイル。
683 名前:デフォルトの名無しさん [2009/06/05(金) 09:43:48 ] 構文解析やコード生成自体はそんなに大したコストじゃないよ
684 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 11:11:08 ] >>683 十分デカイって、特に何か処理のする事がない、ただラベルの付け合わせだけのリンクでさえボロボロのC++においては
685 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 11:25:48 ] C言語とオブジェクトファイルをリンクするldの方式は1960年代の技術だからな、C++も基本的にはこの考え方を踏襲しているわけで かれこれ40年越し、そろそろ半世紀前から使われてきた技術だ、さすがに熟成通り越して酢になってますよ。 今でも実用的に使われているというのはそれだけでも凄い事なんですけどね。
686 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 12:04:10 ] >>680 実際にバックグラウンドコンパイルを研究する価値はあるんじゃないか?w というか、きっと誰かしてる。
687 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 13:55:37 ] たしかにコーディング中の入力待ちアイドルタイムって長いもんな
688 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 15:35:15 ] これからのC++ではC#やVBがIntelliSenseを使うための情報収集をする時間でコンパイルか…… 追い詰まっていると思われ
689 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 19:08:53 ] >>686 ていうか書いた奴が インテリセンスで即反映、コードチェックも即掛かる なんだからバックグラウンドってーか入力がある度にやってるんじゃないか
690 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 20:20:30 ] C++も使うが、Visual Studio 2010はびっくりするほどIntelliSenseが効くようになったのが凄い。 ブログでも今までのを捨てて新しくしたと言っていたし。 まあそれでもC#には敵わないが。
691 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 21:33:22 ] 個人的にはできる限り早い段階でC++よりC#へ移行させてほしいと願うばかり さすがにもうC++ではやりきれない
692 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 09:41:03 ] C#で十分にできることを、C++でやってるんだとしたら、 それは悲しいことだな
693 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:08:20 ] 激しく計算するような分野じゃC#は使えないよ
694 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:44:08 ] GUIと通信部分をC#で書いて、計算はworkstationでやってるけど?
695 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:47:45 ] いいんじゃない
696 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 11:18:04 ] だから向き不向きあるゆーとろーが 向いてるところに生産性の悪いC++使うことないともゆーとろーが
697 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:28:22 ] 激しく計算するような分野だが、C#に変えちまったけどな C++でスレッド管理めんどくさすぎ、やってられない 結局やりきれずにシングルスレッドで書いてC#より遅くて使い物にならん事多々あり
698 名前:デフォルトの名無しさん [2009/06/07(日) 13:29:49 ] いまならC++を使う状況はメモリを直接参照して変更するような処理かな? いまならC++/CLIつかってその部分だけ書くのが便利かもと思ってる。 C#でちょっとした画像処理をポインタを使用して書いた時は、 unsafeがいちいちめんどくさくてストレスがたまったよ。
699 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:34:34 ] C#のunsafeでだるいならC++でもだるいだろう。 ちょっとコード書き足すだけだし
700 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:35:43 ] C++スレで存分に語れよ
701 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:36:11 ] C++のほうもOpenMPはだいぶ楽だと思う。 C#にもあれくらい簡単に使えるのが欲しい。 というわけで、.NET 4.0の並列化関係のライブラリに期待している。
702 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:37:34 ] OpenMPは総合力に掛ける、使いどころが限定的すぎる。
703 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:43:00 ] そんな最強言語決定戦みたいなのは厨二に任せて、 寛容なC#ユーザーはC++を使う人を一々否定しないって顔しとけよ
704 名前:デフォルトの名無しさん [2009/06/07(日) 13:43:16 ] >>699 いや、アンセーフじゃないC++は普通に業務でつかってるかよ。 書くのは全くだるくはないが、ヘッダの依存関係を解決する方が面どくさい。
705 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:44:29 ] だからC++スレで存分に語れよ
706 名前:デフォルトの名無しさん [2009/06/07(日) 14:15:56 ] public class DoubleList : List<double> ってクラスがあって、 コンストラクタが public DoubleList () { } こうなってる場合は みたいなクラスを作った場合には、 new DoubleList() が呼ばれた時点でList<double>が作られますよね? ここで Listのコンストラクタのうち、引数としてcapacityをとるものを DoubleListのコンストラクタとしても用意したいのですが、どうしたらいいでしょうか?
707 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:24:58 ] public DoubleList(int capacity) : base(capacity) { }
708 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:25:23 ] public クラス名() : base(スーパークラスの引数) {}
709 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:29:44 ] 少しエスパーしてみた、本当に欲しいのはこっちか?、ちがってたらまぁ適当にやってくれ。 using DoubleList = List<double>;
710 名前:706 mailto:sage [2009/06/07(日) 14:31:20 ] >>707 ,708さん それです!ありがとうございました。 >>709 さん doubleの可変長配列に各種メソッドの追加、演算子のオーバーロード等がしたくて DoubleListなんて作ってました。 皆様ありがとうございました。
711 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:39:09 ] >>710 ならば、定石としてはコンポジションをとるべきである、多態性を目的としない機能追加を伴う導出は悪だ。
712 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:41:54 ] extention method もあるな
713 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 15:27:51 ] >>703 C++使う人を否定してるってよりは、 仕事でいやいやC++使ってる自分を否定したいんでは。
714 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 16:17:41 ] DoubleListだが、こいつはIList<T> に対するアダプターパターンで解決するのが基本かと。 演算子のオーバーロードというのだから、線形代数系の何かだと思われるが。 相手がList<double>限定では汎用度が低すぎるしな、double [] にも適用したいだろう。 特にIList系より抽象度が低くてよいのなら、IEnumerable<T>ベースで作ってやればLINQの恩恵にもあずかれるだろうし。
715 名前:デフォルトの名無しさん [2009/06/07(日) 20:13:25 ] スレ違いかもしれませんが・・・ VS2008で、#regionで閉じられたソースを一気に全部開きたいのですが、 何かショートカットキーはあるのでしょうか?
716 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:31:32 ] Ctrl+M, M
717 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:48:09 ] >716 ありがとうございます。 CTRL+M系で色々できるんですね。
718 名前:706 mailto:sage [2009/06/07(日) 22:30:26 ] >>711 ,712さん コンポジションって public class DoubleList{ private List<double> list; } ってメンバ変数にしちゃうってことですよね? その場合ってインデクサとかList<double>のうちすべてを自分でDoubleListに実装するってことですか? 手間ばかりであまりご利益が感じられないのですが。
719 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:56:24 ] >>718 コンポジションが嫌なら、Collection<double>からの派生にすればいい。 こいつの派生なら許せる。
720 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:10:14 ] >>718 継承は、依存関係が強くなりすぎるのが嫌われる。 手間はかかるけど、我慢してコンポジションにする人多い。 自分も、手間掛ける時間あるならそうする。
721 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:28 ] コンポジションを作るプログラム書けばいいじゃん、すぐ終わるよ
722 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:47:39 ] 設計屋のオナニーって感じだな List<double>がダメでCollection<double>は許せるとか 意味不明
723 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:19:20 ] Collectionは中の実装に依存しないから。 実装変えるたびに継承関係が変わったら話にならない。
724 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:28:40 ] >Collectionは中の実装に依存しないから。 中の実装ってどこを指してんの?
725 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:41:21 ] 言ってることが滅茶苦茶だな
726 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 07:41:27 ] >>724 CollectionはList実装であることに依存しない、つー話じゃないの
727 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 09:09:07 ] >>724 以下のような話はわかる? ・.NET においては List って時点で配列リストの事を指してる ・List を継承するってのは「配列リストで実装します」と宣言するようなもの ・後からアルゴリズム変えたい(連結リストにしたり両端キューにしたり)場合があると困る ・コンポジションで作ってれば後から変えるのも自由
728 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 09:27:33 ] is-implemented-in-terms-of関係
729 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:32:30 ] グダグタ言わずにインターフェイスは多重継承可、クラスの継承はまずしなくても十分に汎用性が取れないか検討してから クラスの継承は多態性が必要になった時に使う、しかし可能な限りインターフェイス継承。 100の屁理屈より100の実践、守ってやっていれば、なぜそうすることが良いか自然に分かる。
730 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:46:19 ] >>718 public class DoubleList : IList<double> { private List<double> list; } こうすべきだな、他に必要なインターフェイスがあるならそれも加えておく。 最新のVS2008ならIList<double>と書けば、此処をクリックしろとマークがでるので、それをクリックして必要なスタブを全部生成すると便利だ。 こうやってList<double>の『実装に依存』させるのではなく、List<double>の『インターフェイスに依存』させるのだ。
731 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:00:53 ] 「インターフェースの明示的な実装」 すげー、こんなのあったのか
732 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:08:45 ] 結局のところ継承ってのは既に完成しているクラスを改造する行為で、コンポジションとインターフェイスにすると言う事は、 既に完成しているクラスをそのまま利用しつつ、共通項目を共通した方法で取り扱えるようにするという事。 改造する行為はバグを誘発しやすいんだな、なにしろ作った本人どういう手順で改造して欲しいまではあまりドキュメンテーションしないししきれないからね。 ブラックボックスをこじ開けるような行為はしない方が良いのです。
733 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:04:05 ] >>730 (スコア:5, 参考になる)
734 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:49:24 ] こういう初歩的なのはMSDNで3分でわかる○○等でやっているから見ておくといい 設計方法としてもオブジェクト指向の初歩なので、こういうのを知らなかったなら、一度一からオブジェクト指向を勉強するのがいい。 導出が分かればオブジェクト指向などというメチャクチャなのが時折いるが、あなんのは絶対に駄目だからな。
735 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:04:24 ] なにいってんだかわかんねw
736 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:24:45 ] >>726-727 少なくとも System.Collections.ObjectModel.Collection<T> はIListを実装した配列リストなんだが Collectionも配列リストだ クラスとインターフェイスと一般的な概念をぐちゃぐちゃにして話してないか? インターフェイスはIをつける 一般的な概念はそれとわかるような文脈で書いてくれ 頼むから
737 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:28:10 ] とりあえず大元の質問者がList<double>から継承するっていうんなら、 Listにしかないメソッドを使いたいとかいうのもあるんじゃないか Find系とか。doubleだしな なんで>>730 みたいにIListで十分と思えるのかがわからん もしかしてIListはListの公開メソッド/プロパティ全部カバーしてると思ってる? >>734 まったくだな MSDNも見ずに一般論だけで偉そうに講釈垂れるのは ハタ迷惑なアホだな
738 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:31:49 ] >>737 >Listにしかないメソッドを使いたいとかいうのもあるんじゃないか それは完全に間違っているような気が…… >もしかしてIListはListの公開メソッド/プロパティ全部カバーしてると思ってる? そういう問題ではないだろうという気が…… 危険だ
739 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:33:27 ] >>737 「List<T>にしか無いメソッド」も実装すればいいじゃない
740 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:33:47 ] 深いオブジェクト指向の知識など要らないとは思うけれど、必要最低限の知識はもっていてもらいたいものです……
741 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:38:42 ] MSDNは短い割にはポイント絞った良いセミナーやるからな、見ておいて損は無いよ。 特にビデオ物、流してみておくだけでも思わぬ拾い物が多い。
742 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:43:21 ] そういやjavaとか StackがVectorから派生してるとかいうバカ設計なんだよなw Stackなのにランダムアクセスできるwww
743 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:36 ] >>742 処理系によるけど、コールスタックに積んだ引数とか、 普通にSP使ってランダムアクセスする場合の方が多い気がするのだが。 べつに、スタックだからって必ずいちいちpopしなきゃダメってこたないよ。
744 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:55:24 ] >>743 一般的なスタックの概念から外れてるんじゃないかい? >>727 みたいな話になるけども
745 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:05 ] >>743 それならStackなんていらない リストで代用できるしその方が速い
746 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:03:38 ] >>736 あー、そうだった。 でもまぁ、この話って、インターフェースプログラミングのお作法以前の話として、 C#のコレクションの分類に一貫性がないというか滅茶苦茶なのが一番の癌なんじゃないかなぁ。 IListってのがあったら、普通Listはその直系の具象実装だと思うわなぁ。
747 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:26 ] 明示的にスタックとしているのにインデクサでアクセスされたらたまらんな。 おお怖い。
748 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:01 ] まずいとおもったから作りなおしたんでしょ。1.2だかで
749 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:18 ] >>746 まあね
750 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:38 ] >>744 コールスタックって、スタックの第一級の応用例じゃないのかね。 >>745 適当だけど、 int sp = 0; int[] stack = new int[100]; void push(int i) { stack[sp++]; } int pop() { return stack[sp--]; } みたいなノリの実装だったら、少なくともpush(), pop()はlistより高速なんでないかね。 ランダムアクセスのオーダーもListと等価になるし、特にListのが優位な点も見当たらないが。
751 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:08 ] C#のコレクションはLINQと相まって、もういっぺん見直した方がいいとは思う 上のFindの話もそうなんだけど、ああいうメソッドがコレクションについているべきではないと思われるし。
752 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:37 ] Find系は以前からあるから、新加入のLINQと役割的に競合してるわけね
753 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:13:10 ] 一発で決まる綺麗な実装は難しいね、LINQの汎用性ときたら半端じゃない。
754 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:13:11 ] >>750 そのへんは相当シビアな速度求められるところだから []演算子で先頭アドレス基準にアドレス計算しなおすだけで ふざけんなって言われるよ
755 名前:デフォルトの名無しさん [2009/06/08(月) 19:14:14 ] SilverlightではLINQと被ってるのはごっそり削られました
756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:15:35 ] >>754 JavaやC#といった言語はオプティマイズ問題とインターフェイスの問題はきれいに切り分けられるように工夫された言語なんだから、ごっちゃにするなよ。
757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:17:43 ] >>756 コールスタックの話題だろ? >>750 が持ち出してるのは
758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:19:01 ] >>754 C/C++で組み込みのリアルタイムシステムを書いてるならともかく、 JavaとかC#で、そのレベルのチューニングを要求するのはナンセンスな気がするのだが。 そもそも、中間言語レベルでも整数のインクリメントなんて1opじゃないのかね。
759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:20:56 ] >>757 で、コールスタックになったら問題が何か変わるわけ? スタックフレームの知識はあるよ、アセンブラやってたから、心配せずに言ってみな。
760 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:22:56 ] >>757 ん? Stackでランダムアクセスをしちゃいけない理由ってのがあるか否かって話じゃないの? ちなみに、CPUレベルの話なら、pushとpopはほぼノーコストでしょ。 JavaやC#の話をしてるなら>>758 。
761 名前:デフォルトの名無しさん [2009/06/08(月) 19:25:50 ] だからランダムアクセスできたら何のためにリストとは別にスタックがあるのかわからなくなるだろ
762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:31:02 ] >>761 push()とpop()とpeek()が使える、Listの特殊な場合がStack、って分類なだけでしょ。 実装的にもアルゴリズムのオーダー的にも差異はほぼ無いわけだし。 アセンブラレベルでpushとpopを特別扱いしてるのは、詳しくは知らないけど、 それこそコールスタックで使うとか歴史的理由とかその辺じゃないの?
763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:32:06 ] >>762 差異がないってw
764 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:37:16 ] >>762 あんま関係ないけど、呼び出しスタックはダイクストラという偉い人がスタックはハードウェア化すべきだとのたまわったので、以後のCPUでは多く採用された。 構造化プログラミングの提唱者の人ね、その後RISCという方法が主流になって再び捨てられた。 歴史的にはそんな感じ
765 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:38:13 ] >>763 実際、Javaではそのように扱っていて、特に問題は起きてないわけだが。 逆に、「ランダムアクセスができるものはスタックとは呼ばない」という定義が 一般的だと主張するなら、それを示してくれ。 「○○という計算機科学の教科書に書いてあった」とかそういうのでもいいよ。
766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:39:15 ] >>764 そーか、それは知らなかった。勉強になったよサンクス。
767 名前:デフォルトの名無しさん [2009/06/08(月) 19:40:24 ] だから.NETのStackではあえて差異をつけてるんだろ 同じなら二つもいらない
768 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:41:44 ] >>765 無意味なところに話を持っていくなぁ
769 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:53:06 ] Stackでランダムアクセスができるのはおかしい というのに異論がある人がいるとは思わなかったじぇ。
770 名前:デフォルトの名無しさん [2009/06/08(月) 19:57:24 ] できたら意味がない というだけのことなのに…
771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:01:45 ] >>769-770 じゃあ、コールスタックはおかしくないのか、というところに話が戻るわけだが。
772 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:08:31 ] IListインターフェイス付きのコレクションと、そうでないコレクションは実装は同じでも設計レベルでは分けて考えろという事。 実装からインターフェイスを分離独立せよ、これがわからんやつはプログラマ廃業したほうがいい。
773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:21:28 ] 0xcc.net/blog/archives/000043.html 他の言語でも、むしろ配列の操作の一部としてpush(), pop()がついてるのが普通みたいだね。
774 名前:デフォルトの名無しさん [2009/06/08(月) 20:22:57 ] Visual C# 2008 EEで開発しています。 以前C++で書いた関数を利用するにはどうすればいいですか?
775 名前:デフォルトの名無しさん [2009/06/08(月) 20:23:42 ] 書き直しましょう
776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:26:31 ] >>773 そんな結論になるおまえにびっくりだ
777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:29:08 ] >>765 Introduction to algorithms Stacks The order in which plates are popped from the stack is the reverse of the order in which they were pushed onto the stack, since only the top plate is accessible.
778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:29:12 ] >>774 今すぐネットを切断するんだ、そして冷水を浴びろ、それで利用方法を思いつけるはずだ。
779 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:30:16 ] >>776 C#みたいに、配列とスタックを全く違うものとして扱う言語の方が特殊なんじゃないの。 多くの言語では、スタック操作は配列が提供する機能の一部として扱っているようだが。
780 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:32:22 ] >>779 まさか、サイズ不定の場合はリンクリストにするのが普通だろ、こんなの常識
781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:34:54 ] 俺アセンブラはMIPSアセンブラしか知らないけど スタックポインタでランダムアクセスっぽくしてるのは ランダムアクセスというよりPeekの操作に該当するんじゃないかな
782 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:36:10 ] >>781 おまえさんは抽象的に考えるということを一度勉強すべきだな
783 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:38:18 ] 2010年に.NET2.0SDKに置き換わるものが出るの?
784 名前:デフォルトの名無しさん [2009/06/08(月) 20:39:46 ] >>781 こんなところでグダまいてないでさっさとゲーム作れw
785 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:42:33 ] >>777 俺も真っ先にブックサーチでそれを探したけど、 「(カフェテリアで使っているばね式なお皿のスタックは)一番上のお皿のみが アクセス可能なので、スタックにpushしたお皿は逆順でpopしてくる」としか書いてないよね? どこにも、「スタックから一番上以外のお皿を取り出してはいけない」とは書かれていないと思うのだけれど。 >>780 なんで突然Linked Listの話が出てくるのか分からないんだけど、 一応聞いておくけど、Linked Listをランダムアクセスしたときの計算量は?
786 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:43:02 ] >>783 SDKなら.NET3.5用のがすでにあるが、一体何を言いたいんだ?
787 名前:デフォルトの名無しさん [2009/06/08(月) 20:45:53 ] >>785 お前プログラマやめた方がいいと思うよ、マジで、才能ないから。
788 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:46:37 ] >>782 どういう突っ込みか理解できないんだけど。
789 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:46:45 ] >>787 煽りはいいので、論理的な反論をヨロシク
790 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:49:09 ] なんだか足し算できない子供が偏微分方程式を教えろと言っているような様相だなw
791 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:51:05 ] と、高卒が申しております。
792 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:51:22 ] >>785 明示的には書いてないが、その例えと同様に定義しているはずだが。 というのは、その先でキューをスタックで実装しろという問題がある。 意図から考えてランダムアクセスができるはずがない。
793 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:55:36 ] ひどいパラノイアだな
794 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:55:44 ] 素直にオブジェクト指向の教科書買って、一週間程度でいいから読めよと…… 余りにひどス
795 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:56:24 ] 質問者不在の不毛なやりとりだな・・・
796 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:57:49 ] >>792 Figure 10.1では、まさに配列で実装したスタック(An array implementation of a stack S)を 例示として出してるように見えるわけだが。 その問題は、「キュー(の操作)をスタック(の操作のみ)で実装しろ」という以上の意味はないんじゃね。 飯食ってくるのでちょっと返事遅れる。
797 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:04:05 ] >>795 だって、これを見た初学者が 「スタックは配列とは関係ありません。サイズフリーなリンクリストで実装するのが正統(キリッ」 とかいう謎の主張を真に受けたりしたら嫌じゃん。
798 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:10:27 ] >>796 いや、だからその実装を抽象化したのがstackなんだろう。 stackと配列+インデックスは別物。カプセル化されてるだろ
799 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:22:47 ] なあ、スレチじゃない?
800 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:24:26 ] いつものC++の頭おかしい人では、ほんと困ります
801 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:25:21 ] うん。スレ違いです。
802 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:26:16 ] C++のスレもヤツと思わしき書き込みでメチャメチャになってるんだが C++の中の人も大変だなw
803 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:33:16 ] >>798 仮にそうだとしても、配列由来の操作を隠蔽しなければならない確固たる理由はなくね? 事実、C#以外の多くの言語では、スタック操作は配列操作の一部として扱われているわけで。
804 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:45:28 ] ゲームプログラムなら俺に聞けスレも悲惨な有様だね、死んでしまえばいいのに
805 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:47:56 ] 自分は、VectorからStackが派生しているJavaは気持ち悪いと思う。 反対の、IStackやIQueueがあって、IListがその2つ(やその他)を継承するという作りのほうが自然に感じる。
806 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:48:31 ] framework 4.0 の並列処理機能についてMSをのぞいて詳しく書いてあるサイトでわかりやすいところない?
807 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:52:42 ] 継承しないで、独立の実装されるのが理想だと思うな。 class ListStack : IList , IStack ←ないけど class Stack : IStack ←ないけど どちらも実装は同じでもいいだろう、しかし使う側がちゃんと考えて配列アクセスが不要ならStackを使うとしてくれるとListStackとStackの実装は後で変えることもできる。 基礎ライブラリなので変えることはしないだろうが、実際の開発ではこれが決定的な差になる。
808 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:57:02 ] >>805 それだと、スタック操作を定義しないListが作れないような
809 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:57:51 ] 作りとしてはこんな感じかな class ListStack : IList , IStack { List list; 各種実装 } class Stack : IStack { ListStack list; IStack で公開されるメンバーのみ公開しておく } これならListより配列の方が効率的だからという理由で後から object [] といった具合に変えて高速化する事も可能だろう。 上のDoubleListの例でいえば、Listを継承してしまうとListの機能に固定されてしまう訳だ。
810 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:30:22 ] ふらっとが落ち着いたと思ったら、今度はこっちが荒されてて笑った >>806 一番詳しい所は、Parallel Extensionsチームのブログ 日本語で詳しく書いてある所は知らない。
811 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:30:12 ] あまりの流れに素で>>806 をスルーしてたw >>810 を見て初めて存在に気づいたw
812 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:49:31 ] うん、確かに分かりやすく記述してあるな。 ただbeta1だけにそもそも手を出さないのが正解かもしれんな。
813 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:55:20 ] >>803 配列由来の操作を隠蔽しなかったら 他の実装に変えられなくなるじゃん。
814 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:41:17 ] 現在、とある目的のための汎用エディタをつくっているのですが、 GUIを楽に実装したいのでPropertyGrid を使いたいです。 しかし、なんせ汎用エディタなので、設定の項目は xml で定義できるようになっているため、 設定項目をまとめたものをクラスとして定義して PropertyGridに渡す」ということができません。 そういう場合でも PropertyGrid を使う事はできますか? もしくは、空のクラスをつくって、設定ファイルに従って動的にプロパティを追加.. といったことができれば素直に PropertyGrid を使う事ができて楽なんですけど...
815 名前:デフォルトの名無しさん [2009/06/09(火) 01:51:26 ] 何に対して汎用的なのかサッパリーで なんで汎用的だと設定項目がxmlになるのかよくわからん IXmlSerializerとかなかったっけ
816 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:54:03 ] できます
817 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 02:15:42 ] すみません、まぎらわしい書き方でしたね。XMLうんぬんは全然関係なくて、 ようするに 項目名(プロパティ名)とその型(整数、文字列、実数)が設定ファイルで定義されている ↓ 設定をロードするまでプロパティの個数も名前も型もわからない ↓ ソースコード上でクラスを定義できない ↓ だから PropertyGridもつかえない?? ←ここが問題 こういう目的で PropertyGridをつかうにはどうすればいいのでしょう? もしくは、動的にクラスのプロパティを追加したり削除したりするにはどうすればいいのでしょう?
818 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 02:40:53 ] なんかnotepad++とかeclipseみたいな感じか 設定項目をxmlで記述するとして, その設定項目を実際に反映させるのは誰の役目? プラグイン方式にするのだったら設定項目を集めたクラスを,プラグイン側で公開するようにすればいいだけなんだけど
819 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:45:21 ] TypeConverter を継承して、好き勝手な property を登録するという方法でやてみました。 その結果、TypeConverter を継承した MyPropConverter をつくり、 [TypeConverter(typeof(MyPropConverter))] class Hoge{} という空っぽの Hoge クラスのインスタンスを PropertyGrid.SelectedObject に指定することにより、 好きなだけ任意のプロパティ項目を表示できるようになりました。しかし... たとえば オブジェクトAを選択すると、設定テキストAの内容をつかってプロパティを表示、 オブジェクトBを選択すると、設定テキストBの内容をつかってプロパティを表示、 オブジェクトCを選択すると ... するというようにしたいのですが、 すると、いま選択されているのが AなのかBなのか、なんなのかを MyPropConverterが知る必要があります。 (オブジェクトの種類によって GetProperties の戻り値を帰る必要があるため) これはどのように指定すれば良いのでしょう? 理想をいえば、MyTypeConverter のコンストラクタでそのまま設定テキストを渡して解析させ、 結果に応じて GetProperties の戻り値をかえたいです。しかしそのようにすると、 propertyGrid.SelectedIndex = new Hoge(); の行で実行時エラーになります。問題はそもそも MyPropConverterのコンストラクタの呼び出し元はどこなのか?ということですが....
820 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:11:56 ] >>819 ほれ msdn.microsoft.com/ja-jp/library/system.reflection.emit.typebuilder.aspx これなら何でもできるぞ
821 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 08:50:01 ] プロパティの中にプロパティが入ってるやつ Size 10, 10 Width 10 Height 10 それに似た感じで Cube 10, 10, 10 X 10 Y 10 Height 10 を作るにはどうしたらいいですか?
822 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 08:59:28 ] 何が分からないのか分からない クラス/構造体の作り方が分からないのか?
823 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:17:26 ] それは分かりました クラスの中に構造体が入りません
824 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:20:04 ] class Hoge { struct Point { public int X, Y } Point Size { set; get; } }
825 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:27:10 ] >>824 C/C++が混ざってるぞ
826 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:38:41 ] >>825 いや、Y の後ろの ; 忘れてる以外は C# 的に問題ない。 コンパイル通るぞ。
827 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:57:30 ] XとYのsetとgetはどこに書くのですか?
828 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:01:05 ] 構造体の中にプロパティが入らないからわけわからん・・・・
829 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:07:12 ] >>826 ごめんPoint型のSizeは盲点だった public struct Cube { private int width, height, length; public int Width { get { return this.width; } } public int Height { get { return this.height; } } public int Length { get { return this.length; } } public Cube(int width, int height, int length) { this.width = width; this.height = height; this.length = length; } }
830 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:08:44 ] >>827 クラスと同じ >>828 何で入らないと思ったのかkwsk
831 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:39:17 ] 最後にreturn this;入れるのかな? とりあえず仕組みは分かりました ありがとうございます!
832 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:58:24 ] この後この構造体使うプロパティ作ったんだけどビルドでIDE落ちる
833 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:36:21 ] え、これ構造体の中のプロパティって全部使えないの?? 外にまたそれ用のWidth、Height、Lengthのプロパティも作るなら構造体の中にプロパティじゃなくて変数だけでよくない? と思い始めてるけど勘違いしてるのかな
834 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:10:44 ] >え、これ構造体の中のプロパティって全部使えないの?? イミフ。set書け >外にまたそれ用のWidth、Height、Lengthのプロパティも作るなら構造体の中にプロパティじゃなくて変数だけでよくない? プロパティが何のためにあるか理解してないようだな。
835 名前:デフォルトの名無しさん [2009/06/09(火) 12:24:54 ] NetworkStream読み出し用のバッファとして、Queueクラス使うのって大げさすぎる? なるべくコンパクトでオーバーヘッドの少ない方法がいいのだけど、自前でByte用の リングバッファクラス作った方がよい?
836 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:51:55 ] そのbyte列ってどういう用途に使って、どのくらいのサイズがあるの?
837 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:59:37 ] >>836 相手PCからほぼ間断なく来るバイト列を読み込みながら、パケットとして処理出来るまで溜め込んで パケットを解析して次の処理に渡します。 パケットのサイズは200バイト未満で可変です。 パケット間は区切り文字も何もなくダラダラと流れてきますが、途中○バイト目がパケットサイズに なっているので、それを頼りにパケットを解析します。
838 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:24:36 ] TypeDescriptorから深い世界へどうぞ。
839 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:59:32 ] なんかここ最近どっかのスレで見たことあるような質問だな・・・
840 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:16:41 ] >>837 Queueは大袈裟っつーか使い道が違うんじゃないかな NetworkStreamから1バイトずつ読み取るつもりなわけでもあるまい
841 名前:デフォルトの名無しさん [2009/06/09(火) 15:05:23 ] WebBrowser.GoSearch メソッド で、IEのデフォルトの検索ページに飛ばしています。 デフォルト設定では Google になっていて、これまでは必ずGoogleに飛んでいた のですが、ここ数日設定していないのに、Bing に飛んでしまいます。 WebBrowser.GoSearch メソッドを使うとこのBingが自動的に選ばれてしまうのを これまで通り正しくIEのデフォルトの検索ページに飛ばせるように戻せないでしょうか? できましたら、変更の仕方を教えていただきたく、何卒よろしくです。
842 名前:841 [2009/06/09(火) 15:07:12 ] OSはWindowsXpSP3、.NETはVer2.0です。よろしくお願いします。
843 名前:841 [2009/06/09(火) 15:11:43 ] ああ!!わかりました、標準の検索ページ自体が書き換えられていました。 すみませんでした。。。申し訳ありません。。。
844 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:38:00 ] バイト数が送られてくるならリングバッファとかじゃなくて、 単にキューでバイト配列を管理したらいいんじゃない?
845 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:45:01 ] 受信単位の内部バッファをQueueで溜め込むのは普通にありだろう。 深く考えずに単一バッファにして追記していって消費したバイト分を前にずらすという力技でもいけちゃいそう。 サーバの話なら論外だけど。
846 名前:デフォルトの名無しさん [2009/06/09(火) 16:32:02 ] tcpClient tcp; public NetworkStream ns; public Queue<Byte> ReadQueue = new Queue<Byte>(); Byte[] ReadData = new byte[512]; public Test(string hostname, int port) { tcp = new TcpClient(hostname, port); ns = tcp.GetStream(); ns.BeginRead(ReadData, 0, ReadData.Length, CBRead, ns); } private void CBRead(IAsyncResult ar) { NetworkStream ns = (NetworkStream)ar.AsyncState; Int32 cnt = ns.EndRead(ar); for (int i = 0; i < cnt; i++) { ReadQueue.Enqueue(ReadData[i]); } ns.BeginRead(ReadData, 0, ReadData.Length, CBRead, ns); } Queueを使ってやりたいことは大体こんな感じです。 延々とバックグラウンドで受信しているイメージです。 パフォーマンス的にどうなのかなあ、自前リングバッファの方がいいのかなあと言う疑問でした。 ちょっと質問からずれるのですが、連続してストリームを処理する場合のBeginReadの 使い方ってこれであってます?
847 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:34:52 ] Mainが無かったです static void Main(string[] args) { test("192.168.1.100", 10001); while (true) { while (wl.ReadQueue.Count > 0) { Byte b = wl.ReadQueue.Dequeue(); Console.Write(b.ToString("X2")); } } }
848 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:47:38 ] もうQueueなんて使わないでMemoryStreamに流し続ければいいんでない? そしてCBRead()の最後がキモい だれも止められないじゃん
849 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:55:12 ] >>848 どうしてもバッファから取り出した分を詰める作業が必要なのでMemoryStreamはちょっと。 最後キモイですか。 我ながらこりゃあいいやと思ったんですが、どうしましょうか。
850 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:08:55 ] んーいまいちQueueの用途がわからない もしかして>>846 は肝心の”取り出した分を詰める作業”が書かれていない? しかも,そもそもTCPなんだからByte型のデータを自前でバッファする必要性をあまり感じないんだが. むしろQueueに突っ込むのは,データストリームから取り出した使えるデータの方がヨサゲ
851 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:13:56 ] だよね 少なくともバイト数が分かる仕様ぽいから、 受信スレッドがひたすらまとまり単位でバイト配列に取り出してバイト配列をキューに追加 処理スレッドがキューからひたすら取り出して処理すればいいような気がする。 ああ、スレッド間の同期はちゃんとやってね。
852 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:15:44 ] その場合は簡単なブロッキングキューを作ればよりシンプルになるかも。
853 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:30:09 ] >>810 亀だけどサンクス 思ったより知りたいことが書いてあったので為になった!
854 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:41:04 ] public static object GetMyObject() { AssemblyName asmName = new AssemblyName("myAsm"); AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run); ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("myModule"); TypeBuilder typeBuilder = modBuilder.DefineType("myClass", TypeAttributes.Public, typeof(object)); typeBuilder.DefineField("x", typeof(int), FieldAttributes.Public); typeBuilder.DefineField("y", typeof(int), FieldAttributes.Public); Type mytype = typeBuilder.CreateType(); return Activator.CreateInstance(mytype); } という動的クラスのインスタンスを返す関数を作って propertyGrid.SelectedObject = GetMyObject(); とやってみましたが、プロパティグリッドにはなにも表示されません。 GetMyObject() の戻り値をみてみたところ、クラス名 myClass で メンバ x, y も存在し、意図したとおりのクラスとインスタンスが 生成されているように見えるのですが、プロパティグリッド反映されないのはなぜなのでしょうか?
855 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:45:43 ] だってobjectだもの
856 名前:デフォルトの名無しさん [2009/06/09(火) 20:46:32 ] 肝心のプロパティを定義してないじゃないか
857 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:53:34 ] そうだった objectじゃなくてもいいんだった
858 名前:デフォルトの名無しさん [2009/06/09(火) 20:56:33 ] プロパティグリッドで使うだけなら本当に型を生成しなくてもTypeDescriptorで簡単にプロパティを追加できるよ
859 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:57:59 ] >>856 の書いてるように、フィールドでは駄目だよ。 基本的には読み書き可能なプロパティを定義しないと。
860 名前:デフォルトの名無しさん [2009/06/09(火) 21:04:18 ] プロパティを定義するならアクセサメソッドの実装を ILGeneratorで生成しないといけないので超面倒だぜ
861 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:12:53 ] まあぶっちゃけDataSetに読み込んでDataRowViewを使えばいいんじゃないかなw
862 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:15:02 ] ここまでしてpropertygrid使う意味があるのだろうか
863 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:25:16 ] 自分で作ることと総合的に考えれば、圧倒的に楽になる可能性はあるよ。 DataTableに一行目とかに読み込んで、DataRowView(DefaultViewでもいい)を取り出して、 1行目をPropertyGridにバインドすれば簡単なことならできる。 これで事足りれば、新しいクラスを作ったりTypeDescripter絡みを自分で処理する必要はない。
864 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:30:30 ] 1行に1文字以上typoがあるはつは信用ならにゃい
865 名前:デフォルトの名無しさん [2009/06/09(火) 21:31:39 ] CLR型やアセンブリを作り捨てしたらメモリリークするぞ
866 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:34:41 ] ちょっと教えてください。 ListViewのList表示で横スクロールするときになめらかにスクロール させたいんだけど、どうすればいいんでしょうか。 エクスプローラみたいなスクロールじゃなくてFileVisorみたいなスク ロールといえばイメージ伝わるかな。 ListBoxに無理矢理描画しようかとも思ったけど面倒だし、うまい方法 はないでしょうか。よろしくお願いします。
867 名前:デフォルトの名無しさん [2009/06/09(火) 22:37:22 ] WPFに移行する
868 名前:デフォルトの名無しさん [2009/06/10(水) 07:38:42 ] 今勉強中なんですけど カプセル化って隠すという意味ですよね? デリゲートが何でカプセル化になるのか今一ピンとこないんですが
869 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:09:36 ] >カプセル化って隠すという意味ですよね? 多分違う
870 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:19:23 ] どのメソッドを呼び出すか?を隠してる
871 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:29:56 ] 隠してない
872 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:41:45 ] ある意味隠してる
873 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:16:07 ] アクセス制限として見ると隠してないが、 カプセル化として見れば隠してる
874 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:51:36 ] >>868 雑だが Commandパターン クロージャ
875 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:27:40 ] ヘジたん的にはデザイナでコントロールクリック一発、それそこに書けを実現するための部品の一つでしかないんだろうな。 複数のメソッドが登録できるあたり、発想は明らかにクロージャー等ではないし、今ではクロージャー化しつつあるけど
876 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:38:35 ] 小理屈よりも、まずやりたい事ありきというC#の考え方は嫌いじゃないです IDEの支援を想定した文法とか、常識的にはこの文法冗長でだるいだろう普通やめるだろうというのが平気で入っている。
877 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:08:08 ] カプセル化も大きなウェイトを占める概念の一つであって それがすべてじゃないと思うよ。
878 名前:デフォルトの名無しさん [2009/06/10(水) 11:10:29 ] オブジェクト指向的にはメソッド一つだけのインターフェイスと等価 パターンとしてよく必要になるんだけど>>876 の言うように面倒だから言語に取り込んだ
879 名前:デフォルトの名無しさん [2009/06/10(水) 16:45:29 ] 非同期実行する場合に new Thread ThreadPool.QueueUserWorkItem BackgroundWorker delegate.BeginInvoke …ほかにもある? なんか色々あって混乱するけど、どういう場合にどれを使えばいいの?
880 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 16:49:47 ] どうぞ ttp://codezine.jp/article/detail/144?p=1
881 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:25:53 ] >>880 ありがとう、でももうちっと最近の記事じゃないとBackgroundWorkerとか扱ってないかも private void BackgroundStart() { Action act = () => { while (true) { Thread.Sleep(50); Console.WriteLine("にゃー!"); } }; act.BeginInvoke(null, null); } static void Main(string[] args) { BackgroundStart(); while (true) { Thread.Sleep(50); Console.WriteLine("わんわん!"); } } 今はこんな感じで書いてるけど、可読性いいのかこれ? BackgroundWorkerはいろいろリッチだけど、使うの難しそう。
882 名前:854 mailto:sage [2009/06/10(水) 17:31:56 ] どうもありがとう filed ではなくて property をつくったら見事意図したとおりにできました! 最後にひとつ。 動的に作ったクラス、のインスタンスのプロパティに値を設定するには どうすればよいですか? もしくは、PropertyGird をプログラム側から操作して、PropertyGrid.SelectedObject のプロパティを変更することはできますか?
883 名前:デフォルトの名無しさん [2009/06/10(水) 17:44:41 ] リフレクションを使う プロパティを生成できた奴がそんな質問をするなんて考えられないと思うんだが
884 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:48:08 ] わざとだろ、自分で考えろ以上終了だな
885 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:30:56 ] ボスケテー AA作成支援ソフトっぽいもの作ってまして 標準環境(www.geocities.co.jp/HeartLand-Yurinoki/1836/mona_font_settei.html ) で指定した文字列の表示幅を取得する方法を探してます Graphics.MeasureStringや TextRenderer.MeasureTextなんかを使えばいけるんだと思うんですが どーにもIE標準環境の作り方がわかりません(Graphicsオブジェクトどーやってもってくるの?) おせーてくださーい
886 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:37:54 ] onpaintとかのじゃだめなのかな?
887 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:48:23 ] 普通にControl.CreateGraphicsでもいいしGetDCしたのからFromHdcでもいいし
888 名前:885 mailto:sage [2009/06/10(水) 22:50:23 ] 何が文字列の表示幅を決定している要因なのかよく理解していないものでして てっきりGraphicsオブジェクトのプロパティに大きく依存するのかと思ったんですが 今メンバ見てもそれっぽいもの無いみたいですね。。 例えば下の二つの文字列 「ああああああ」 「..............................」 を長さ測定関数に渡した時に同一の値が帰ってくるような 状態をとりあえず目指していろいろやってるんですが なかなかうまくいかないですね・・・ とりあえずもうちょっと調べてみますー
889 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:12:03 ] フォントだよ
890 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:33:33 ] あー なんとかできたっぽいです 同じフォントでも環境によって表示のされ方違うのかと思ってました レスくれた方ありがとでしたー
891 名前:854 mailto:sage [2009/06/11(木) 00:54:54 ] 以下のようにしたらうまくいきました リフレクターというヒントをくれたかた、どうもありがとう Type type = (Type)MyClass; type.GetProperty("x").SetValue(propertyGrid.SelectedObject, 1234, null); いままでずっと C をやっていて C# も .Net おとといはじめたばかりなので、 ヒントがなければライブラリのどこに何があるかさっぱりわかりませんでした。 どうもありがとう!
892 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:01:32 ] どういたしまして お役に立てて光栄です
893 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:42:51 ] 質問者の笑顔のために
894 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:25:30 ] >>881 > Action act = () => なんぞこれ
895 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:38:37 ] lambda式でしょ。
896 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 13:05:26 ] >>894 actという名前の変数はAction型 () => {...} はAction型のリテラル(ラムダ式)で,空の引数を受け取って何かしてる
897 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 17:52:31 ] C#のAAはこれでおk? (c_c#)
898 名前:デフォルトの名無しさん [2009/06/11(木) 22:31:35 ] C#の式として有効なものしか認めない
899 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:56:39 ] >>897 //(c_c#) でOK
900 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:57:17 ] "(c_c#)"
901 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:33:06 ] (^c_^#)
902 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:42:17 ] (T_T)=>("^A^")
903 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 11:28:58 ] */
904 名前: ◆BOHwjyHW6o [2009/06/12(金) 12:24:43 ] 完全にハマりました。 質問させてください。 今、S/C間の通信プログラムを書いています。 -------- //↓サーバー側プログラム this.mListener = new TcpListener(IPAddress.Any, 58201); this.mListener.Start(); clTCPClient = this.mListener.AcceptTcpClient(); -------- //↓クライアント側プログラム TcpClient tcp = new TcpClient(); tcp.Connect("@", 58201); -------- @をlocalhostにすると接続が確認できます。 @をグローバルIPにすると接続できなくなります。 SocketExceptionが出ました。 ErrorCodeは10061 エラーメッセージは「対象のコンピュータによって拒否されたため、接続できませんでした。@:59201」と出ました。
905 名前: ◆BOHwjyHW6o mailto:sage [2009/06/12(金) 12:26:01 ] ポートが空いていないのだろうと思い、 ttp://www.navnav.jp/port/ ココでポートの解放チェックを行いました。 結果、ポートは空いていました。 (ポート解放用と思われる接続もサーバー側のAcceptTcpClientでキャッチできました) @をグローバルIPにして接続を行いたいのですが、どうすれば良いでしょうか? また、何を確認すべきでしょうか? 環境は以下の通りです。 ・PCは1台でテストしています。(OSはXP) ・Visual Studio 2008 で開発を行っています。 ・ウィルスバスターは終了させた状態です。 ・ルーターはフレッツ光のCTUです。 ・ハブはBUFFALOのAirStationをルーターOFFモードで利用しています。
906 名前: ◆BOHwjyHW6o mailto:sage [2009/06/12(金) 12:28:30 ] すいません。エラーメッセージ間違いました。 正しくは、 「対象のコンピュータによって拒否されたため、接続できませんでした。@:58201」 です。 よろしくお願いします。
907 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:33:04 ] どこか上流でファイアウォールでも動いているんじゃない?
908 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:37:08 ] ん? ルータの内側にいるのに,外側のIPに接続しようとしてる? ルータの実装によるけど,ふつーはつなげないんじゃないかな
909 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:41:36 ] NAPTしてるのを適切に処理してないって落ちじゃないの
910 名前:777 mailto:sage [2009/06/12(金) 13:12:08 ] SqlConnectionStringBuilderでAttachDBFilenameだけをクリア したいのですが、ヘルプ通りnullを渡すとエラーになります。 他にどんな方法があるんでしょうか?
911 名前:910 mailto:sage [2009/06/12(金) 13:13:29 ] 申し訳ない。 >>910 の名前間違いです。777ではありません
912 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:19:59 ] SqlConnectionStringBuilder strbld = new SqlConnectionStringBuilder(); strbld.AttachDBFilename = "";
913 名前:910 mailto:sage [2009/06/12(金) 13:24:23 ] >>912 やっぱりそれしかないんですね。 最終的な文に"AttachDbFilename=;"が入っちゃうんで消せないかなと 思ってたんですが、そうしておきます。ありがとう。
914 名前: ◆BOHwjyHW6o mailto:sage [2009/06/12(金) 13:41:29 ] >>907-909 返答ありがとうございます。 色々試行錯誤しているのですが、結局駄目でした。 localhostで作業を進め、サーバー立ては次の機会に行います。 ありがとうございました。
915 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:13:46 ] 試行錯誤ってルーターを別の機種にするしか無いんじゃ・・・
916 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:13:14 ] フレッツ光のCTUは変更できないよ。 専用ルーターだから。
917 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:44:54 ] >>905 そういうルータ越しの環境だと、自分とこからグローバルIPアドレスでルータを越えてまた自分とこにくる通信は無理だと思う。 クライアントを別の回線(携帯とか友人宅・会社・学校)からやってみたらどう?
918 名前:デフォルトの名無しさん [2009/06/12(金) 22:28:23 ] VS2008Pro、WinXPPro、C#で開発しています。 単体テストの機能を始めて使ってみたのですが、これには 「あるディレクトリ以下にある全てのデータファイルでテストを実施する」 という総当り的な、機能は付いているのでしょうか? csvで、テストケースを一個一個作成していくのも面倒なので、個人的にはデータファイルを作って、 それをあるディレクトリ以下に放り込めば、勝手にテストしてくれるような機能を期待していたのですが…… やはり、自前で作るしかないですかねぇ。とはいっても、自前で作ってるのは、すでにあって、 今回はそれを既製品に移行しようという話なので、自前で作る云々になると話がズレて来るんです。 どなたか回答をお願いします。
919 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:45:39 ] 自分の場合、ひかりone(旧テプコひかりからの移行なのでちょっと構成が違う)で 「光モデム」−「ルーター(ヤマハ)」−「サーバーやらクライアントやら」 って構成でグローバルIPアドレス指定で内部のクライアントからサーバー見えてるよ
920 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:50:22 ] >>914 はflet'sつまりntt製のモデム兼ルータってことじゃないかと
921 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 23:13:48 ] >>913 SqlConnectionStringBuilder strbld = new SqlConnectionStringBuilder(); strbld.AttachDBFilename = ""; ↓ SqlConnectionStringBuilder strbld = new SqlConnectionStringBuilder(); strbld.Remove("AttachDBFilename");
922 名前:デフォルトの名無しさん [2009/06/13(土) 21:45:53 ] フォルダが「共有フォルダ」かどうかを知ってアイコンに手のマークを 付けるにはどうしたらいいか知りたく。 「共有フォルダ」の一覧を得るには System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Share"); これでいいという情報は得ましたものの、これでなくてDirevtoruInfoのAttributes のように高速で一発でわかる方法があれば尚ありがたく。 またアイコンに手のマークを付けるにはどのようにするものでしょう、 ご指導をいただきたく。
923 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 21:52:29 ] 別管理なんだから、なんたらInfo からじゃ取れないだろ。 まっとうにやるなら、NetShareEnum() だな。それほど遅くない。 オーバーレイは ImageList_SetOverlayImage() とかで。
924 名前:デフォルトの名無しさん [2009/06/13(土) 22:23:34 ] >>923 おお!!そういう方法があったのですか! ありがとうございます。勉強してみます!! 助かりました!