1 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 21:35:10 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part55 (実質56) pc12.2ch.net/test/read.cgi/tech/1260111240/ Visual C# 2008 Express Edition 日本語版 www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ その他テンプレ>>1-5 くらい
552 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:39:01 ] "a"と100のどっちが大きいかなんか定義次第なんだから正しい比較も何もないだろ
553 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:41:11 ] どうやって"one"と5を比較できると思うんだ? 数値に変換できる文字列なら、数値に変換して比較するしかなかろう。
554 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:49:10 ] int.Parse
555 名前:551 mailto:sage [2010/04/27(火) 21:56:06 ] 書き忘れました。 型が同じことが前提です。 >>552-554 ありがとう やはりParseが一般的ですか。 DataViewもParseで比較してるのかな。
556 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:04:26 ] 型が同じって、Objectに入ってるInt32同士を比較したいってことなのか? ならComparerクラスとか
557 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:13:55 ] もう、自分がやろうとしていることを意味的に把握してないから人にうまく説明できないわけで、 その時点でちょっと.....
558 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:15:50 ] 関係ないけどstringやobjectは組み込み型だけどプリミティブ型ではないよ
559 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:55:53 ] >>502 なぬ? >>512 残念ながら一貫してそうはなってない。
560 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:55:42 ] まあ確かにWin9xでなきゃ目くじら立ててDisposeする必要がないものでもIDisposable 実装してたりするし 関係ないけどインターフェイスを「継承」する、って言い回しはJava方面の方言? それとも単にありがちな誤用ってだけなのか。
561 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:03:00 ] ありがちな誤用
562 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:03:04 ] >>560 C#方言。 インターフェイスの概要 インターフェイスには、次の特徴があります。 インターフェイスは抽象基本クラスに似ています。インターフェイスを継承する非抽象型は、すべてのインターフェイス メンバを実装する必要があります。 インターフェイスは直接インスタンス化できません。 インターフェイスには、イベント、インデクサ、メソッド、およびプロパティを含めることができます。 インターフェイスには、メソッドの実装が含まれません。 クラスと構造体は、複数のインターフェイスを継承できます。 インターフェイス自体が複数のインターフェイスを継承できます。
563 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:06:37 ] >>555 型が同じなら、IComparableにキャストしてCompareToするとか。 codepad.org/m37TS28P
564 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:09:13 ] かと思ったら、Javaでも使ってるな。 interface inheritance 言語規定より。 This (multiple) interface inheritance allows objects to support (multiple) common behaviors without sharing any implementation. この(多重)インタフェース継承は,オブジェクトがいかなる実装も共有せずに(多重の)共通的な振る舞いをサポートすることを可能とする。
565 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:14:38 ] インターフェースはインターフェースを継承できる
566 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:15:28 ] >>565 なるほど、それが「実装」だったら確かにおかしいな。
567 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:38:38 ] Javaだと、implements と extends とキーワード異なるけれども、C#だと、どっちもコロンだから用語を忘れてしまうんだな。
568 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 02:12:26 ] クラスがインターフェースを継承している時点で実装があるはずなんだから、継承だけ使えば意味通じるでしょ
569 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 02:19:02 ] >>565
570 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 07:58:33 ] >具体的に言うとstringとint(byteなど)で比較を >正しく行いたいのですが。 >型が同じことが前提です。 どっちだよw
571 名前:デフォルトの名無しさん [2010/04/28(水) 08:01:22 ] >>551 遅レスだけどこんなのダメだっけ if (obj1 is IComparable) { return (obj1 as IComparable).CompareTo(obj2); }
572 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:06:44 ] インターフェースて使った事ないんだけど どういうときに使うの?
573 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:40:01 ] >>572 継承関係にない型の間に共通の機能を持たせて、同じように扱いたいとき。 >>563 ,571がまさにそれ。 C#の言語仕様(foreachだのusingだの)とも密接に結びついているので、 知らず知らずのうちにインターフェースを活用しているはず。 たとえば、IEnumerableを実装しさえすれば、どんな型でもforeachで列挙できる。
574 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:53:40 ] >>563 >>571 これって文字の比較であって、数値の比較じゃないでしょ?
575 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:55:54 ] >>574 何を言ってるんだ
576 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:02:44 ] >>574 冷静になるんだ
577 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:34:27 ] あるクラスを継承してメンバ関数だけオーバーライドして使いたい場合 元のクラスで扱っても大丈夫でしたっけ?
578 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:36:13 ] >元のクラスで扱っても大丈夫でしたっけ? インスタンスを作った後も元のクラスで扱っても大丈夫でしたっけ?
579 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:38:51 ] 元のクラスで扱うってのはどういうことなんだ? 継承元のクラスにキャストするとかそういうこと?
580 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:41:53 ] >>579 ゲームの中にでてくる物体(障害物、自機、敵など)はすべて座標系など特定の 情報を持つという部分では共通ですが、動きだけが違うので管理上は継承前の クラスで管理して、動きに関連するメンバ関数だけを差し替えを実現したい・・ という感じです
581 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:46:35 ] オーバーライドしなくてもいいんじゃないか? 継承先で個別に実装すれば 100%書き換えることが前提になってる感じだからむしろIFとかにしてみるとか・・・ いや・・・いろいろ方法はあると思うが 継承元で関数書いてもどうせ空の実装とかにしかならんだろうし オーバーライドしなけりゃ元の動作のまんまになってしまうのはバグの元だと思うんだ・・・
582 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:47:23 ] >>580 普通にできるが
583 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:49:39 ] >>581 むかーしgcc上で書いた物を移植中なので.netなりの方法はないかなあと模索してたりします。 C時代は関数ポインタのテーブルを用意して・・・とかやってたんですけどね >>582 どんな感じでやればいいですかね?
584 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:54:08 ] >>583 いやだから基本クラスで動き意外の関数作って 継承したクラスで新しく動きの関数作ればいいだけだけど 何が問題なの?
585 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:58:17 ] class 物体 { public void 動き以外の処理(){} } class 自機:物体 { public void 動きの処理(){} }
586 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:58:27 ] >>584 Hogeクラスを継承したHogeA,HogeB・・・・・HogeZとかあったとして 管理はList<Hoge>として全体をまとめたいんです・・
587 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:58:42 ] 抽象クラス使えば?
588 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 13:03:24 ] >>586 >>573
589 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 13:13:10 ] 関数ポインタ使っていたなら、そのまま構造体を抽象クラスにして、関数ポインタを仮想関数にしたら、完成のように思うが。
590 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 14:47:22 ] >>577 やってみたらいいのに何でわざわざ面倒な手順を踏んでるんだ?
591 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 15:27:18 ] まあvirtualでググればいいんじゃないかな!かな! >>577
592 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 18:20:03 ] 模索している割には他の提案を聞き入れようとしない件について もし判ってないならそれは技術力不足以外の何物でもないな
593 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 18:47:36 ] >>592 聞き入れないわけではなく聞いた上で調べた結果実装を考えた際に こういう時どうしようとか悩んでるわけなんですよ たとえばクラスを継承してインスタンスを作る際は確かに一つの メンバ関数をオーバーライドですれば済みますが状態がわかった際に インスタンス化されてしまってるクラスのメンバ関数を状態遷移に応じて さらにオーバーライドできるかとか できないなら、昔書いたように関数ポインタもどきを実装するしかないのだろうかとか でもクラスに関数ポインタぽいことを実装すると関数ポインタのテーブルを もったインスタンスがいっぱいできる?・・・とか
594 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 18:48:18 ] >状態がわかった際に この記述は無しで
595 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 18:57:23 ] >>593 デリゲート
596 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 19:00:03 ] 頭の中が混乱してるみたいですね。 デザインパターンのテンプレートメソッドとストラテジーあたりを勉強するといいかも。 理解できないならIF文で押し切れw
597 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 20:05:06 ] 以下のようなメソッドを用意して、データをネットワーク越しに通信するプログラムを書いています。 private byte[] CompressBytes(object rawData) { using (MemoryStream stream = new MemoryStream()) { using (DeflateStream compressedStream = new DeflateStream(stream, CompressionMode.Compress, true)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(compressedStream, rawData); } return stream.ToArray(); } }
598 名前:597 mailto:sage [2010/04/28(水) 20:06:16 ] private object DecompressBytes(byte[] compressedData) { using (MemoryStream stream = new MemoryStream(compressedData)) { using (DeflateStream decompressedStream = new DeflateStream(stream, CompressionMode.Decompress)) { BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(decompressedStream); } } } 単一のプログラムでテストする場合は問題なく動作するのですが、 クライアント・サーバのプログラムにそれぞれメソッドを組み込んで通信をしていると、 return formatter.Deserialize(decompressedStream); の部分で、「デコード中に無効なデータが見つかりました。」というエラーが出ます。 具体的にはNetwork Streamに対してbyte配列を書き込み、 相手側で読み出すという作業をしているだけなのですが、ローカルとネットワークの場合で挙動が変わるのかよくわかりません。 # ネットワーク越しといっても、サーバプログラムで127.0.0.1に対してポートを開いて、クライアントプログラムで127.0.01にアクセスしているので、マシンスペックに違いは無いはずなのですが… もし何か注意することがあれば教えていただけないでしょうか?
599 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 20:10:35 ] www.sherwooddungeon.com/SherwoodDungeon.htm こんな3Dネトゲが4M程度で実現できてるんだけど C#でやるにはwebdeveloperとかsilverlightが必要?
600 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 20:14:07 ] 俺的に3Dゲームはudkやsource modを使うのが一番現実的だと結論付けた
601 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 20:22:13 ] >>599 inしてみたが週末Flashスレで貼られる戦車のゲームとエリア規模は似てるな まあ4MBってのも圧縮した状態だと小さくなるしなあ
602 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 20:26:47 ] 気軽に対戦ゲーム作りたくてもサーバーが難しいよね
603 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 20:32:16 ] ↓ここで簡単厨のターン
604 名前:デフォルトの名無しさん [2010/04/28(水) 21:17:01 ] まぁ俺にかかったら1日で何でもできるけどね
605 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:22:27 ] >>598 そのエラーが出てるとこのデータの中身はどうなってるんだ? ちゃんと送りつけた時と一緒になってるか? まずはそこからだ
606 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:30:49 ] >>602 ほとんどのレンタルサーバーはゲーム禁止だからな ATPAGESではOKだが、負荷をかけすぎるとアカウント自体止められる
607 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:34:13 ] >>583 abstract class foo { foo(){} abstract bar(){} } class xxx : foo { override bar(){} } とやって、xxxのインスタンスをList<foo>にでも突っ込めばいける
608 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:36:24 ] あと、遷移ごとにfooを継承したクラスを作って突っ込めばいい 詳しくResponserパターンでくぐってみろ
609 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:45:58 ] デザインパターンなんてみんな覚えてるの?
610 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:24:35 ] >>609 そりゃデザパタから入った人は「覚える」って意識になるんだろな。
611 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:46:55 ] 趣味で一人でプログラミングするなら、無理にオブジェクト指向を意識する必要はないけどな。 下手にクラス設計に凝るくらいなら、ひたすらstaticでプログラム組んだ方がましだと思う。 どうせ誰かにソースを見せたり、過去の資産を利用したり、誰かから仕様変更を言い渡されたりはしないんだろ。
612 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:48:17 ] >>611 妄想で語るな
613 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:51:44 ] いや、正しい
614 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:55:35 ] いや、過程に過ぎない つまり妄想
615 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 23:58:52 ] 構造体の配列で回して、キャラのタイプIDでswitchしまくりで別に問題ない
616 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 00:10:33 ] 趣味なら作ってて楽しければいいし、どんなソースでも動けばいいんだよ。
617 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 00:12:40 ] 正解
618 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 00:39:40 ] うん。 でもね、べつにクラス設計とかって伊達で導入されてるわけじゃないんだけどな。 規模が大きくならないとあんまり意味がないってことなら同意だけど。
619 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 01:19:21 ] >>616 動いたけどsbyteで済むようなただのフラグ用の変数すらintで書いていて起動しただけで10MB超のメモリを食ったのは恥ずかしい経験w やっていくうちに分かるってのはあるが、どんなソースでもとかいう気持ちだといつまで経っても向上しないような気はする。
620 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 01:38:49 ] まあ目的と手段を間違えないことだな
621 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 01:41:56 ] ゲームの場合オブジェクト指向が有効そうにみえるんだが 案外そうでもなかったりするんだよな・・・ もうちょっといい方法があればいいんだが
622 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 01:56:24 ] >>598 受信途中のデータの後ろが欠けてるんじゃない? MemoryStreamじゃなくて、直接NetworkStream渡せば?
623 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 13:22:01 ] >>620 それはあるねー。 もっとも趣味プログラマの場合、楽しく正しく書くってのも目的に入ってる人は多いんじゃね?
624 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:04:41 ] WPFやっててバインディングがものすごくよかったんだけど WinFormでも同じようなことできましたっけ?
625 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:12:13 ] バインディングの仕組み自体は似たようなもんだけどUIが貧弱なんだよ コレクションへのDataTemplateを使ったバインディングのようなことをやろうとすると大量のコードが必要になる
626 名前:624 mailto:sage [2010/04/29(木) 15:19:16 ] >>625 そうなんですか・・・ 残念
627 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:23:23 ] >>623 プログラムのプロをプロフェッショナルとかけたダジャレで 昭和生まれは素人プログラマのことをアマグラマって言うんだぜ
628 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:24:38 ] >>625 WPFだとTreeNode.TagにList<>なんかが入ってても 簡単に取得できるの?
629 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:26:28 ] WPFではTreeNodeみたいなのは直接扱わないんだよ 元々ツリー上になってるオブジェクトグラフからバインディングだけでノードを生成する
630 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:28:44 ] >>628 WPFのサンプルみた感じだとTreeNodeじゃなくてツリーを形成するための クラスを自分で作ってTreeViewにぶっこめば勝手に表示してくれてたな
631 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:35:31 ] C#で作られたものをWPFに移植しようとしたら また1から作り直し?
632 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:37:38 ] >>631 WinForm依存のデータ格納クラスはそうなるかも でも最初から依存をなるべく避けたコード書いてればそれほど問題にならない
633 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:37:39 ] ロジックからコントロールを直接触ったりするような馬鹿な造りにしていなければ修正はUIまわりだけ
634 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:38:01 ] >>630 ほー 今メニューの項目をそのままTreeViewに表示しようとしているんだけど 激しく面倒くさい
635 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:50:17 ] ツリービューの項目にボタンを付けてボタンの上にhoge.ImageUriプロパティの値をバインドしてアイコンを表示して アイコンの右にhoge.Nameプロパティをバインドしてテキストを表示して 子プロパティとしてhoge.Childrenプロパティをバインドして再帰的に展開して… みたいなことがXAMLだけでできる
636 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:52:11 ] とにかくすごいわ C++からC#でかなり楽になったけどさらにWPFで楽できそうな感じ
637 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:53:22 ] MSはWinFormよりWPFに力入れてるの? おれもやってみようかな
638 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:55:40 ] WinFormsは完成放置状態 Silverlightに力入れててWPFはそれに合わせてる感じ
639 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:42:59 ] 2008expressはもうダウンロード出来ないのかよ
640 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:47:07 ] www.microsoft.com/downloads/details.aspx?FamilyID=94de806b-e1a1-4282-abc5-1f7347782553&displaylang=ja これISOかな?
641 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:22:18 ] 銀光はApacheとかがMIMEタイプを標準で持つようにならないと普及しないと思う 窓鯖でもIIS7でないと標準で対応してないのがもうね これ、意外と高い壁だよ
642 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:26:31 ] >>641 おいおい .netにはおさるさんがあるじゃなか 銀光とセットで月光あるしLinux上で.net動くぞ 完全互換とは言いがたいが
643 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:05:26 ] WinFormで出来てWPFでできないことって何?
644 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:21:38 ] >>643 wndprocのフック コモンコントロールがないに等しいので自作しないといけない
645 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:27:08 ] お客さんに売り込み辛いんだよな、WPF・・・
646 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:29:15 ] 短期納品、コストさげろ これって生産性あげろってことなのにWPFだめって言われるとねえ・・・
647 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:31:14 ] WPFって実際生産性高いのか xamlが手間かかりそうなんだけど
648 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:32:18 ] 最近コンソールとかサーバーサイドばっかりで、UIのあるアプリ作ってないなぁ。
649 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:34:49 ] >>647 なれるまでが面倒かな XAMLその物はHTMLでwebページ作成するような感じなので 慣れが必要かなあ
650 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 19:00:35 ] >>641 MIMEタイプが問題になるのはSilverlightより、WPF/XBAPやClickOnceだな。
651 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 19:07:54 ] htmlはコード見ただけで拒絶反応
652 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 19:08:36 ] ルーズXAML application/xaml+xml XBAP application/x-ms-xbap ClickOnce application/x-ms-application このくらいかな。IEは無くても処理してくれるが、firefoxの.NET Assistantアドオンを使う場合に必要。