1 名前:デフォルトの名無しさん [2008/09/29(月) 12:39:47 ] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 前スレ ふらっとC#,C♯,C#(初心者用) Part30 pc11.2ch.net/test/read.cgi/tech/1219220127/
2 名前:デフォルトの名無しさん [2008/09/29(月) 12:40:21 ] C#, C♯, C#相談室 Part48 pc11.2ch.net/test/read.cgi/tech/1219481054/ WPF(XAML,XBAP,.NET3.5)GUIプログラミング pc11.2ch.net/test/read.cgi/tech/1211453941/ Live2 pc11.2ch.net/test/read.cgi/tech/1203674757/ 初心者のためのプログラミング言語ガイド Part11 pc11.2ch.net/test/read.cgi/tech/1218282605/
3 名前:デフォルトの名無しさん [2008/09/29(月) 12:40:49 ] 参考サイト。まずはここで検索してから。 www.google.co.jp/ homepage3.nifty.com/midori_no_bike/CS/ www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html dobon.net/vb/dotnet/ jeanne.wankuma.com/tips/ www.labasp.net/CsharpNote/
4 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:20:37 ] (前スレ続き) ってゲームのセーブデータみたいな移動・コピー不可属性のことか? あれは自分で好きにプログラム組めないからできる話。
5 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:24:49 ] スレタイの「ふらっと」ってどういう意味なんでしょう(?_?)
6 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:30:13 ] >>998 そこまで規制する必要ってのも無いとは思うけどなぁ。 機密文章の持ち出しを禁止するため? 簡単に破られても良いなら、ファイルパスがキーになってファイルの暗号化を解くとかその程度で良いんじゃないかな? それにしても、NTFSにダビング10とかコピーワンスとかあったらいやだなぁ 保護されたファイルを開くと OSがそのプログラムを監視して そのファイルに類似したデータを作成させないようにしたりして すごく息苦しくていやになるなぁ。
7 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:31:59 ] あ
8 名前:前スレ993 mailto:sage [2008/09/29(月) 13:40:28 ] >>4 >>6 そうです、フォルダ自身やファイル自身に属性があれば制限が可能になる のだとは思うのですが、少なくともWindows系ではそういう制限はやはり 存在しない、ということですよね? あればそれをそのフォルダやファイルの作成者が設定可能になっていれば できると思うのですが、今後そういうものは追加される可能性はないでしょうか?
9 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:48:44 ] いやだから、読めることができるデータがあって、どこかに書き込みできる権限があれば、 コピー不可だろうがいくつでもコピーできちゃうでしょ、ここはプログラム板だよ? ファイラーが提供されたものしかない世界じゃないと無理。
10 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:52:36 ] > あればそれをそのフォルダやファイルの作成者が設定可能になっていれば > できると思うのですが、今後そういうものは追加される可能性はないでしょうか? 誰かエスパーのひと解読頼む
11 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 13:58:54 ] >>9 >どこかに書き込みできる権限があれば、コピー不可だろうが >いくつでもコピーできちゃうでしょ だから、そのデータ(=フォルダ、ファイル)に色がついていて、 色がナンであるかで、書き込みを制限する属性があれば、という ことですよ。 >>10 その属性を、それらデータ(=フォルダ、ファイル)の作成者が、 OSのサービス機能(プロパティ->セキュリティタブ、など)を使って 設定すればそれが有効になる、というような仕組みということです。
12 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:00:56 ] >>11 その属性を律儀に守らないと無理だろ。 プログラム書いたことあるのか?
13 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:02:33 ] >>11 続き だから、例えば、「複製作成」の許可と言った感じで、「削除」の許可 の次あたりに追加してあれば、それをチェックすることで、そのフォルダや ファイルに色がつくわけで、 そのデータを「書き込み」する時点で、それを操作を制限する、という 仕組みということです。これが可能になれば、複製してほしくないフォルダや ファイルというものを作ることが可能になるわけです。
14 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:04:20 ] >>12 まあ、ですから、「書き込み」という操作にも影響が及ぶような 仕組みでないといけないわけではありますですが・・・。
15 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:04:56 ] >>10 >>8 ooOO(ファッキュー) ttp://www.nicovideo.jp/watch/sm2364432
16 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:05:58 ] いや、だからさ。 Explorerでのコピー操作ならそれでいいかもしれないよ? でもさ、プログラム上、ファイルデータは単なるバイト配列として扱われるわけ。 で、単なるバイト配列を適当に作ったファイルに書き込むのを制限しようがないよね?
17 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:13:38 ] >>16 確かに、どこまでのレベルで制限するのか、という問題はありますね。 ただ、ファイルシステム上の操作と言われる操作機能では制限される、 ということにしておけば、いわゆる 「ファイラ・ソフト」 レベルでは簡単 にはコピーされないで済む、という感じにではできないでしょうか。 ファイラを、そうやって原初レベルのI/Oの操作から作成されてしまえば 確かにできてはしまうのでしょうが・・・。
18 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:17:29 ] その属性のファイルを読み込んだプログラムはファイルの作成 や書き込みが失敗するように またほかのプログラムとの通信までできないようにOS側で徹底 的に管理するのか そこまでやったとしても抜け道は存在するような気がするが
19 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:18:08 ] >>17 続き 少なくとも、Win32APIや.NETFramework上のファイルシステム関係のメソッド からは制限できる、といった感じで。それをやっても、制限としては価値は ないでしょうか。
20 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:22:19 ] >>18 フォルダやファイルのデータの中身そのもの仕掛けを作り、 それを所定のAPIやメソッドのコピー操作で書き込むときに 引っ掛ける、という感じまででいいかとは思っています。
21 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:28:25 ] 一切ないね バックアップソフト作る会社が迷惑蒙るだけだろ
22 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:37:06 ] なんにせよC#でやるべきじゃないのは確か
23 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:50:53 ] >>21-22 わかりました。アドバイスくださり、 ありがとうございました。
24 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 15:15:28 ] 新しいFSを開発するスレはここですか?
25 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 15:16:59 ] いや、つまんないから。
26 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 15:29:33 ] >>993 拡張子を.scrにしたらコピーできなくなるよ
27 名前:デフォルトの名無しさん [2008/09/29(月) 18:14:40 ] web上からデータを取得するために以下の命令文を記述しました HttpWebResponse res = (HttpWebResponse)req.GetResponse(); さらに、webのURLが間違えていたり、たまたまサーバーがダウンしているときに 備え、try〜catchの例外処理を施そう試み try { HttpWebResponse res = (HttpWebResponse)req.GetResponse(); } catch(Exception e) { ・・・・・ } Stream st = res.GetResponseStream(); StreamReader sr = new StreamReader(st, enc); と記述し直しました。 ところがこの状態でコンパイルを試みると、Stream st = res.GetResponseStream();で 「エラー 1 名前 'res' は現在のコンテキスト内に存在しません。」 というエラーが帰ってきました。try〜catchの例外処理に何か間違いでもあったのでしょうか?
28 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 18:21:20 ] 変数のスコープを考えろ。 それから、直接は関係ないがcatch(Exception)はやめたほうがいい。
29 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 18:21:28 ] そりゃスコープから外れたから。 HttpWebResponse res; ここだけ外に出してごらん。
30 名前:27 mailto:sage [2008/09/29(月) 18:28:53 ] try文の中身を HttpWebResponse res; try { res = (HttpWebResponse)req.GetResponse(); } と変更してみましたが、今度は同じく Stream st = res.GetResponseStream();の部分で 「エラー 1 未割り当てのローカル変数 'res' が使用されました。」 という違うエラーが帰ってくるようになりましたorz・・・ その後ものは試しとtry文の前の命令を HttpWebResponse res = null; と書き直してみたところエラーも発生することなくコンパイルが通りました。 これでよかったのでしょうか?
31 名前:27 mailto:sage [2008/09/29(月) 18:29:37 ] >>28 > それから、直接は関係ないがcatch(Exception)はやめたほうがいい。 そうするよう参考書に書かれていたんですが(´・ω・`)・・・
32 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 18:36:38 ] 初心者向けの本なんだろうからしょうがない 本当はMSDNに書いてある形でキャッチするようにしないと
33 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 18:40:03 ] tryで例外出してcatch後にもresを使ってるだろ。 それで未初期化のresを使う可能性があるという警告だよ。 tryブロックに入れるか、catchしたらres使う行に行かないようにしなくちゃ。
34 名前:27 mailto:sage [2008/09/29(月) 19:04:09 ] >>32 > 初心者向けの本なんだろうからしょうがない > 本当はMSDNに書いてある形でキャッチするようにしないと (WebException e)で受け取り、e.Messageあたりでエラーを表示するようにすればいいでしょうか? >>33 なるほどresは全てtry文の中に収めたほうが堅牢性が増しましたか。
35 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 19:17:35 ] 引数に渡されたStreamのデータのフォーマットが正しくないときにはどの例外を投げたらいい? 自作?
36 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 19:23:25 ] 自作しても良いがArgumentExceptionでいいんじゃね
37 名前:27 mailto:sage [2008/09/29(月) 19:24:30 ] >>35 自作です。 よく考えたらStreamで受け取ったデータを見て、フォーマットが正しいか否かで 正しくデータを受信できたかどうか判定するのがいいかもしれません。 GetResponse(); の例外ってあまり使う機会は無いかも知れませんね。
38 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 19:30:32 ] > GetResponse(); > の例外ってあまり使う機会は無いかも知れませんね。 や、普通は503返されたりとかしたときの対応が必要だと思うが
39 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 20:17:36 ] 問題は例外キャッチしたあとどうしようとしてるかだ
40 名前:デフォルトの名無しさん [2008/09/29(月) 21:08:34 ] 質問です。 生徒、Aさん Bさん Cさん.... がいます。 それぞれの人に、国語や数学のテストの成績があったとして、 (名前,科目,点数) というようなデータを、それぞれの人がもつ変数に入れていくプログラムを作りたいと考えています。 ここで、(名前,科目,点数)のデータはイベントでランダムに送られてきます。 Aさん、Bさん、... は、生徒クラスを作成し、1人1インスタンスでnewしたとして、 問題1)Aさん、Bさん、... 別のインスタンスを作成する方法がわからない(それぞれにユニークなインスタンス名を与える方法?) 問題2)問題1が解決したとして、ランダムに送られてきたデータを、それぞれのクラスに振り分ける方法がわからない。 というよりも、なんかもっとスマートな解決策があると思うのですが、、、
41 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:10:43 ] なんかスマートじゃない方法なら、コードが書けるような口ぶりだな。
42 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:11:36 ] 普通は生徒クラスに名前プロパティ用意するんじゃね? つかクラスに振り分けるって何よ
43 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:20:16 ] >>40 「インスタンス名」とは変数名のことだと思うが、そんなものはユニークである必要どころか 名前をつける必要すらない。(データベースのレコードに名前なんて必要ないように) 単純化していえばデータ構造は「生徒クラス」のリストでよく、 要は名前なら名前からそれに一致する「生徒クラス」のインスタンスを 検索できる機能を考えればそれで済む。 それができれば問題2も自動的に解決するでしょ。
44 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:20:40 ] >>40 class クラス:List<生徒> // 生徒Collectionでもおk { String 名前; int Get平均点(科目名 科目);}みたいなクラスにAddしていけばいいんじゃない?
45 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:20:51 ] Dictionary<string, Student> dic = new Dictionary<string, Student>(); Data[] data = GetData(); foreach(Data d in data) { if(dic.ContainsKey(d.Name) == false) { dic.Add(d.Name, new Student(d.Name, d.Subject, d.Point)); } else { dic[d.Name].AddResult(d.Subject, d.Point); } } こんなんかね
46 名前:デフォルトの名無しさん [2008/09/29(月) 21:29:46 ] テキストエディタ作ってみました TeraPad風ですが、プラグインの追加機能などあります www.dotup.org/uploda/www.dotup.org7215.zip.html
47 名前:デフォルトの名無しさん [2008/09/29(月) 21:32:37 ] 素早い返信ありがとうございます。 >>41 さん すいませんでした。 >>42 さん プロパティに名前を入れておき、送られたデータに対して名前が一致するかしらべるメソッドを用意して、一致すれば科目データを入れるというやり方の場合、 すべてのインスタンスにデータを送る方法がわかりません。そして、そういう処理は効率が悪いと思います。 変な説明で申し訳ないです。 >>43 さん 「生徒クラス」のリスト、という意味が分かりません。クラスのリスト?クラスをリストにする?っていう意味が・・・ リストの項目にクラスのアドレスを入れておいて呼び出す?
48 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:44:11 ] >>45 そのStudentのコンストラクタ引数は不自然とおもふw
49 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:48:42 ] dic.Add(d.Name, new Student(d.Name, new[] { new SubjectScore(d.Subject, d.Point) }); こんな感じか
50 名前:40 [2008/09/29(月) 21:51:08 ] 具体的な例文まで示していただいて頭が上がりません。 >>44 さん class クラス:List<生徒> の意味が分かりません。すいません勉強不足です。 Listを継承してるというのは分かるんですが、<生徒>という部分がどういう意味なのか、、、 >>45 さん Dictionaryの次の< > でくくった部分の意味が44さんと同じくどういう意味を示すのか分かりません。 Data[] data = GetData(); の意味が分かりません。要素数を指定しない場合の配列は後で要素数をしていしないといけないのでは?
51 名前:デフォルトの名無しさん [2008/09/29(月) 21:51:59 ] オウム返しに聞くな 馬鹿丸出しじゃないか
52 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:59:33 ] ちなみにList<T>を継承するのは非推奨だからね
53 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 21:59:35 ] >>51 まあしかし、そういうスレでしょ。 >>47 リストが分からないならとりあえず配列だと思えばいいよ。 「生徒クラス」の(インスタンスの)配列。 その配列の中から、名前なら名前を使って目的の「生徒クラス」のインスタンスを 検索する方法を考えればいい。 他の人が書いているようにList<T>とかDictionary<T>を使った方が簡単なんだけど、 いきなりそれらのクラスを理解しろって言っても無理っぽいからまずは配列で やってみたら?
54 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 22:00:47 ] 点プレにこのあたりのリンクも必要なんじゃね? ufcpp.net/study/csharp/ msdn.microsoft.com/ja-jp/library/618ayhy6.aspx msdn.microsoft.com/ja-jp/library/67ef8sbd.aspx
55 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 22:01:08 ] ごめんDictionary<T>ってそんなのないなw
56 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 22:03:48 ] >>50 Dictionary msdn.microsoft.com/ja-jp/library/xfhwa508.aspx まあこれを読め 配列は int[] array = GetArray(); ... int[] GetArray() { return new int[]{ 1, 3, 5 }; } こんなことも出来るんだ
57 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 22:09:58 ] 名前だけをキーにしてdicに入れたら、複数の教科に対応できないじゃん。 いいの?
58 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 22:14:30 ] >>57 複数の強化に対応できない、ってのは意味不明だけど、 >>40 の話はとりあえず名前のみで検索できれば必要十分に聞こえるけど。
59 名前:40 [2008/09/29(月) 22:16:46 ] みなさん本当にありがとうございます。 馬鹿丸出しで申し訳ないですが、みなさんのアドバイスが充分に理解できませんでした。 コメントや参照サイト先をじっくりと読んでみます。 解決の方法は示して頂きましたので、あとは自分で理解してみます。 こんな初心者の為に貴重な時間を裂いていただき本当にありがとうございました。 では
60 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 22:27:50 ] >>57 それぞれの生徒が教科と点数のセットのコレクションを持てばいい
61 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:38:39 ] >>58 Aさんの国語の成績、数学の成績ってデータが入ってきたら、「A」だけのキーでdicに 入れてたら、片方の成績しか入らないじゃん。
62 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:42:01 ] RDB意識すると、こんな感じかね * 1 1 * Student ------ ExamResult ------ Exam 生徒 試験結果 試験 class Student { public string Name; // その他、付加情報 (e.g. 学籍番号, etc.) public List<ExamResult> ExamResults; } class Exam { public string Name; // その他、付加情報 (e.g. 実施日時, etc.) public List<ExamResult> Results; } class ExamResult { public Exam Subject; public Student Student; public int Score; } List<Student> students; var stu1 = students.Single(s => s.Name == "鈴木"); // 生徒の検索 stu1.ExamResults.Single(r => r.Subject.Name == "国語" && r.Subject.Date == new DateTime(2008, 7, 10)).Score; // 成績の参照 stu1.ExamResults.Add(new ExamResult { Subject = exam1, Score = 80 }); // 成績情報の追加
63 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:45:32 ] >>49 は配列を入れてるZE
64 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:58:48 ] >>61 いや意味わからんよ。 だからDictionary使うのであれば、Valueは「生徒(の成績)クラス」のインスタンスなんだよ?
65 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:46:45 ] staticなクラスとかって、どういう時に使うものなんでしょうか? 無理して使う位なら普通のクラスにしてインスタンス生成した方が いいんでしょうか? インスタンス生成しなくて良いという事位しか分かりません…。
66 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:57:37 ] 大雑把に言うと状態を持たない(フィールドがない)ことを保証できるクラスならstatic classにできるな Mathとかね まあ慣れん間はわざわざ作ることもないか
67 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 11:15:06 ] なるほど。「フィールドがない」というパターンで考えると 分かり易いですね。参考になりました。有り難う御座いました。
68 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 13:19:51 ] フィールド持っててもOO的に複数のクラスと関連があるけど 決してそのクラスがほかのクラスの参照を持つわけではなかったりした時 staticクラスにする方がいいの?
69 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 13:31:25 ] フィールドが全部static readonlyまたはconstでない限りはやめたほうがいい
70 名前:69 mailto:sage [2008/09/30(火) 13:38:53 ] static readonlyっていうのはおかしいな 同じメソッドを同じ引数で呼び出したらいつも同じ結果が得られるならstaticでおk
71 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 16:16:17 ] web上で指定した名前のhtmlファイルやtextファイルが存在するかどうかをチェックするには どういうプログラムを組めばいいでしょうか? req = (HttpWebRequest)WebRequest.Create("hoge.com/ahya.txt "); HttpWebResponse res = (HttpWebResponse)req.GetResponse(); if ("hoge.com/ahya.txt ".Equals(res.ResponseUri)) { Console.Writeline("指定されたtxtファイルはありましたよ( ´∀`)b"); } のようなプログラムを組めばよろしいでしょうか? それとももっと適切なプログラムがありますか?
72 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 16:22:44 ] 何をもって存在したのかという定義は? res.StatusCode が200ならというだけじゃダメなのかな。
73 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 16:23:21 ] 200つーか、 HttpStatusCode.OKか
74 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 16:29:22 ] リダイレクト考えると大変かもね FileNotFoundのときにリダイレクトで200 OKな404.html返してきたり
75 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 16:42:49 ] >>71 それだと HTTP GET してしまうので req.Method = "HEAD"; するとか
76 名前:71 mailto:sage [2008/09/30(火) 16:54:42 ] >>72-74 そうなんですよ。リダイレクトするサーバーだと指定したファイルが存在しない 違うページに飛ばされた上で200:OKが返されたりするんで判定に使うには 今一歩信頼性が無いんです。
77 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:02:39 ] いやだから定義は? URL完全一致なの? 別の場所にリダイレクトするけど同じファイル名だったりするのはどうなの?
78 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:03:28 ] とは言えどうしようもないんじゃないかなHTTPの仕様上 リダイレクトされたら存在しないとするってんなら多少は簡単になるが 存在しなくても200 OKを返すって挙動も可能なんだし(負荷が大きくなるから普通はしないだろうが)
79 名前:71 mailto:sage [2008/09/30(火) 17:08:26 ] >>77 はい、指定した場所にURLが一致するファイルが存在しなければ そのURLは無効というふうに判断したいです。 リダイレクトされた場合は存在しないと判断したいです。
80 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:14:07 ] あと、どっちかというと Uri uri = new Uri("hoge.com/ahya.txt "); if (uri.Equals(res.ResponseUri)) だろうなあ。
81 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:15:00 ] HttpWebRequestのメンバにリダイレクトを処理するかどうかのプロパティあったろ。 それ無効にしといて、200帰るかどうかみりゃいいんじゃないのか。
82 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 18:18:29 ] >リダイレクトを処理するかどうかのプロパティ そんなのあったのか、知らなかった
83 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:00:04 ] ListViewやStringなど標準ライブラリのソースを見る方法はないですか?
84 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:07:21 ] ちょっとは検索しろ
85 名前:デフォルトの名無しさん [2008/09/30(火) 19:08:13 ] MSのを見るのは会社の規模&審査とすさまじい金額がかかったはずなので、MONOのソースでも見たら?
86 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:11:02 ] www.codeplex.com/NetMassDownloader
87 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:12:52 ] >>85 今は閲覧目的に限り無償一般公開されてるんだよ
88 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:52:54 ] へー
89 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:07:15 ] 独学でC#はじめたんですがsetとgetの使い方がよくわかりません。 よろしければ御教授ください、お願いします。
90 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:09:22 ] それを言うなら御教示だ
91 名前:89 mailto:sage [2008/09/30(火) 20:30:45 ] >>90 すみません間違えました
92 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:31:23 ] >>89 プロパティのことか? 強いて言うなら、変数っぽいメソッドを作るための仕様という感じかな? C#の入門サイトで理解できなかったら、いっそうのこと他の言語のサイトも見てみると理解できることもあるかもしれない。 たとえばTextBoxでTextプロパティがあるけど、これをプロパティを使わないでやるとしたら textbox1.SetText("hogera"); String hoge = textbox1.GetText();と書かなければならない。 もちろん class TextBox { public String Text; } として公開してしまえばtextbox1.Text = "hogera";で書き込み読み込みができるが、 SetText(String value) { // ReadOnlyの時は変更禁止 (こういう処理を副作用と言う) if (!this.ReadOnly) this.str = value; } というようなことはできなくなる。これをできるようにするためのものがプロパティ public String str; // Textの実体。こんなダサイ名前をつけるのはよろしくないけど public String Text{ get { return this.str;} set { if (!this.ReadOnly) this.str = value;} } これでtextbox1.Text = "hoge"とかができるようになる。 また、副作用のないプロパティは(今後、副作用を設定するかもしれないので必要) public String Text { get; set;}と書くことができる
93 名前:89 mailto:sage [2008/09/30(火) 20:42:27 ] >>92 すごく丁寧な説明ありがとうございます。なんとか理解できました。
94 名前:71 mailto:sage [2008/09/30(火) 20:43:19 ] >>81 どうもです。 req.AllowAutoRedirect = false; でオートリダイレクトを拒否することができるようになりました( ´∀`)ノシ
95 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:45:20 ] >>92 それだったらメソッドで書けばいいだろ なんでプロパティ使うんだよ
96 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:46:52 ] >>95 だったら、とはどういう意味?
97 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:47:17 ] プロパティにする利点は使う側にある
98 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:54:38 ] String と string ってどうちがうの?
99 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:55:50 ] まったく同じであることが言語仕様に明記されています
100 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:00:25 ] ごめんなさい
101 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:22:37 ] 質問です。 クリップボードからテキストボックスに文字を貼りつけています。 単に貼りつけると、テキストボックスで文字入力できなくなるので、 ・クリップボードの文字をメモリーする。 ・クリップボードの文字がメモリーと異なるときは、貼りつける。 ・クリップボードの文字がメモリーとおなじときは、なにもしない。 という処理を考えました。 clipboardwatchtimer.Interval = 500; clipboardwatchtimer.Enabled = true; private void clipboardwatchtimer_Tick(object sender, EventArgs e){ if (Clipboard.ContainsText()) { string clipboardTextBefore = (Clipboard.GetText()); System.Threading.Thread.Sleep(200); string clipboardTextAfter = (Clipboard.GetText()); if (clipboardTextAfter != clipboardTextBefore) {textBox1.Text = (Clipboard.GetText());} }} これで、4回は動くのですが、そのあとは取得できなくなってしまいます。 アドバイスお願いします。
102 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:27:03 ] すみませんが、何をおっしゃっているのか理解できません
103 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:38:31 ] string clipboardTextBefore = ""; private void clipboardwatchtimer_Tick(object sender, EventArgs e){ if (Clipboard.ContainsText()) { string clipboardTextAfter = (Clipboard.GetText()); if (clipboardTextAfter != clipboardTextBefore) {textBox1.Text = clipboardTextAfter; clipboardTextBefore = clipboardTextAfter} }} こうじゃないかな タイマーの中でThread.Sleepとかやらん方がいいと思うよ
104 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:44:42 ] >>101 何のための機構かよくわからないし 500msごとに200msストップするようなアプリケーションは糞過ぎて使い物にならないと思うんだが >単に貼りつけると、テキストボックスで文字入力できなくなるので、 では聞くけど、今の状況ならまともに文字入力できるのですか? 何でも良いから適当に文字を入力してみてください。 >clipboardwatchtimer.Inter(ry ・500ms ごとに200msほどユーザの操作を無視する ・その200msの間にクリップボードがたまたま変更されていたら _・textbox1.Textに入力した文字を削除してクリップボードの内容に置換する 何がしたいのかわからない。 ひょっとして String clipboradTextBefore = ""; private void clipb(ry_Tick(Object Sender,EventArgs e) { if (Clipboard.ContainsText()) { String clipboradTextNow = Clipboard.GetText(); if (clipboradTextNow != clipboradTextBefore) { textBox1.SelectedText = clipboradTextNow; clipboradTextBefore = clipboradTextNow; }}}} //行が長すぎるってしかられた
105 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 21:49:30 ] >>103 なるほど。 ありがとうございました。
106 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:07:46 ] >>104 ありがとうございました。 SelectedTextだと追記なんですね! ちなみに、いまの状況でいちおう文字入力は試してうまくいってました。
107 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:13:33 ] >>101 だからお前は基礎から学べと言ってるだろ 2度と来るな
108 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:30:51 ] 初心者を煽る荒らしはほんと二度と来ないで欲しいんだけど
109 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:42:47 ] 初心者を甘やかす荒らしはほんと二度と来ないで欲しいんだけど
110 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:50:13 ] 下らんレスの応酬はそれこそ荒らし行為そのものだから二人とも止めとけって。 しかし、初心者っていっても程度問題だと俺も思うけどな。 確かに初心者って真面目に学習してても分からないところ出てきたりするから そういうのを質問するスレ(つまりここ)があっていいと思うんだが、 最初から地道に学習することを放棄してる奴のケツを拭いてやるなんて作業は 普通の人間はお断りだろ。 それ以前に「日本語の文章表現の初心者」まで救ってやる必要なんてさらさらないと思う。
111 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:52:49 ] お前の意見を取り入れる気はさらさら無いがな。
112 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:53:55 ] >>1 を読めない奴は二度と書き込むなよ
113 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 22:59:39 ] >>1 にあてはまらない書き込みがあるの?
114 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:04:19 ] >>1 をC#でおながいします。
115 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:08:17 ] >>1 なんかいちいち読むかよ。
116 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:33:37 ] >>1 乙
117 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:03:52 ] 制限時間付きオセロを作りたいのですが、どの様にすれば良いのでしょうか?
118 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:04:59 ] オセロのアルゴリズムとGUIを作ればいい
119 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:15:32 ] 俺もオセロ作っているんだけど @どこに石をおけるかを調べる 置ける場所を保存 どこに置くか選ぶ 置いた場合どの石が裏返るから調べる 相手や自分の置いた石を盤面に反映する @ヘ それぞれどのクラスに記述すればいいかわからなくなる
120 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:18:51 ] >>119 オブジェクト指向な人々から見るといろいろ意見はあるんだろうけど、 あんまり気にせずまとめて作っちゃえばいいんでね?
121 名前:117 mailto:sage [2008/10/01(水) 01:20:21 ] 自分はほとんど知識がないのに今日の朝7時までに提出しろと言われたもので・・・ 死亡フラグですよね?
122 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:21:16 ] >>119 これ読めば? コンピュータ麻雀のアルゴリズム―AIインターフェイスと思考ルーチンを作る (I/O BOOKS)
123 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:21:33 ] >>121 うん。
124 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:21:45 ] >>121 無理諦めろ サボってたお前が悪い
125 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:23:13 ] 本すすめるならこっちだろ リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) (単行本)
126 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:26:15 ] どこに置くかを決定するアルゴリズムは面倒そうだね。 簡単なのは、四隅、端、その他、って感じで順位づけをしておいて、 置けるときに置く、って感じかな。
127 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:28:39 ] >>121 俺昔作った奴あるけど人類よりはるかに強いから お前が作ったことにして提出したら不正がばれるだろ
128 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:29:05 ] オセロは一枚返しの定跡があるから、まぁそのあたりで評価関数作れば簡単そうだが 終盤はきちんと全幅探索して読み切る
129 名前:規制解除ヒャッホーウ mailto:sage [2008/10/01(水) 01:29:11 ] まったくわからんが俺も考えてみよう オセロ板クラス どこに石が置いてあるか 石を置いて石が置ける場所じゃなかったらエラーを返すとかやるクラス 入出力はインデクサとか使って置いたり置いてあるのを調べたりとかか? 相手CPUクラス 石の置いてある箇所からどこに置くのか決めて適切な位置に置く これが一番ムズそう 審判クラス 順番になったらイベントで通知してくれたり制限時間はかったり 先に謝っておこうなんていうかごめんなさい
130 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:30:27 ] >>129 いいんだよ
131 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:31:21 ] >>129 グリーンだよ
132 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:35:34 ] 夏休み最後の日まで宿題とっておいていいのは小学生までだろ
133 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:38:46 ] 課題だったら、多少くそ重くても総当たりやっちゃえばいいんじゃなかろうか。
134 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:41:14 ] 総当り(笑) アホだろ
135 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:43:21 ] もうランダムで置く場所決めればいいじゃん
136 名前:119 mailto:sage [2008/10/01(水) 01:44:23 ] >>129 大体そんな感じだろうと思って作ってみたら CPUクラスで盤面情報を取得したり、どこに置くか?置けるのか? などが、オセロクラスと機能が微妙にかぶるんですよね それでこんがらがっちょになるわけで。 よくあるオブジェクト指向の考え方の例で 人間クラス>学生クラス。名簿クラス。なんかがあるけど こういう考えで作ろうと思うと、非常に難しい どこに置けるかなどは、オセロ板が考えるんじゃなくて人間が考えるわけで 盤面の情報も頭の中にあるわけで、じゃあ、盤面は石の状態だけ保存させておいたほうがいいのか とか考えて、でも、CPUクラスごとにルールクラスを保持させるのも変な感じだし とまあ、こんな感じで途方にくれてます
137 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 01:52:17 ] >>136 とりあえずCPUは後回しにして 人間二人が交互に打てるところまで作れば?
138 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 02:02:48 ] >>130 >>131 どうも >>136 どこに置けるか?とかは オセロ盤クラスの置いてpublicにするかもわからんなー そうすればCPU側やUI側(マウスが置けないマスに入ったら×マークを表示するとか)とかからも使えるような気がする
139 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 04:02:51 ] IBMとマイクロソフトが作った昆虫のゲームの名前なんでしたっけ? dllで昆虫を作ってプログラマーが競い合うものなんだけど
140 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 04:16:08 ] 上の方見て、何となくClipboardWatcherというクラスを作った イベントはまだ実装してない(Trace.WriteLineしてるだけ)けど、 コメントほとんどなしの状態で240行程度
141 名前:119 mailto:sage [2008/10/01(水) 04:17:27 ] 相手と自分を同じクラスで処理してたから混乱していたのかも Playerという基底クラスを作って 先手、後手の派生クラスを作って処理してみます
142 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 07:26:15 ] 同じ自作コントロールを複数生成したいが、 他のフォームで使う予定はまったく無い、 といった場合、ユーザーコントロールを作るより、 フォームのファイル内に自作コントロール用のクラスを作ったほうがいいですかね?
143 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 07:32:46 ] >>141 質問ついでに答えてみる。 OOPは、登場人物(モノも含む)を全て洗い出すことから始めてみるといい。
144 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 07:35:24 ] >>139 いじったことないけど Terrarium?
145 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 09:39:46 ] >よくあるオブジェクト指向の考え方の例で >人間クラス>学生クラス。名簿クラス。なんかがあるけど ねーよ。 いや例はよくあるけど。
146 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 10:33:21 ] hoge.comって実在するんだなw
147 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 13:02:16 ] >>140 それってコントロール派生? 私的にNativewindow使用が良いなー
148 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:33:12 ] try{ res = (System.Net.HttpWebResponse)req.GetResponse(); } catch(WebException e) { } でプロトコルエラー416:RequestedRangeNotSatisfiableが返されました。 この例外をcatchで受け、416が返ってきたときに特定の処理をさせたいと思っています。 catchの中身はどう記述すればよろしいでしょうか? catch(WebException e) { if (e.Status == HttpStatusCode.RequestedRangeNotSatisfiable) ・・・・・ } と記述したところ、e.StatusとHttpStatusCode.RequestedRangeNotSatisfiableは 型が違うと言われてコンパイルエラーになってしまいました・・・
149 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:37:39 ] WebException.Status の解説ぐらい読めよ
150 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:48:45 ] >>148 またかよ。少しはぐぐって自分で調べろ。 「WebException プロトコルエラー」 とかでぐぐっても 解決のヒントになるページがいくつも見つかるだろ。
151 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:49:01 ] 全然使ったこと無いけどMSDNのサイトをちょっと回ってみた結果、 if (WebException.Status == WebExceptionStatus.ProtocolError) { if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable) { とかやるんでないの? } } 聞くより検索して、実際にやってみたほうがはやいぜ。
152 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 17:56:25 ] >>147 System.Windows.Forms.Timerあたりのソースを参考に、 ComponentのサブクラスでNativeWindowを使用 一応、lock, PostMessageもしてるから、多分マルチスレッドでも使える
153 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 18:03:45 ] >>149-151 ありがとうございますm(_ _)m ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.RequestedRangeNotSatisfiable で通りました。Responseプロパティの中にさらにプロパティStatusCodeがある とは思い至りませんでした(´・ω・`)
154 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:00:41 ] Dictionary<T>をforeach使わずに 要素の変更される処理を施すことは出来ますか?
155 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:01:19 ] はじめましてC#超初心者です 解説本を読む前に質問してます class1.csってところを下記の様にしたんですけど エラーになります どうすればいいですか Winsockで接続するテストです 何をどうしたらいいのかわかりません よろしくお願いします 動くように書換えお願いします using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace winsock_tes { public class Class1 {string url = "www.yahoo.co.jp/ "; System.Net.WebClient wc = new System.Net.WebClient(); wc.Encoding = System.Text.Encoding.GetEncoding(51932); string src = wc.DownloadString(url); wc.Dispose(); } }
156 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:04:28 ] Mainメソッドにつっこめばおk
157 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:06:23 ] どっから持ってきたコードなんだ。 まずはHelloWorldからやってみないか
158 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:10:57 ] >>154 意味が分かりません
159 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:54:44 ] >>155 マルチうざい
160 名前:155 mailto:sage [2008/10/01(水) 19:57:42 ] >>158 おまえがうざい やっぱC#スレってカスばっかだな Delphiにしとくわ
161 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:59:02 ] >>155 です マルチじゃないですよ 他すれで聞いたらここを紹介されたので改めてこちらで聞きました よろしく >>159 氏ねよ粘着
162 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:00:39 ] >>160 おいおい >>155 は私ですよ 応援はありがたいけど やりすぎです^^;
163 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:53:45 ] >>154 Dictionary<T>なんてものはBCLに存在しません
164 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:58:16 ] >>154 数字の添え字もNext系の操作も出来ないから無理だろ
165 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:03:14 ] CやC++ならまだしも、string型が正式にサポートされたC#に いまだchar型が存在する理由ってなんでしょうか? CやC++に慣れ親しんだプログラマ用の救済措置ですか?
166 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:03:19 ] GetEnumeratorでIEnumerator取って自分で操作すればおk
167 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:04:58 ] >>165 パフォーマンスでしょ 文字列から一文字ずつ取り出すような処理を全部一文字のstringにしたら恐ろしいことになりそう
168 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:07:33 ] いやそれ以前に char は文字で string は文字列なんで違うものだろというか
169 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:21:31 ] >>167 C#ではcharもstringもみなクラス扱いされていますがそんなにパフォーマンスに 違いが出るものですか? >>168 stringでも1文字だけ格納すれば実質的にcharと同じになると思うんですが。
170 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:23:38 ] そもそも値型と参照型では?
171 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:25:01 ] >>169 Charは整数型ですが
172 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:25:11 ] ならintも長さ1のint[]があれば必要ないねそうだね。
173 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:25:40 ] おいおい大丈夫か
174 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:25:58 ] >>171 なにw ユーザー定義型ではない値型で実質プリミティブ型になる。
175 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:26:15 ] >>169 charはクラスじゃねーよカス 処理速度も倍違う >stringでも1文字だけ格納すれば実質的にcharと同じになると思うんですが。 ならねーよバカ
176 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:26:17 ] スクリプト言語だと文字列と文字を同一視するのもあるみたいだよ
177 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:28:02 ] 格納してるブツがそもそも違うだろ stringは参照位置だけどcharはユニコードだろ?
178 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:32:33 ] デュアルコアの時代に倍違うとかどうでもいいだろ
179 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:33:29 ] string だけあれば char がいらないって発想なら、 int[] だけあれば int もいらないな。
180 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:34:53 ] GCの負担にもなるから倍どころじゃないはず stringって内部的にはやっぱりcharの配列なんだよ fixed (char* p = str)でポインタ取れたりするw
181 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:36:59 ] ここまでstringbuilderなし
182 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:38:02 ] 札束があれば札は要らないないってレベル
183 名前:165 [2008/10/01(水) 21:40:11 ] 釣りでした(^^)v
184 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:40:49 ] >>182 それは何か変だ。 札は束にしても額が変わるだけだけど。 char と string は点と線くらい違う。次元がそもそも違うというか。
185 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:43:00 ] >>165 救済措置っつーか、C/C++やってて、文字型のない言語に移っても、べつになんにも困らんだろ。
186 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:43:23 ] string=文字列 char=文字 これはなんでこうなるの?
187 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:44:03 ] VBにも文字単体あるだろ
188 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:44:45 ] C#.NET でWindowsアプリを書くときに、メソッドをフォームのソース (という言い方が正しいかどうか分かりませんが)に書くことも、 フォームではない別のクラスに書くこともできると思います。 ある画面内で完結する機能はフォームのソースに書くとか なるべくフォームのソースには書かないようにするとか 方針はいくつか考えられますが、 C#.NET ではどうするのが主流なのでしょうか? アドバイスよろしくお願いします。 ちなみに、Javaでコンソールアプリを書いたことはありますが その程度の経験しかありません。
189 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:46:00 ] フォームをコンソールだと思えばおのずと窓口なはず
190 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:48:01 ] >>178 私も486DXで十分だと思っていた時がありました
191 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:51:45 ] >>188 フォームとはイベントドリブンを処理するわけで条件反射みたいなもん フォームに直接関係しない機能や重複した機能は別途クラスを用意する
192 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:52:55 ] >>188 愚問だね。 OOPというかクラスを使ったプログラミングが分かればそんな疑問は持たない。 そんなウダウダ疑問を抱くのは一通り理解してからにすべきで、 物事の順序が違うんじゃないのかな?
193 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:54:12 ] >>175 え( ´・ω・)?
194 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 22:00:00 ] 構造体です
195 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 22:00:17 ] >>188 主流といえるほど主流な方法はないんじゃないかな
196 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 22:01:04 ] フォームのボタンを押すことでクリップボードの文字列を取得する @ボタンが押された AFormクラスGUI-----処理するメソッドを呼び出し------>クリップボードを処理するクラス.GetText() BFormクラスGUI<-----------文字列を返す-----------クリップボードを処理するクラス CFormクラスGUI--------- 文字列を送る------------->テキストボックスに表示//Formクラス内で処理 クリップボードを処理するクラスを作ってしまえば、コンソールアプリにした場合も流用できる
197 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 22:13:39 ] 窓口のお姉さんと、お姉さんが操作する端末みたいなもん
198 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 22:18:00 ] C#のフォームでMVCに挑戦するも、途中でめんどくさくなって結局イベントハンドラにロジック直書き。
199 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 22:22:52 ] DirectXならウィンドウとか単なる依り代
200 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 23:55:34 ] 構造体の場合コンストラクタは1つだけしか無理ですか?
201 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 23:59:13 ] いいえ
202 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:00:21 ] と、思ったら1つも作れないのか・・・ データに値を入れるときが面倒だなぁ
203 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:03:46 ] 引数なしのコンストラクタが作れないだけ 引数のあるコンストラクタはいくつでも作れる
204 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:03:51 ] >>155 です メインメソッドに突っ込むってどういう意味ですか? VC#2008を立ち上げて ファイル→新しいプロジェクトを開くと Windowsフォーム、クラスライブラリー、WPFアプリケーション、WPFブラウザ、コンソール、空のプロジェクトとあります どこを開いてどうすればよいですか? >>155 を動くように教えてください
205 名前:188 mailto:sage [2008/10/02(木) 00:06:02 ] レスをくれた皆さんありがとうございました。 フォームに直接絡む機能以外は別のクラスに書く、という感じのようですね。
206 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:09:02 ] >>204 ネタ? コンソールでプロジェクトを立ち上げると static void Main(string[] args) { } というのが自動で書かれているからその間に実行させたいものを書く static void Main(string[] args) { Console.WriteLine("hoge"); }
207 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:09:50 ] >>155 です よくわからないけど 下記のようなエラーでました エラー 1 プログラム 'C:\Documents and Settings\don\Local Settings\Application Data\Temporary Projects\Project1\obj\Debug\Project1.exe' は、エントリ ポイントに適切な静的 'Main' メソッドを含んでいません Project1
208 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:11:47 ] >>206 さん ありがと 今からやってみます コンソールですね
209 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:13:06 ] >>203 引数は無理なのねーやっぱり かといって、クラスで定義するといろいろ面倒だったり 例えばListViewのような構造をもった自作クラスを作った場合 listView1.items=listView2.items なんてしてもsubitemsまではコピーされなかったり、 また、参照コピーになるから、これは参照しているだけだって意識しながら やらないとどこかで値を変更されたりするし、かといって、privateにしたりすると 値をコピーしたい場合非常に面倒だし だから、できるだけ構造体でやってるんだけど みんなどうしてんのかな?構造体なんて数学的な関数以外使わない?
210 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:16:39 ] >>205 最初はフォームに全部書いちゃって、あとで必要になったときに バラす、ってので十分だろ。
211 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:17:23 ] >>207 だって、Main メソッドがないじゃん。
212 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:22:02 ] >>155 です コンソールを開いて>>206 さんに教えてもらった箇所に貼り付けました デバッグしたところ黒色の画面が数秒間出て終わりました エラー表示とかは無いです これは成功しているのでしょうか? 下記のコードでは接続を確立しただけ? それともリクエストしたけど レスポンスを受け取れない? どのような状態なのでしょうか? static void Main(string[] args) { string url = "www.yahoo.co.jp/ "; System.Net.WebClient wc = new System.Net.WebClient(); wc.Encoding = System.Text.Encoding.GetEncoding(51932); string src = wc.DownloadString(url); wc.Dispose(); }
213 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:24:24 ] >>212 だからお前は概念から勉強しろと言ってるだろカス
214 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:24:49 ] >>212 ブレイクポイントでもはって確認するか、src をコンソールに出力すれ
215 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:25:59 ] >>209 正確な理由は中の人しか知らないけれど、普通に考えると引数なしの コンストラクタを用意できると配列確保したとき要素数だけコンストラクタ 呼ばないといけなくなるから、こうなっていると思われる。 ・・・というかむしろ 3.0 以降の初期化はイニシャライザのほうが推奨かな という気がする 後その質問に関して言えば「非常に面倒」というほどでもないとしか。 気になるほどでかいデータセットになるとバインディング(+同期機構利用)前提 で考えるわけだし
216 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:28:31 ] 効率が重視されるときは構造体にはイニシャライザ使っちゃダメ 無駄なコピーが発生する
217 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:32:20 ] >>155 です 何度もすいません 「C# src コンソールに出力」でググッたんですが コンソールに出力されるって文字はいっぱい出てくるんですけど コンソールへ出力の仕方わかりません 「srcをコンソールに出力」 ↑これわかるかた教えてください
218 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:35:57 ] >>217 Console.WriteLine(src); 参考書でも買った方が早いよ。俺はもうレスしないから。
219 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:37:34 ] >>215 確かに構造体配列が問題なんだよねぇ。 .NETの規格上は構造体にも引数無しのコンストラクタが作れるんだけど、 配列確保のときには要素ごとにはコンストラクタが呼ばれない。 代わりにArray.Initializeメソッドを使うことになっている。 ttp://msdn.microsoft.com/ja-jp/library/system.array.initialize.aspx
220 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:37:34 ] using namespace System::Diagnostics; 〜略〜 Debug::WriteLine(src);
221 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:43:48 ] >>220 >>1
222 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:44:43 ] 違和感がするな
223 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:46:53 ] >>155 です 下記のようにしてからデバッグするとエラーになりました手直しできる方お願いします using System.Linq; using System.Text; // debugoncon.cs using System; using System.Diagnostics; public class DebugOnConsole { static void Main() { Debug.Listeners.Add(new TextWriterTraceListener(Console.Out)); Debug.WriteLine("デバッグ・メッセージを出力"); } } namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string url = "www.yahoo.co.jp/ "; System.Net.WebClient wc = new System.Net.WebClient(); wc.Encoding = System.Text.Encoding.GetEncoding(51932); string src = wc.DownloadString(url); wc.Dispose(); } } }
224 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:49:56 ] >>217 1行命令文書く度に質問しているのかい? ごくろうさま。死んでいいよ。
225 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:51:35 ] 実在するサイトのアドレスを書くな! サイトへの攻撃とみなして報告しておく
226 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:51:48 ] >>224 そだよ 粘着キモイぞ氏ね
227 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:52:17 ] 回答したい奴がすればいい
228 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:53:35 ] >>225 実在するアドレス書いたら駄目だったのか しらなんだ これから気をつけるよ あんまし細かいこと言ってたら神経性の病気になるよ あなたも気をつけたほうがいいね
229 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:54:29 ] >>227 質問回答以外はあおりですね さよなら煽りくん もうこなくていいからね
230 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:54:42 ] Mainが二個
231 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:56:10 ] >>229 質問回答以外はあおりですね さよなら煽りくん もうこなくていいからね
232 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:56:30 ] >>230 さん それ>>155 へのヒントですよね メインってのを2個にすればいいんですか? それとも現在2つあるので1つにすればいいですか? 何から何まですいません よろしく^^
233 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:00:06 ] >>232 氏ね低学歴。お前には一生プログラム無理
234 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:00:32 ] 書いてみるからちょっと待て
235 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:01:05 ] >>233 お前は>>231 を100万回読んでから氏ねカス
236 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:01:55 ] >>235 質問回答以外はあおりですね さよなら煽りくん もうこなくていいからね
237 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:02:59 ] あわわ、あわわわ
238 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:03:58 ] >>155 さんへ お前が低学歴なのはこのスレの住民のせいではない 八つ当たりもほどほどにしておけよハゲ お前はまず概念理解しろ それすらもできない低学歴は2度と来るなカス 悔しいのか?悔しいから荒らすのか? もっとポジティブな思考ができないのかねぇこの池沼はw
239 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:05:01 ] ネットワークプログラミング相談室にいたやつだな 解決したんじゃなかったのか?
240 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:06:02 ] >>236 わかったよ あんまし怒らなくていいだろ 仲良くしよう これからも応援よろしく^^
241 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:11:26 ] >>238 質問回答以外はあおりですね さよなら煽りくん もうこなくていいからね
242 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:14:34 ] C#の環境が今ないんだがこんな感じで動いた てゆーかソース自体に問題は無いような… using namespace System; using namespace System::Diagnostics; using namespace System::Net; using namespace System::Text; int main(array<System::String ^> ^args) { String ^url = "www.yahoo.co.jp/ "; WebClient ^wc = gcnew WebClient(); wc->Encoding = Encoding::UTF8; String ^src = wc->DownloadString(url); Console::WriteLine(src); delete wc; Console::WriteLine("エンターキーで終了。"); Console::ReadLine(); return 0; }
243 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:18:34 ] C# だとこんなん using System; using System.Net; using System.Text; class GetTest { public static int Main(string[] args) { WebClient ua = new WebClient(); ua.Encoding = Encoding.UTF8; string text = ua.DownloadString("www.yahoo.co.jp/ "); Console.WriteLine(text); return 0; } } サイトにアクセスする前に Encoding 設定するのが良くないね DownloadString じゃ無理なのかな
244 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:22:20 ] >デバッグしたところ黒色の画面が数秒間出て終わりました >エラー表示とかは無いです コンソールが勝手に閉じるからだろ
245 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:27:56 ] >>242 >>243 お疲れのところ本当にありがとうございます >>243 さんのコードでエラーなくリクエスト送信は成功していることを確認できました ありがとうございます^^
246 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:28:05 ] へッダから文字コード取れば?
247 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:28:28 ] 失せろゴミ
248 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:33:42 ] >>246 GET するユーティリティの実装ってそうしてるのかな? 今回はとりあえずバイト列として読み込んでそのまま吐いて妥協 WebClient ua = new WebClient(); Stream stream = ua.OpenRead("www.yahoo.co.jp/ "); StreamReader streamReader = new StreamReader(stream); Console.WriteLine(streamReader.ReadToEnd()); stream.Close(); return 0;
249 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:35:35 ] >>246 応援ありがとう ヘッダから文字列取得は今日のところはやめておくよ ここの>>155 に貼り付けたのと リクエスト成功した>>243 さんのコードとの違いを調べてみるよ ありがと
250 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:45:37 ] >>249 2度とくるなカス
251 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 02:06:27 ] うっせーはげ
252 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 02:59:46 ] class Program { static void Main(string[] args) { Test t = new Test(); t.Str = new List<string>(); t.Str.Add("dsf"); t.Str = new List<string>(); Console.WriteLine(t.Str.Count); } } class Test { public List<string> Str; } 問)この場合コンソールには何が表示されるでしょうか?
253 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 04:07:18 ] List<>が万能過ぎるんだけどあえて配列使う意味ってあるの?
254 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 04:24:17 ] 配列の方が速いだろ
255 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 06:21:08 ] >>252 何かひねったのかと思いきや予想通り0なんだけど何が言いたいの…?
256 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 09:06:40 ] .NET 4.0って何が変わるんですか msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx
257 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 09:18:07 ] >>256 それの日本語記事↓ itpro.nikkeibp.co.jp/article/NEWS/20080930/315630/ 「詳細は,数カ月以内に発表する予定」だそうだ。
258 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 10:37:40 ] >>253 とりあえず複数渡したい・返したいときは配列が速い List<>を可視メンバの戻り値や引数にしたらマイクロソフトのガイドライン違反!
259 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:11:51 ] Listは容量を増やす時にコピーが発生するし 最悪半分ぐらいの容量が使われてなかったりするし 気分的に嫌だから作業が終わったらすぐToArrayしちゃう
260 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:14:52 ] >>258 せんせー、Enumerable.ToList がガイドライン違反ですー
261 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:15:22 ] それはCollection<T>継承したの返してあとからいじれるようにしとけと そういう意味合いだった気がするが
262 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:25:32 ] 生のListを渡すってことは 自分の知らないところでListの中身が増えたり減ったりするのを許容するってことだろ じゃあそのListを管理してるのは誰なのよという話になるだろ
263 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:35:26 ] >>260 同じの作ってFxCopで検査したら違反になるよ ToListやToDictionaryはコンストラクタのヘルパみたいなもんなんだから >>261 の意味合いから考えれば問題ない
264 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:36:56 ] >>259 ToArrayにする作業のほうが時間がかかったりすることはないの? >>258 可視メンバって、privateメソッドとか? >>262 なるほど。それはありますね 追加などの作業が終わったら、配列に戻すのがいいのかな でも、戻り値を配列にした場合、foreach内でそのメソッドを使用するとなると AddRangeができないから、手間ですよね?
265 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:39:49 ] ガイドラインを問題にするときの可視メンバは publicな型のpublicメンバとprotectedメンバ
266 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:46:56 ] むむ、XNAでContentPipeline作ってLoad<>でList<>返してたが、もしかしてまずいのか。
267 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:48:12 ] それこそ配列返せばいいじゃん
268 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:48:14 ] >>265 publicで使っちゃだめなのかー 確かにわけわからなくなるもんなー ガイドライン天才だなー
269 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:59:57 ] >>266 Content.Loadってキャッシュでしょ? 弄る前提でList返すのはダメだろ 配列でも微妙だけど
270 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:10:27 ] >>269 いや中身読んだら終わりなんだけど、中が配列の配列だったからさらに配列にしたくなかっただけ。 まあいったん配列にしますわ。
271 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:21:10 ] ん?なんでList<>を返しちゃいけないのか詳しく
272 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:32:22 ] オーバーライドできないから フィールドじゃなくてプロパティを使うのは後で実装変えられるようにするためだけど、それと同じ msdn.microsoft.com/ja-jp/library/ms182142.aspx
273 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:33:01 ] >>271 List<>を返すということは元の値を直接操作してもいいよと言っているようなものだから 1人でプログラミングする分には覚えていればいいが、多分忘れる
274 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:50:20 ] C#てWindows専用?
275 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:58:11 ] 配列で返すようにしたんだけど、foreachだと使えないんだけど こういう場合どうすればいいんでしょうか? あと、配列を初期化したい場合どうすればいいですか? struct Point { public int X; public int Y; } class Zahyou { public void GetArray() { List<Point> pList=new List<Point>(); . . return pList.ToArray(); } } class Main() { Point[] pArr; foreach() { pArr=GetArray(); } }
276 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:59:58 ] >>260 そいつは新しいListを作り出すメソッドだから問題なし。 内部のListの参照をそのまま見せるのがいけない。 ただしプロパティの場合は予防的コピーを返すことも非推奨となっている。
277 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:10:59 ] 264とか275が何を言いたいのか良く分からない
278 名前:275 mailto:sage [2008/10/02(木) 13:19:15 ] Zahyouクラスで計算したPoint[]を kitai内の座標を保存している配列にコピーしたいんだけど やり方がわからないんです foreach(Tekiki kitai in Guntai) { kitai.PArray=Zahyou.GetArray(); } ↑だとエラーがでる Tekikiのデータ構造を Point[] PArray ではなくて List<Point> PList にすれば簡単に追加できるんだけど でも、publicでListを返したらだめなんですよね? こういう場合どうすればいいの?
279 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:29:42 ] >>275 voidなのにreturnしてるとか、 foreachの中に何も書いてないとかは関係してないの?
280 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:30:17 ] エラーが出る(笑)
281 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:39:58 ] >>275 あとclass Main()ってのもおかしいな
282 名前:275 mailto:sage [2008/10/02(木) 13:46:33 ] >>279 >>281 すいません。要点だけわかればと思って他はさらっと書いたので foreach内は実際はいろいろ処理してます。 List<>を返して、AddRangeで追加していたときは普通にいけましたが 配列を返すようにしたら、どうすればいいかよくわかりません エラー内容 'kitai' は 'foreach 繰り返し変数' であるため、このメンバを変更できません。
283 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:48:14 ] どれをどこにAddRangeするのよ
284 名前:275 mailto:sage [2008/10/02(木) 13:57:52 ] 変更点はList<>を返すところを配列を返すようにしただけです struct Tekiki { public string Name; public List<Point> pList; } class ShoriMain { public void SetZahyou() { foreach(Tekiki kitai in Guntai) { kitai.pList.AddRange(ZahyouKeisan.GetZahyou()); } } } static class ZahyouKeisan { public static List<Point> GetZahyou() { List<Point> pList=new List<Point>(); //いろいろ計算 return pList; } } こんな感じだとうまくいきます。 GetZahyouをList<>ではなく、配列で返す方法がわからないんです
285 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:00:56 ] kitai.AddRange(ZahyouKeisan.GetArray()); こんなんでいいだろ AddRangeの中で内部のListのAddRangeを呼んでやればいい
286 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:07:26 ] C#ってはやってるの? Javaとどっちが強い?
287 名前:275 mailto:sage [2008/10/02(木) 14:13:02 ] >>285 それって同じことじゃないんですか? List<>.AddRangeに配列を格納することはできないですよね?
288 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:13:12 ] >>286 当然Javaの方が主流。 ただし、Winアプリを作るだけならC#3.0の方が生産性が高い。 スキルとして持っていた方が有利なのはJava、 Winアプリのみを作る状況で生産性が高いのはC#。 Javaの求人の方がまだまだ多いな。
289 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:20:44 ] C#で作ったアプリって.NETだったら linuxでもmacでも動くんだよね?
290 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:21:04 ] そして結局日本で一番多いのはVB/VBA
291 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:23:16 ] >>287 コレクションなら全て入れられる 配列でもなんでも
292 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:54:19 ] >>291 kitai.pList.AddRange(new List<Point>(ZahyouKeisan.GetToArray())); 適当に記述してたらこれでいけたっぽいんだけど、これでいいのでしょうか?
293 名前:275 mailto:sage [2008/10/02(木) 14:57:54 ] >>284 の部分で struct Tekiki { public string Name; public Point[] pArr; } static class ZahyouKeisan { public static List<Point> GetZahyou() { List<Point> pList=new List<Point>(); //いろいろ計算 return pList.ToArray(); } } こういう場合foreach内はどう記述すればいいですか?
294 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:59:56 ] >>282 > エラー内容 > 'kitai' は 'foreach 繰り返し変数' であるため、このメンバを変更できません。 このエラーが重要。 foreach(Kitai kitai in Guntai){ kitai = Zahyou.GetArray(); // (A) } (A)のように、foreachの()内部で宣言した変数は 変更できない。だから、エラーがでてるんだと思う。 これが、 foreach(Kitai kitai in Guntai){ kitai.pArr = Zahyou.GetArray(); } のように、変数のメンバーとかなら変更可能。
295 名前:294 mailto:sage [2008/10/02(木) 15:01:39 ] あれ。違うか。 メンバも変更出来ないんだっけ?
296 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 15:10:07 ] 違う。 foreach(var item in collection) のitem変数はコレクション内のオブジェクトのコピーだから、 構造体配列等の値型のコレクションにおいてそれをやってもダメだよ〜って話。 変数のメンバといってもその変数自体がコピーされたものだから、メンバを変更しても 元のコレクションには当然反映されない。 参照型のコレクションだったらコピーされた変数はそのまま参照が渡されているので、 foreach内でメンバの変更が可能となる。 せっかくC#を使っているのにCでゴリゴリ書いているコードとレベルが変わらんぞ。
297 名前:294 mailto:sage [2008/10/02(木) 15:10:48 ] structだと変更不可能なようですorz だとすると、forで回すのがよさそう。 for(int i = 0; i < Guntai.Length; ++i){ Tekki kitai = Guntai[i]; kitai.pArr = ZahyouKeisan.GetArray(); }
298 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 15:13:19 ] kitai.pList.AddRange(new List<Point>(ZahyouKeisan.GetToArray())); まずnew Listはいらない kitai.pList.AddRange(ZahyouKeisan.GetToArray()); pListを直接公開するのはオススメしない >>293 List<Point>を返すメソッドで配列を返しちゃいけない AddRangeでPointを増やしていく予定があるならpArrは配列にすべきじゃない あとZahyouKeisanクラスがkitaiの情報をもっていないのに Zahyouを返せる理由が分からない
299 名前:294 mailto:sage [2008/10/02(木) 15:22:29 ] >>296 解説どうもです。
300 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 15:35:35 ] >>293 どうしても配列でやりたいみたいだから書いてみた。 void ShoriMain(){ int now_enemyCount = enemy.pArr.Length; Point[] tmpArr = ZahyouKeisan.GetZahyou(); int add_enemyCount = tmpArr.Length; int new_enemyCount = now_enemyCount + add_enemyCount; //配列の長さを変更 Array.Resize(ref enemy.pArr, new_enemyCount); //新しい配列を末尾に追加 int count = now_enemyCount; for (int i = 0; i < tmpArr.Length; i++) { count += i; enemy.pArr[count] = tmpArr[i]; } } struct Tekiki{ public string Name; public Point[] pArr; } static class ZahyouKeisan{ public static Point[] GetZahyou(){ List<Point> pList=new List<Point>(); //いろいろ計算 return pList.ToArray(); } }
301 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 15:38:06 ] 変数名が now_enemyCount と new_enemyCount ってのは殺人的だぞ
302 名前:300 mailto:sage [2008/10/02(木) 15:42:45 ] VS2008使ってるなら拡張メソッド使ってもうちょっと楽に書けそうだな。 Tekiki enemy = new Tekiki(); void ShoriMain(){ enemy.pArr.Concat(ZahyouKeisan.GetZahyou()); } struct Tekiki{ public string Name; public Point[] pArr; } static class ZahyouKeisan{ public static Point[] GetZahyou(){ List<Point> pList=new List<Point>(); //いろいろ計算 return pList.ToArray(); } }
303 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 15:59:34 ] あまりにも汚いコードなんで俺が書き直してやったぞ struct Tekiki { public string Name; public void AddPoints(IEnumerable<Point> newPoints){ this.pList.AddRange(newPoints); } private List<Point> pList; public Point[] pArr{ get { return pList.ToArray(); } } } class ShoriMain { public void SetZahyou(){ foreach (Tekiki kitai in Guntai){ kitai.AddPoints(ZahyouKeisan.GetZahyou()); } } } static class ZahyouKeisan { public static List<Point> GetZahyou() { List<Point> pList = new List<Point>(); //いろいろ計算 return pList; } }
304 名前:300 mailto:sage [2008/10/02(木) 16:07:17 ] あー悪い、>>303 は俺です。 当然GetZahyou関数がTekkiの座標計算関係のみに使うのであれば、 Tekiki構造体のstaticメンバにしてもっと簡潔に書くことも出来る。 struct Tekiki { public string Name; public void AddPoints(IEnumerable<Point> newPoints){ this.pList.AddRange(newPoints); } private List<Point> pList; public Point[] ZahyouArr{ get { return pList.ToArray(); } } public static List<Point> GetZahyou(){ List<Point> pList = new List<Point>(); //いろいろ計算 return pList; } } class ShoriMain { List<Tekiki> Guntai = new List<Tekiki>(); public void SetZahyou(){ foreach (Tekiki kitai in Guntai){ kitai.AddPoints(Tekiki.GetZahyou()); } } }
305 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 16:50:39 ] だめだめじゃないか - GetZahyouメソッド × 戻り値がList<T> - ZahyouArrプロパティ × 型が配列 × ToArrayが内部状態のコピーとみなせる てか、それ以前に値型使ってること自体が不適切という指摘をしてあげないと ttp://msdn.microsoft.com/ja-jp/library/ms229017.aspx
306 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 17:02:04 ] WebBrowserコントロールで、DocumentCompleteを使ってElementにマウスイベント登録すると、 javascriptトリガー用の"href=hoge.com/# "をクリックしたときにまでNavigate系のイベントが発生するようになるんだが、 コレは仕様なの?(登録先がBody又は対象のA要素のとき発生) しかも結果的にナビゲートに失敗するから困ってる。 イベント登録しなければ発生しないみたい。 またハンドラの中身が空でもなるみたい。 誰か回避方法知らない?
307 名前:300 mailto:sage [2008/10/02(木) 17:47:30 ] >>305 すまん良く分からないんだが、戻り値がList<T>の関数がガイドライン違反なのか? リンク先を見てみたがその記述はどこにあるの? この場合は特に問題ないと思うんだけどなあ。 ZahyouArrプロパティについても、配列を返すプロパティがもしかしてガイドライン違反? っていうか俺よくList<T>のカプセル化のときにこういうプロパティをよく使ってた・・・ インデクサを使えってことなのかな。 仮に返されるものが参照型の配列だったりしたら内部を変更される可能性があって良くないとは思うけど、 この場合は構造体の配列だし、private List<Point> pListについては安全なように見えるんだけどな。 内部状態のコピーが危険なのは参照型コレクションだけとかではないの? いまいち納得出来ん。 まあTekiki構造体についてはクラスにすべきだと言う意見は納得できる。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 17:52:37 ] グーグーレーカースー
309 名前:300 mailto:sage [2008/10/02(木) 18:09:52 ] オーケー分かった。 配列を返す操作と内部状態のコピーの時はメソッドを使用して下さいと書いてあったな。 ZahyouArrプロパティ の代わりに public Point[] GetZahyouArr(){ return pList.ToArray(); } とでもしておくか。 しかし戻り値がList<T>のメソッドは使うなという記事は見つけられんかった。 リンク先おせーてくれよ。
310 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:11:36 ] その代用で使う 〜Collectionってやつがうざい
311 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:22:46 ] 俺もList<T>を返すメソッドを書く事はある だめだというガイドラインがあるなら俺も知りたい
312 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:24:22 ] リスト返したらセットアクセッサが無意味化するぞ
313 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:28:44 ] ?
314 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:29:29 ] とゆーかカプセル化が崩壊
315 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:30:56 ] ジェネリック リストを公開しません msdn.microsoft.com/ja-jp/library/ms182142.aspx Code Analysis Team Blog : FAQ: Why does DoNotExposeGenericLists recommend that I expose Collection<T> instead of List<T>? [David Kean] blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx だそうです。
316 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:31:05 ] >>275 特別にいいもの教えてやる。 っ インデクサ
317 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:32:13 ] "do not return list" c# とか適当な英文でググるといいよ ttp://blogs.msdn.com/kcwalina/archive/2004/03/15/89860.aspx
318 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:35:34 ] >>315 それはprivateフィールドのList<T>を公開するなってことでしょ? そんなことがまずいのはみんな知ってるだろw static List<Point> GetZahyou() { List<Point> pList = new List<Point>(); //いろいろ計算 return pList; } このメソッドがガイドライン違反というのが納得できないだけ。 中でnewしたListをいろいろ計算して、その結果を返すメソッドがガイドライン違反という説明にはなってない。
319 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:41:49 ] 計算結果を返すだけなら別にいいんじゃね それをどういじくろうが誰も困らないし
320 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:45:04 ] constがないからな
321 名前:デフォルトの名無しさん [2008/10/02(木) 18:46:05 ] List<T>返す云々以前にまずまともな設計をするべき
322 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:49:40 ] >>318 わざわざList<T>で返されたら追加することに意味があるのかと思っちゃうじゃないか……
323 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:54:56 ] >>273 List<>を返すのも配列を返すのもかわらなくね? 結局どうすればいいんだろ
324 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:57:16 ] パフォーマンスを考えればToArrayしとくべきだろ で、引数や返り値の配列は変更しないというのは暗黙の了解にしとく
325 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:59:55 ] Dictionary.ValueCollection みたいに
326 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:01:04 ] >>323 だよね わざわざ、ToArrayしてまたList<>にいれるわけでしょ? 変換するのは無意味な気がするんだが
327 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:03:32 ] > わざわざ、ToArrayしてまたList<>にいれるわけでしょ? これが言い切れるようなinternalな場合はどうでもいいよ
328 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:03:52 ] 書き込み可能な配列で返すのもよろしくない。
329 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:19:57 ] それを言ったらオブジェクトを返すこと自体良くないきがするんだが
330 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:21:55 ] たとえば>>325 のは返す本人以外は要素の取得しか出来なかったりする
331 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:25:54 ] 親戚も弄れるけどなw
332 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:27:01 ] 今時ならジェネレータにして使う側がToList()なりToArray()なりするというのが良さそう
333 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:34:11 ] >>321 まともな設計をお願いします
334 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:41:17 ] 引数なしのstaticメソッドで座標を作ってそれを様々な敵機に入れるなんてのはまともな設計じゃないな 普通に考えたら全部同じ座標になるし、それなら何度もメソッドを実行する意味がない
335 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:58:19 ] なるほど やっぱりガイドライン違反じゃないんだな
336 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 20:23:45 ] >>334 引数無しなのは質問の要点をわかりやすくするために省略しただけ 実際は玉をよけたり、当たり判定だったりあるし、 敵機の目的地点までの経由地点の座標群を敵機ごとに保持しているだけ 「usingディレクティブがない」と揚げ足取るぐらい蛇足な指摘だと思うんだがな
337 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 20:29:41 ] >>335 お前がそう思うんなら そうなんだろう お前ん中ではな
338 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 20:30:54 ] >>334 怒るな 怒ったら負けだ
339 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 20:39:39 ] 既に負けてる
340 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 20:48:35 ] なんでわざわざ作りにくい実装にするのよ
341 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:03:40 ] >>340 作りやすい実装をお願いします
342 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:30:54 ] 戻り値の型にList<T>がまずいのは当然として、 IList<T>なら遥かにいいと思っているんだが違う?
343 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:49:22 ] List<T>を返すのがなんでまずいんだ?初めて聞いたぞ それを言ったらオブジェクトの中にList<T>が含まれてたら何にも返せなくなっちゃう
344 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:50:05 ] >>343 ラッパを返せばいい
345 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:56:16 ] っ ほい ttp://msdn.microsoft.com/ja-jp/library/ms132474.aspx
346 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:04:54 ] いちいち継承してらんねーよ
347 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:10:43 ] 今日のレスは勉強になったなー
348 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:14:52 ] なんしか、フィールド変数の値を返す場合はプロパティで オブジェクトを返す場合メソッドを通して値のやり取りをしろってことでしょ?
349 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:28:04 ] ボタンをクリックしたら、エクスプローラで全選択するように、ボタンにCtrl+Aを割り当てたプログラムを作ろうとしています。 ところが、当然ボタンをクリックするときには、エクスプローラではなく、作っているプログラムがアクティブになってしまうので、アクティブにならないようにしてみました。 しかし、ボタンを押しても全選択はできないままです。 アドバイスお願いします。 namespace CtrlA { public partial class CtrlA : Form { const int WM_MOUSEACTIVATE = 0x0021; const int WA_NOACTIVATE = 3; public CtrlA() {InitializeComponent();} protected override void WndProc(ref Message m){ switch (m.Msg) { case WM_MOUSEACTIVATE: m.Result = (IntPtr)WA_NOACTIVATE; return;} //Console.WriteLine(m.Msg); base.WndProc(ref m); } private void CtrlA_Click(object sender, EventArgs e) { SendKeys.SendWait("^A") ;} } }
350 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:28:11 ] 変更可能なオブジェクトの参照を流出させることのリスク、 そのリスクの管理ができていればどうしようとかまわないと思う。 ようは外部から参照経由で変更された場合に、 そのオブジェクトを内包させているクラスが 値が変わったことを知ることができないということ。 メソッドの場合はメソッド名で内部の参照をさらしているのか、安全なコピーを返しているのか 区別が付くような名前にしておくとか工夫して置けばよい。 プロパティの場合はメソッドを使うよりはいろいろルールがある。
351 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:34:21 ] >>349 エクスプローラの画面のハンドルが必要になるような。 どうやるかはWin32APIの範疇になる。
352 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:38:51 ] >>350 >そのリスクの管理ができていればどうしようとかまわないと思う。 そのリスクを減らすためのものがガイドラインでしょ?守らないと不幸なことが起きるかもしれないのがガイドライン。 俺仕様がしっかりしてるならそれでもかまわないが、それが通用しないところではガイドラインが役に立つ。 Delphiで言うと、クラス名はTうんちゃらで始めるという習慣があるが、厳密な言語仕様でもないので守る必要はない ただ、守らない理由なんて無いけどな(Delphi.netは例外) TTBaseって支援ソフトがあるんだが、これのプラグインSDKにはTTTBasePluginというクラスがあって、1カ所(ry
353 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:50:36 ] >>346 何を継承して何をしたいのか知らんが、 >>344-345 をするならAsReadOnly()呼ぶだけじゃん
354 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:57:18 ] >>352 プロパティに関してはそういうガイドラインがあることは承知しているが、 通常のメソッドに関しては見たことがないな。 メソッドの場合は自己責任じゃないかと。
355 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:08:30 ] まとめるとFramework Design Guidelines第二版買ってねってことだな ttp://www.amazon.co.jp/dp/0321545613 おk、アジソンからマージンゲット
356 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:18:33 ] そういえば全然関係ないけど名前付け関係なら我等が .NET ライブラリにも MessageSecurityVersion とかいうネタクラスが ありますよ。 この命名規則はさすがにどうなんだろうね
357 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:30:56 ] >>356 あれはよくわからないけどWS-*とかSOAPとかのネーミングルールなんじゃない(笑
358 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:51:55 ] MessageSecurityVersionのどこが変なの?
359 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:58:35 ] ガイドラインって本しかないの?
360 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:08:32 ] >>359 >>315
361 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:09:20 ] >>358 WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005 WSSecurityPolicy11BasicSecurityProfile10 プロパティとか。 ちなみにサンプルコード片。 CustomBinding binding = new CustomBinding(); binding.Elements.Add( SecurityBindingElement.CreateMutualCertificateDuplexBindingElement( MessageSecurityVersion.WSSecurity10WSTrustFebruary2005 WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10 ) ); 横スクロールはいやというやむを得ない事情により改行を入れさせていただきました 本来識別子なので入れてはいけません
362 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:13:05 ] >>318 はガイドライン違反じゃないよね?
363 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:13:11 ] >>360 なんだその記事w 日本語でおkなんだがw
364 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:13:47 ] >>361 これはギャグなのか?w
365 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:15:30 ] >>361 ネームスペースというのが使えるのにこれだけ長い名前になるんでしょ? C言語時代のメソッドや変数の名前って相当長かったんだろうな
366 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:27:33 ] C言語時代は8文字規制とかあたじゃん
367 名前:40 [2008/10/03(金) 00:27:36 ] ディレクトリの操作をするときのパス指定で @"c:\tmp\path" というような書き方をしますが、 @ ってどういう意味ですか?
368 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:30:42 ] >>367 ufcpp.net/study/csharp/st_embeddedtype.html
369 名前:40 mailto:sage [2008/10/03(金) 00:33:12 ] >>368 さん 参照URLを拝見しました。理解できました。ありがとうございました。
370 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:36:55 ] >>367 \ -> \\ 本来、文字列の中で \ はエスケープなので、\\ と書かなくちゃいけない。 それを \ で済ますことができるようになる
371 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:37:04 ] >>367 「@文字列」ですな。 例えばファイルのパスを記述する時、「\」はエスケープ文字を意味する記号になるので 通常は「"C:\\Windows"」など[「\\」と\を2個記述しなければいけないのですが、 @を先頭に付ければ「\」を文字列として扱い、一つしか記述しなくても済みます。
372 名前:40 mailto:sage [2008/10/03(金) 00:41:57 ] >>370 さん, 371さん 丁寧な補足解説ありがとうございます。 おかげでよくわかりました。
373 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:43:01 ] >>365 逆。昔はエディタの補完機能なんてのもないし、長い名前付けなかった。 ほんと大昔、初期の初期はプログラムの規模が小さいから 名前の衝突の危険性が低かったからいいんだけど、それはすぐに破たん。 結果どうなったかというと、意味のわからない頭文字略語だらけで、 書いた人にしか意味が分からない名前だらけに。 例えば、>>361 のコードなら、 cb_t b; add(&b.elem, sbe_create_mcdbe(msg_sec_v10feb05, ws_sec_feb05_11b10) とかになるんじゃないかと。
374 名前:デフォルトの名無しさん [2008/10/03(金) 00:43:50 ] 質問です、エクスプローラでファイルを右クリックして、[プロパティ]画面の [概要]タブを開くと、そのファイルの作成者やコメントなどの情報を設定したり 閲覧したりすることができます。これを何かの処置で非表示にすることは 可能ですか?設定は随時行い、表示はさせない、という使い方をしたい のですが、方法についてご存知の方がいらっしゃいましたらご指導お願いします。 .NETからは、dsofile.dll というDLLで設定と参照ができることはわかったのですが、 これをそのファイルごとに非表示にしたり表示したりできれば思います。
375 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:48:04 ] @"blah\" とかやっても平気なのは何気に凄いね
376 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:50:55 ] MSDNって、どうしてあんなに遅いんですか?
377 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:51:13 ] スペッコ不足です
378 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:53:15 ] つーかパスはC:\\\\\\\\\\\\\\\windows\\\\\\\system32\\\\\\ とかやっても動くぞ 二つ以上連続の\は勝手にOSが読み替えてくれる
379 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:54:41 ] >>376 仕様です。 IE で見るのが苦痛なサイトを自前で作ってるって笑われてる。
380 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:55:43 ] MSDNの分かりづらさはなんとかならないのか 専門の校閲係とか雇って分かりやすくしとけよ
381 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:56:13 ] >>374 プログラムというより、OS の設定の領域。 プログラム的には、シェルエクステンションの仕組みでうんぬんかんぬん・・・
382 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:59:37 ] >>379 文字が小さくて 拡大すると、どうでも良い部分も拡大されて読めなくなるのは?
383 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:11:39 ] >>382 仕様です。 JavaScript で文字調整やってやがるから、 フォントサイズいじっても無駄とかだと思う。 拡大鏡の類で拡大すればちゃんと大きくなると思うが。
384 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:18:44 ] いやかしましは百合ものだろ 初期設定がアレなだけ
385 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:32:23 ] どこの誤爆だよw
386 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:32:35 ] かしまし噴いたwww
387 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 02:30:50 ] コーラ返せww
388 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 18:53:33 ] どなたーか EachWithIndex 実装してる人いませんか?
389 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:54:51 ] >>388 Rubyのアレならこんなのが ttp://grabbagoft.blogspot.com/2007/12/ruby-style-array-methods-in-c-30.html
390 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:57:23 ] >>388 こんなんでどうだろ? public static class IListExtensions { public delegate void Fun<T>(T obj, int index); public static void EachWithIndex<T>(this IList<T> lst, Fun<T> func){ int index = 0; foreach (T obj in lst){ func(obj, index++); } } } class Program { static void Main(string[] args) { string[] strs = { "Foo", "Bar", "Zot" }; strs.EachWithIndex( (name, index) => { System.Console.WriteLine("{0}: {1}", index, name); } ); IList<string> lst = new List<string>(); lst.Add("Hoge"); lst.Add("Fuga"); lst.Add("Sugo"); lst.EachWithIndex( (name, index) => { System.Console.WriteLine("{0}: {1}", index, name); } ); System.Console.ReadLine(); } }
391 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:58:07 ] >>389 これIEnumerable<T>への拡張メソッドにしたほうがいいよね 回りくどくて格好悪い
392 名前:391 mailto:sage [2008/10/03(金) 21:07:27 ] 意味解らんこと言ってるな わざわざ余計なインスタンス作ってDo呼び出させる意味がわからない
393 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:13:01 ] 元記事に書いてあるじゃん。 > I still like the "Do" keyword in Ruby to signify the start of a block
394 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:29:54 ] >>390 Action<T, int>使えよ
395 名前:390 mailto:sage [2008/10/03(金) 21:33:47 ] >>394 > Action<T, int>使えよ おや。そんなものが? じゃ、こうかな。 public static class IListExtensions { public static void EachWithIndex<T>(this IList<T> lst, Action<T, int> func){ int index = 0; foreach (T obj in lst){ func(obj, index++); } } }
396 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:48:15 ] IEnumerable<T>はどうした
397 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:50:43 ] 引数名はactionだろ常考
398 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:51:42 ] Union of Soviet Socialist Republics
399 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:03:47 ] >>396 ,397 そういうもん? じゃ、これで。 public static class IEnumerableExtensions { public static void EachWithIndex<T>(this IEnumerable<T> lst, Action<T, int> action){ int index = 0; foreach (T obj in lst){ action(obj, index++); } } }
400 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:11:48 ] Enumerableの拡張メソッド見た感じじゃthis IEnumerable<T>の引き数名は sourceだがここでもsourceでいいのかね
401 名前:390 mailto:sage [2008/10/03(金) 22:27:26 ] >>400 valuesじゃ駄目だろうか? public static class IEnumerableExtensions { public static void Each<T>(this IEnumerable<T> values, Action<T> action) { foreach (T obj in values) { action(obj); } } public static void EachWithIndex<T>(this IEnumerable<T> values, Action<T, int> action){ int index = 0; foreach (T obj in values){ action(obj, index++); } } }
402 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:29:27 ] 派生クラスでプロパティを違う型に変えるのは出来ないの? class Class1 { public Class1 Owner { get{〜} } } class Class2 : そlass1 { public Class2 Owner { get{〜} } }
403 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:32:57 ] >>399 メソッド名はForEachでいいと思う。 C#だとWithIndexみたいなのは付けずにオーバーロードを使うほうが自然。 public static class EnumerableEx { public static void ForEach<T>(this IEnumerable<T> source, Action<T> action) { foreach (var item in source) { action(item); } } public static void ForEach<T>(this IEnumerable<T> source, Action<T, int> action) { int index = 0; foreach (var item in source) { action(item, index++); } } }
404 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:33:57 ] new すればいいんじゃない?
405 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:35:50 ] オーバーライドでの共変・反変性はサポートされとらんねー
406 名前:403 mailto:sage [2008/10/03(金) 22:36:48 ] >>401 参考までにこれも ttp://msdn.microsoft.com/ja-jp/library/system.linq.enumerable.select.aspx Enumerable.Selectにもインデックス付きのバージョンがあるんだけど Enumerable.SelectWithIndexとはならない。
407 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:36:57 ] じぇねりっく!
408 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:38:04 ] _
409 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:42:16 ] public Class1 Owner2 { get{〜} } public Class2 Owner1 { get{〜} } ( ^▽^)
410 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:45:43 ] >>399 俺も>>403 に一票。てか、俺が書いたとしてもforeachを一行で書くくらいの違いで クラス名、変数名まで全く同じになりそう あ、でも型パラメータは一応Enumerableに合わせてTSourceにしとくかな
411 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:10:13 ] プロジェクトによって、インテリセンスのコメントが 出てきたり、出てこなかったりするんだけど、 何が違うんでしょう? 同じソリューション内にa, b, zの3つのプロジェクトがあったとして、 aからはzのコメントが出てくるのに、bからだとzのコメントが出てこない、 みたいな状態です。 参照設定も同じようになってます。
412 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:25:52 ] >>403 なるほどなるほど
413 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:32:32 ] 超初心者の質問ですがどなたか願いします 名前空間ってあるじゃないですか あれって使わないものもusingで指定しても大丈夫ですか? 自分がちょっとテストしてみたところ問題ないような感じなんですよ めんどくさいので全名前空間usingセット作っておいたら便利なのかと思うんです 何か不都合がおきますか?
414 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:37:32 ] クラス名が時々衝突する Timerなんか3つあるしな
415 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:39:39 ] >>414 わかりました 横着は駄目ですね ありがとうございました
416 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:43:33 ] 型名をタイプしてからShift+Alt+F10が便利
417 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:06:48 ] >>409
418 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 15:17:26 ] c#ってマックで動きますか?
419 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 15:17:44 ] 動きます。
420 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 15:26:44 ] .Net frameworkがインストール可能な環境なら どこでも動くってことでおk?
421 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 15:28:06 ] いいえ .NetFrameworkに限りません
422 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 15:44:15 ] メガマック食いてえー
423 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 16:06:44 ] >>422 スーパーサイズで良いですか?マックマクにしてやんよ
424 名前:デフォルトの名無しさん [2008/10/04(土) 17:48:38 ] メモリ上にある画像(byte[]で保持しているjpg画像)を、 HTMLで好きなようにレイアウト組んで表示させたいんだけど、 WebBrowser使ってできるかな? 画像データはファイルに落とさないこと前提で。
425 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:02:57 ] プロトコルハンドラを書けばいいんじゃない? それで、<img src="foo:ID"/>とかできるとおもう。 IInternetProtocolとかでぐぐれ
426 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:07:15 ] 何しようとブラウザに画像ファイルとしてキャッシュされる可能性は捨てられんがそれはOK?
427 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:25:09 ] 今ペイントソフト的なのを作ろうとしているんだが… 範囲選択、塗り潰し、グラデーションが上手くできなくて困ってる。 塗り潰しはピクセルごとに色を取得してクリックしたとこと同じなら…とやろうとしたがそれだと離れた場所にある同じ色のピクセルも色が変わってしまう。 グラデーションはLinearGradientBrushでやろうとしたが、グラデーションが繰り返されてフォトショとかみたいにならない。 初心者で悪いんだが、助言もらえると助かる。
428 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:25:21 ] 或いはNetscapeプラグイン、或いはActiveX
429 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:32:05 ] 困ったときはPaint.NET見てみる 俺は見たことも使ったことも無いから参考になるかどうかは知らん
430 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:43:47 ] 無料のSicence Libraryなかなかいいのないよね。
431 名前:427 mailto:sage [2008/10/04(土) 19:07:47 ] >>429 前に見たんだが、ファイル数多くてどれがどれだか分からないし、さらに理解もできなくて… オープンソースの奴がある程度は理解できるようにはならないと駄目だよな…
432 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 19:35:11 ] >>425 ありがとう。 ググってみるわ〜。 むずそうだったらファイルに落とすか、 諦めてDataGridに表示とかにするわ。 >>426 全然おk
433 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 19:44:41 ] 塗りつぶしは上下左右のピクセルを調べて同じ色なら塗る を上下左右に再帰的に適応していけばできる気がするな それよりもいい方法があるかもわからんけど
434 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 19:59:07 ] >>433 極めて正しいが多分今のPCでは実用速度的に厳しいと思う 塗りつぶしは昔から研究されてるからちょっと調べればアルゴリズム色々転がってるよ
435 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 19:59:31 ] >>433 そのまま再帰で書くとSystem.StackOverflowExceptionしそうだな。 多少きれいじゃなくなるけど、非再帰に書き直さないとな。 スタックを使えばできないこともないと思う。 それと、直接塗りつぶすんじゃなくて、 画像と同じサイズの配列(Bitmapでも可)を用意して 塗りつぶすところと塗りつぶさないところのフラグ(マスク)を作ってから 重ね合わせで塗りつぶせば、グラデーションやテクスチャの流し込みとかにも応用できそう。 あと、塗りつぶす前にマスクをぼかしておけば、よりきれいにぬれているように見えるはず
436 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:32:15 ] ソースコードを記述したファイルの管理について質問させてください C#はソースの場所と名前空間に特に関連が無いようですが、一般的に従うファイルの置きかたなどあるのでしょうか? 今はVC#がソースを置くディレクトリに全てのファイルをそのまま置いてます また、クラスとファイルの関係ですが、どうするのが普通なのでしょうか? Javaみたいに1個のpublic classに対して1個のファイルを作るのが普通でしょうか? よろしくお願いいたします
437 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:34:42 ] 好きにすればいいよ
438 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 22:37:45 ] >>436 > C#はソースの場所と名前空間に特に関連が無いようですが、一般的に従うファイルの置きかたなどあるのでしょうか? ありません。 > 今はVC#がソースを置くディレクトリに全てのファイルをそのまま置いてます ファイル数が少ないときはそれでよいかと。 > また、クラスとファイルの関係ですが、どうするのが普通なのでしょうか? > Javaみたいに1個のpublic classに対して1個のファイルを作るのが普通でしょうか? 一般的にはそんな感じですが、Java と違って、ひとつのファイルに複数のクラスが書けるので、 機能的にまとまったクラス群はひとつのファイルにまとめることもあると思います。
439 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:02:47 ] >>437-438 レスありがとうございます 参考にさせていただきます ついでに、もう1個質問です C#にはパーシャル クラス機能があり、1個のクラスを複数のファイルに分割して記述できると知りました しかし、使う場面が思いつきません パーシャル クラスの一般的な使い方とかあるのでしょうか?
440 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:03:38 ] >>439 VS でウィンドウアプリを作れば、プロジェクトがどういう風にパーシャルクラスを 使ってるかわかるよ
441 名前:427 mailto:sage [2008/10/04(土) 23:17:19 ] >>433-435 レスThx、参考になった 塗りつぶしアルゴリズムでググってみたら良さげなのが出たからそれを利用してみる事にする。 続けてで悪いんだが、範囲選択はどうしたら出来るか助言を貰いたい。
442 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:38:10 ] >>439 基本的に、機械生成コードと手書きコードを合わせて1クラスにするための機構。
443 名前:435 mailto:sage [2008/10/04(土) 23:47:52 ] >>441 矩形だけなら始点(sx,sy)と終点(ex,ey)を保持するだけで良いが それ以外を選択するには、Bitmapで形を保持すると良い PictBearは選択範囲をBitmapで保存できたから、多分そんな形でやってるはず。 >>442 WPF,XAMLがある今、いらない子?
444 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:50:45 ] >>443 いや、WPF 以外にもいろいろ使われてる。 WPF の XAML も、ビルドの途中で partial class を自動生成してる。
445 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:50:50 ] >>443 形の保持ならGraphicsPathでよかろうよ
446 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 00:07:30 ] ラスタ形式の画像の選択範囲は、 αチャンネルで持つのが普通な気が。
447 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:03:01 ] splitで出力された1次元配列にいくつの要素があるかわかるメソッドってない?
448 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:04:24 ] Count()
449 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:05:07 ] >>447 ubound
450 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:05:29 ] ごめん、VB と勘違いした
451 名前:447 mailto:sage [2008/10/05(日) 01:08:36 ] 即レスサンクス! Count()はVBで>>448 =>450でおk?uboundを使ってみます!
452 名前:427 mailto:sage [2008/10/05(日) 01:11:46 ] 助言してくれた人たち、ありがとう。 教えてもらった方法をなんとか試してみる。
453 名前:447 mailto:sage [2008/10/05(日) 01:16:32 ] ん、、? uboundがVBかorz
454 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:25:10 ] 現実では無理だと悟ったので、人工知能の少女を作って仮想世界で彼女作ろうと思うのですが C#でできますか?
455 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:28:10 ] C#はそんな貴方の夢を叶えます
456 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:53:29 ] >>440 レスありがとうございました 自分は今のところコマンドプロンプトで実行するアプリケーションしか作ってないので、そのうち勉強させてもらいます すみませんが、またまた質問させてください。 今度は例外処理に関してです。 C#だと、例外は必ずしもtry~catchしなくて良いのでしょうか? Encoding.GetEncoderメソッドを使うプログラムを考えているのですが、特に例外処理しなくても、コンパイルも実行もできてしまいます おそらく、このメソッドは存在しない文字コードを指定すると例外を発生させますよね? そのための例外処理が必要だと思うのですが、どうなってるんでしょ? Javaで言うところのRuntimeExceptionが出ているのでしょうか? APIを調べたのですが、ttp://msdn.microsoft.com/ja-jp/library/system.text.encoding.getencoder.aspxを読んでも、例外関係の情報が入手できません。 例外の基本的な処理の考え方や、ドキュメントからの例外情報の入手方法を知りたいです。 よろしくお願いいたします
457 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:59:56 ] >>456 いちいち Java と比べるのはやめれ。 例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。
458 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 09:04:26 ] GetEncoder自体はEncoderオブジェクト返すだけだし例外投げる要素が無いな
459 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:33:11 ] >>457 すみません、自分はCとJavaとrubyくらいしか、経験が無いもので、、、^ ^; >例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。 なるほど しかし、いきなりアプリが終了するのは厳しいですな >>458 間違えました Encoding.GetEncoding(String);でした ttp://msdn.microsoft.com/ja-jp/library/t9a3kf7c.aspx 見ると、例外の情報も載ってますね 申し訳ありませんが、さらに質問させてください 普通にVC#2008ExpressEditionを使っていると、例外処理を行わなくてもコードが書けてしまいますよね これを、VC#2008ExpressEditionが自動的に全ての例外を処理しなければ警告を出すような設定にすることはできないのでしょうか? あと、またまたJavaに例えてしまい申し訳ないのですが、各例外にExceptionとRuntimeExceptionのような違いはないのでしょうか? よろしくお願いいたします。
460 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:34:34 ] >>456 変な引数与えたときはたいてい ArgumentException。 Java と比べてってことは、「throws リストはないの?」ってことだろうけども。 あれは、「内部実装を外部に漏らしてしまう」って欠点がある割に、 どうせ「面倒だったらException型でcatchしちゃえ」って人が多くて 対して役に立たないから C# では採用しなかった。
461 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:38:38 ] >>459 msdn.microsoft.com/ja-jp/library/system.exception_derivedtypelist (VS.80).aspx 例外処理の強要は、Java みたいに throws リストでやるんじゃなくて、 単体テスト書いて、ちゃんとコーナーケースのテストもして、 例外が出たらテスト通さないようにするのがいいと思う。
462 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:11:25 ] VS2008C# Expressです。 フォームを作成すると、Form1.Designerに以下のような コードが追加されますが、このSystem.ComponentModel 名前空間のインターフェース、クラスはどのような意味を 持つのでしょうか?ヘルプやHPで調べてもよくわかりません。 private System.ComponentModel.IContainer components = null; private void InitializeComponent() { this.components = new System.ComponentModel.Container(); } このフォームにボタンを追加すると、InitializeComponentの this.components = new System.ComponentModel.Container(); が消えてしまいます。 そこからさらにTimerを追加すると、 this.components = new System.ComponentModel.Container(); が復活し、 this.timer1 = new System.Windows.Forms.Timer(this.components); が新たに追加されます。 アンマネージドリソースの破棄に関係しているのでしょうか? 詳しく解説しているHP等ありましたら、教えてください。 宜しくお願いします。
463 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:19:38 ] はじめに入ってるのはそういうテンプレートだから 消えるのは多分使ってないと判断されたから 追加されるのは使うから IContainerはComponent派生クラスの後片付け(Dispose呼び出し)のルール 自分がDisposeされるときに自分の持ってるComponentもまとめてDisposeするため
464 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:42:59 ] >>460-461 レスありがとうございます 確かにJava使ってたときもなんでもかんでもExceptionでcatchなさる御仁は多かったですね うちの会社はルールが厳しくて許されませんでしたけど、下請けに出した古いコードはcatch(Exception e)の嵐… しかも、何も処理して無いことも多いですし、酷いときはVMが突然終了するコードもありましたね 現実問題、例外処理はどうするもんなんでしょ? たとえば、ArgumentExceptionとかはそもそもメソッドの使い方を間違えているわけだから、例外が出たらプログラマの責任でテスト失敗てのは納得できます だから、ArgumentExceptionをcatchして例外処理を記述する必要は無いと思います しかし、ファイル読み込みに失敗とかのケースはやはりcatchしてなんだかの処理をすべきですよね(少なくともアプリが突然終了はないですよね) catchして処理すべき例外とプログラマの責任でそもそも例外が出ないようにテストする例外と、なんか、その辺を解説している記事とか本とかないですかね
465 名前:462 mailto:sage [2008/10/05(日) 11:43:51 ] >>463 レスありがとうございます。 Component派生クラスのオブジェクトをFormの System.ComponentModel.IContainer componentsに登録させておき、 フォームをDisposeするときに一緒にDisposeさせる… 上記のような処理のためcomponentsが存在している。 といった理解でよろしいでしょうか?
466 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:47:56 ] >>465 うん
467 名前:462 mailto:sage [2008/10/05(日) 11:50:22 ] >>466 ありがとうございました。
468 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:51:50 ] Silverlight2RC0来たね
469 名前:デフォルトの名無しさん [2008/10/05(日) 12:21:11 ] 半透明なコントロールを親コントロールに貼り付けたとき、 親コントロールが子コントロールの領域を描画しなくなって 表示がおかしくなるのを防ぐために設定するのって何だっけ? 変な日本語ですまn
470 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:06:53 ] >>465 厳密に言うとそれだけじゃなくて Container Site Componentの 結合のために存在している。 しかし、この辺は ComponentModel の基本的なことだから押さえた ほうがいいともいえるけどコンポーネントを作るんじゃなく使うだけ なら気にしなくてもいいからわかんなくてもいいかも。
471 名前:469 mailto:sage [2008/10/05(日) 13:12:09 ] 追記 Win32で言うところの WS_CLIPCHILDREN と WS_CLIPSIBLINGS を外したいってことなんだが。
472 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:26:58 ] 例外処理はこれで十分 static void Main(string[] args) { try{ //ほげほげ } catch(Exception){ MessageBox(e.ToString(), "えら〜"); } }
473 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:28:36 ] hogeってなんなの?
474 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:32:19 ] hageやhigeの変種
475 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:32:58 ] >>472 e
476 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:33:04 ] hogeの定義は無いよ 適当とか未確定とかニュアンスでいいんじゃないでしょうか?
477 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:37:12 ] では、ハナモゲラ語とはなんですか?
478 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 16:59:13 ] Lengthだろ
479 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 17:05:41 ] !
480 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 17:13:57 ] 想定外の例外は最上位でキャッチしてログ書いてメッセージ出して終了。 普通に想定される処理続行可能な例外はその場でキャッチして適度に処理。 続行出来ないようなのはあえてキャッチせず最上位に任せるか、 ラップして再スローしてやっぱり最上位に任せる。 例外処理って、厳密にやろうとすると細かいルールばかりになって、 しかもかなり慎重に考えないと意味なかったりやたらコーディングが複雑になったりして、 結局シンプルに決めた方がましなことが多い。
481 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 17:37:48 ] 変数と配列・リストで命名規則の違いとかってありますか? たとえば変数の場合は出だしが小文字でそれ以降は大文字 例) int variableNumber; みたいな感じにするのが一般的とされていますが、これと似たような暗黙上のルールは 配列・リストにありますか?
482 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 17:54:20 ] >>481 暗黙っていうか、それはcamelスタイルって名前がついてる。 MSのクラスライブラリ作成のガイドラインに、なににどのスタイルを使うとか書いてある。
483 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 17:58:11 ] 配列やリストだって変数に入れるインスタンスじゃん?
484 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 18:02:20 ] ローカル変数に大文字二十日湾だろ不通
485 名前:462 mailto:sage [2008/10/05(日) 18:10:02 ] >>470 基本的なことなら理解したいのですが、 解説サイトとしてはMSDNの「Visual Studioによるコンポーネント」 のあたりを読むしかないですかね? コンポーネントのありがたみというかコンポーネントでないと 出来ない事なんかがよくわかりません。
486 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 18:56:11 ] どうしてプロパテーはジェネリックに出来ないの?
487 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:13:51 ] うまく質問している内容が伝わるか不安ですがよろしくお願いします やりたいのは、データをファイルに保存するクラスを作りたいのですが テキストファイル形式で保存するんじゃなくて、テキストエディタで開いても みれないデータ形式ありますよね?.exeとか そんな感じで保存したいんだけどどういう知識が必要なのかな? 保存したいのは計算結果の数値や文字列データです
488 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:16:59 ] >>487 好きにフォーマットを考えて、好きに読み書きすればよろし。
489 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:45:24 ] >>488 だから、普通に書き込んだらテキストファイルで見れるから そうならないように書き込みたいからやり方教えろって言ってるんだけど お前メクラか?
490 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:50:21 ] お前がテキストで書き込んでるから見えるんだろボケ
491 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:52:47 ] >>489 >>488 は別に煽ってるわけでもないし、ましてメ○ラなわけでもない。 むしろ馬鹿でメ○ラでツ○ボでどうしようもないのは君の方だぞいやマジで。
492 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:54:08 ] >>489 > だから、普通に書き込んだらテキストファイルで見れるから ならない。 バイナリを見れる、って意味では見れるけどなw
493 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:59:26 ] まあお前らKOOLになれよ BinaryFormatterでシリアライズなんかどうかな
494 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:59:56 ] 昨日splitで出力された配列に何個要素が入ってるのかわかる関数を教えてくれってレスして count()を教えてもらったんだけどこの関数どうやって使うんですか…? ググってもそれらしい構文が見つからなくて…
495 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 20:01:18 ] 素直にLengthプロパティ見れ
496 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 20:06:59 ] >>494 だからお前はオブジェクト指向の概念から学べよ猿 あと、countだと、nullだった場合エラー出るからお勧めできない countなんて薦めた奴はバカだから放置しろ
497 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 20:51:01 ] >>494 その人、たぶん Length って言いたかったんだと思うよ。 VBとか他の言語がいろいろ混ざっちゃってたっぽいので。 Split の結果って配列だから、それの長さ調べろってこと。
498 名前:494 mailto:sage [2008/10/05(日) 20:56:07 ] >>495-497 そうかLength見ればいいのか… なんか変な考え方してたみたいですorz 皆さん優しくありがとう
499 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:10:30 ] 初心者です。C#で ある整数のセットに対して、最小値(か最大値)を配列で返す機能ってあります でしょうか?ちょっと探してみたくらいじゃみつかりませんでした。 例 [3,3, 5, 2, 2, 4, 4, 7] => [2,2] [7,2,3,4,1,,-1,-1,-3,5] => [-3]
500 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:11:32 ] あ、,,になっている部分は、nullみたいな感じで無視します。
501 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:15:56 ] そのものはないけど、 new[] { data.Max() }
502 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:20:37 ] >>501 複数あったらその数だけ作るらしいぜ var max = data.Max(); var result = Array.FindAll(data, x => x == max);
503 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:35:02 ] var min = data.Min() var result = array.Where(n => n == min); でもおk
504 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:35:34 ] >>503 訂正 var result = data.Where(n => n == min);
505 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:41:21 ] みなさんありがとうござます。 早速ためしてから感謝しようとおもっておりましたが、 int[] d = {11,11,22,33,10,10}; d.Min()がない。 というような状況です。もしかして2.0には、Min,Maxないんでしょうか (Math.Min,Maxはありましたが)
506 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:55:20 ] ああ、そう。 Min, Max は 3.0 から。
507 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:59:09 ] 単に3.0って言うとややこしいぜ .NET 3.5/C#3.0から
508 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:07:38 ] public static int[] Maxs(int[] arr) { int max, cnt; if(arr.Length == 0) { return new int[0]; } max = arr[0]; cnt = 1; for(int i = 1; i < arr.Length; i++) { if(arr[i] == max) cnt++; if(arr[i] > max) { max = arr[i]; cnt = 1; } } int[] result = new int[cnt]; for(int i = 0; i < cnt; i++) result[i] = max; return result; } こうかな?
509 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:10:48 ] >>508 もう少し短くまとめろよ・・・情けない
510 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:17:36 ] 2.0 でちゃんとやると508になる気がするが。 C# 3.0 使えという話ではある。
511 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:18:10 ] >508 大変ありがとうございます。 double, floatなどでもつかえるようにしてみようとおもいましたが ==, >の比較ができなく困ってしまいました。 class MathEx { public static T[] Maxs<T>(T[] arr) where T : IComparable { T max; int cnt; 省略 max = arr[0]; cnt = 1; for (int i = 1; i < arr.Length; i++) { if (arr[i] == max) cnt++; if (arr[i] > max) { max = arr[i]; cnt = 1; } } T[] result = new T[cnt]; 省略 } } もうちょい悩んでみます。
512 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:24:07 ] 質問者です。以下でなんとかいきそうでした。 if (arr[i].CompareTo(max) == 0) cnt++; if (arr[i].CompareTo(max) > 0)
513 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:24:08 ] >>511 .CompareTo
514 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:27:46 ] >513 ありがとうございます。このスレでもでてきたEachForや今回のMaxsのような独自の便利 関数は、みなさんどのように管理されてるんでしょうか??なにかアドバイスあればお願い します。
515 名前:508 mailto:sage [2008/10/05(日) 22:29:30 ] >>509 public static int[] Maxs(int[] arr) { int max = Int32.MinValue; int cnt = arr.Length == 0 ? 0 : 1; foreach(int value in arr) { if(value == max) cnt++; if(value > max) { max = value; cnt = 1; } } int[] result = new int[cnt]; for(int i = 0; i < cnt; i++) result[i] = max; return result; } うーん、こうかな…
516 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:37:19 ] >>515 まあ、まずまずだけど、ひとひねりほしいな 例えば再起処理を使うとかさ forでやるのはダサイ >>514 管理ってなんぞ?クラスで定義すればいいんじゃねーの?
517 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:40:25 ] こんなんで再帰使う方がアレだわ
518 名前:508 mailto:sage [2008/10/05(日) 22:41:45 ] よく見たらバグってんなこれ
519 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:55:13 ] >>514 適当にinternal staticなクラス作って入れとく よほど汎用的で便利なものでなければプロジェクトごとに書き捨て
520 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:58:44 ] 倹索とかで見つからなかった場合null帰すのとエラーはどっちがいいの
521 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:00:22 ] 場合による 「検索」という意味合いのメソッドなら例外は投げない方がいいかも
522 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:00:59 ] >>514 CodeProjectに登録
523 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:02:17 ] >>516 なんという関数型脳w
524 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:06:52 ] この問題結構奥深いな… 最小値、最大値のセットだけでなく 2番目、3番目、そして一番多くはいってる数とか だそうとして、 ヒストグラムに一旦入れて、やってみてたけど、朝までかかり そうなかんじなんで、つかーれたのでエロみてくる。
525 名前:516 mailto:sage [2008/10/05(日) 23:14:49 ] おまえらバカだから答え教えてやるよ まず、配列をList<>に入れる その後。Sort() あとは言わないでもわかるな?
526 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:18:27 ] >>521 そもそもnull使えない型とか…
527 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:25:43 ] null許容型もだめな型ってあるの? あるいはDictionary.TryGetValueみたいに可否と結果を別に表す方法もあるし。
528 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:26:18 ] >>525 List<>に入れるときはforを使わず再帰処理を使うんですね わかります
529 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:28:44 ] 数字なら最大値でも返えせば
530 名前:516 mailto:sage [2008/10/05(日) 23:31:09 ] 要素から最大値を抜き出す その要素に-1を代入 また、要素から最大値を抜き出す 最初に取り出した最大値より小さい場合は 唯一の最初のが最大値 あとはわかるな?
531 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:32:19 ] タイプつかってヒストグラムできた。が馬鹿でかいものになった。 歪度とかCV、σとか無意味につけてしまった。
532 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:37:56 ] ダメだ、俺の頭では、-1を代入のところがよくわからん。。。 整数だからマイナス数値ばっかのセットだってあるんだよね
533 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:42:09 ] これに速度の差とかあるですか? try { int index = 0; for(;;) { if(name == list[index++].name) { break; } } return list[index]; } catch(ArgumentOutOfRangeException) { return null; } //int count = list.Count; //for(int i = 0; count > i; i++) //{ // if(name == list[i].name) // { // return list[i]; // } //} //retnrn null;
534 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:45:08 ] >>533 foreachのほうが早い
535 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:52:39 ] 516は突っ込んだら負けなんだろうか 要素は全部0以上とか元の配列を破壊してもいいとか勝手な条件付けすぎ
536 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 23:53:23 ] >>530 最大値が負の数だったら?
537 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:00:40 ] エレガントな解はまだかーい?
538 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:08:52 ] >>535 >>536 屁理屈言うな あくまで>>505 の規格に即しただけ 誰が符号付整数なんて条件出したんだ?
539 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:11:54 ] 元々の質問は>>499 でそ
540 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:12:05 ] いや、499時点で負数出てきてるし…
541 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:18:21 ] 組み紐群ならったときに、エレガントな方法あったきがする。。。 が教科書すら全部研究室おいたまま10年以上たっとるな。
542 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:36:00 ] ApplicationExceptionじゃなくて ArgumentOutOfRangeExceptionとか InvalidOperationExceptionとか 中の人以外が勝手に使ってもいいの?
543 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:46:30 ] 真面目な話、いくらふらっとスレだからって、>>499 ってそんな悩む問題なのか? そっちの方が悩ましい問題だ。 こんなのベタにやればいいだけじゃん。 間違いなく(負の数について簡単に説明してやりさえすれば)小学生でも書けるコードにしか思えないんだが。
544 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:47:13 ] >>542 ApplicationExceptionは黒歴史になりました
545 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:51:22 ] >543 小学生でも書けるかもしれないが、万人が使いたくなるような 汎用的なもの、もしくは、ロジックがみためにも美しいもの をつくるのは、難しいぞ。 そんなに簡単に書けるコードだというのなら、手本をみせてほしい。 ヒストグラムに入れるという方法が私には、なるほど!と思わせてくれた。
546 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:57:52 ] >>545 何を言っているのか意味がわからん。 汎用的? 汎用的かどうかがコードの書法によって変わるとでも言うのか?w
547 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:02:27 ] 振る舞いが重要であり、内部の構成には興味ありませんね >>545 は概念から学べ
548 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:04:26 ] 証明の結果よりも、証明の仕方に興味があるタイプです。
549 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:06:42 ] なら数理論理学でも学べよ C#とは関係ない
550 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:13:31 ] >>548 それ自体はいいと思うんだが、だからといって三平方の定理レベルの話題で 悩むのはヤバいだろう。
551 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:17:20 ] 三平方の定理=立方体の体積の出し方だと思った俺の居場所は
552 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:22:04 ] 乱数なんてらんだむっぽいのがでりゃいいんだよ。 メルセンヌツイスターなんていらんわ。
553 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:25:34 ] C#ってなんでメソッドの引数でデフォルト値を廃止してしまったんですか(´・ω・`)?
554 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:16:15 ] >>553 メソッドオーバーロードで解決できるから この質問いつも出るからテンプレに入れないか?
555 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:18:06 ] >>554 C++もメソッドオーバーロードは実装してません?
556 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:21:44 ] 関数オーバーロードでデフォルト引数が表せるのだから デフォルト引数なんていう分かりにくいものは使わないようにしようという方針
557 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 03:12:09 ] C++作ったBjarneも多重定義があればデフォルト引数なんて構文糖、みたいなことを自著に書いていた気がする。
558 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 03:46:50 ] デフォルト引数の方が直感的じゃないですか? 多重定義もいいですけどコードが冗長になって保守・管理が面倒くさくなりそうですが・・・
559 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 08:35:26 ] デフォルト引数はオーバーロードで出来ても逆は無理だろ。その時点で どっちがなんて議論じたい意味なし それとシグニチャと呼び方もよろしくない、デフォルト引数は
560 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 08:49:34 ] ドキュメントの保守が面倒だったりはしないのかね ある機能の説明がオーバーロードされたメソッドごとにあるから 必然的に重複が多くなるし
561 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 09:13:27 ] デフォルト引数って、使う人が結局その値を理解する必要があるからね。 単に、無い、という方が安全だよね。
562 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:05:26 ] デフォルト引数無いのがC#の最大の欠点
563 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:16:24 ] 敢えて無くしたのに それを欠点と思ってるようじゃC#は向いてないよ
564 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:18:40 ] public void foo(bool bar = true){ ・・・ } で済むところを public void foo(){ foo(true); } public void foo(bool bar){ ・・・ } なんてダラダラ書くのは無駄すぎるな
565 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:29:43 ] オーバーライドすると途端にカオス
566 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:50:24 ] デフォルト引数は構造上、後ろから設定しなくてはならないし歯抜けができない。
567 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:42:12 ] 文句があるならC++使えばいいじゃん
568 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:43:36 ] C++なんかもっと欠点だらけだろ
569 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:06:49 ] usingとかDisposeを多用しなきゃならん状況になると C++ならもっと簡単に書けるのに、とか思ってしまう。
570 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:15:31 ] まそりゃ適材適所 C++の方が簡単に書けるならC++で書けばいい DllImportだってC++/CLIによるラップだってできるんだから
571 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:20:35 ] VisualC#2008を使っています。 C#をコンソールからコンパイルする方法を知りたいです。 csc filename.cs でよいらしいのですが、cscにパスが通っていないようです。 cドライブをcscで検索しても見つからないです。 どなたかご教示いただけないでしょうか。
572 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:25:26 ] スタートメニューに.NET 2.0 SDKみたいな項目あるだろ それのSDKコマンドプロンプト使え
573 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:43:18 ] >572 ないです。 Microsoft Visual C# 2008 Express Edition はあります。 普通の(WindowsXP標準の)コマンドプロンプトではだめなんですか?
574 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:50:10 ] C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe filename.cs コンパイラのパスは環境によって違うかも分からん もしくは環境変数PATHにC:\WINDOWS\Microsoft.NET\Framework\v3.5をついかして csc filename.cs とかシステム環境変数に入れたくなければ set PATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;%PATH% みたいなバッチファイルを用意してそれを使うとか
575 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:51:35 ] %windir%\Microsoft.NET\Framework\v?.? にあるからなあ、検索時Windowsのディレクトリは除外してたかな。
576 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:55:05 ] 標準のコマンドプロンプトからなら、vcvars32.batを実行すりゃいけるよ。 探してパス通ったとこにコピーしておいてみては。
577 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:57:50 ] >574、575 あ、ありました。Prorgam Fliesばっかり探してました。 Windowsの下だったのですか。 検索はシステムファイルは除いていたかもしれません。 ありがとうございました。
578 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 16:31:50 ] なぁ、クラスを作ってそこのメソッドで何らかの「閉じた」処理をさせるとき、 このメソッドは引数を取るようにすべきだと思う? それとも必要ならクラス内のフィールドやプロパティを読めばいいわけだから そもそもメソッドに引数なんて指定する必要も無いと思う?
579 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:12:14 ] どっちかじゃなくて、適切に使い分けろ
580 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:19:10 ] >>578 フィールドにあるものを利用するならわざわざ引数でやらなくてもいい ほかのクラスやプロジェクトで利用するようなメソッドなら引数などを考えないといけないけどね
581 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:29:09 ] くだらない質問ですみません VC#2008無料版をインストールしたのですが.netFramework SDKのインストールも必要ですか? それともVC#導入時に組み込まれていますか?
582 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:35:03 ] 大体は入ってる できればMSDN Library for Visual Studio 2008 SP1を 必要になったらMicrosoft Windows SDK for Windows Vistaを
583 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:41:17 ] >>582 ありがとう
584 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:44:06 ] >>580 メソッド間の引数のやりとりだけで実現可能な場合は わざわざフィールドにする必要ないだろうか? いまいち変数をフィールドで表現すべきか、メソッド間の引数のやりとりですます べきかの使い分けが分からないんだが。 フィールドってある意味一昔前のグローバル変数みたいなものだから 安易に多用するのは慎むべきだよな?
585 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:51:59 ] >>584 privateにしておけば問題ないはずだけど 多分、そのソースに必要な改良はクラスに分割することじゃないかな? 大部分のメソッドはそのフィールド変数を利用しないとするならば そのフィールド変数は混乱の元だし、そのフィールドを必要とする メソッドと一緒にクラス化するべき 引数を取るかどうかの判断は、そのメソッドをpublicにするかもしれない場合
586 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 18:58:12 ] >>585 裏を返せばそのクラスのフィールドを使わないメソッドは積極的に 違うクラスに分離していけ、ということ?
587 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:16:36 ] あん裏はやめて
588 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:18:29 ] っていうか、そもそも「普通は」メソッドの引数を省略する目的で フィールドを使いたい、などとは思わないはず。 もしそんな欲求に駆られるとしたら何か考え方が間違ってると思うよ。
589 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:11:24 ] フィールドあれ、と神は最初にいった
590 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:16:53 ] >>586 public void Swap(int a,int b) { //abの値をスワップ } ↑ならメソッドの機能を忘れてても直感的どういう動作をするのかわかる public void Swap() { //フィールド変数のa,bの値をスワップ } ↑これだとaとbはどういう型なのか、プログラム内でどういう意味を持つ変数なのか 毎回思い出したりしなければならない
591 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:20:50 ] メソッドもクラスもできるだけ小規模で完結した機能を持ったほうが のちのち見返した場合わかりやすい
592 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:22:45 ] Swap(ref int a, ref int b)なら分かるけど
593 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:24:00 ] >>592 どんな釣りだよ
594 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:39:56 ] i++;と++i;どっちが速い?
595 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 20:42:27 ] いっしょじゃね
596 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:01:18 ] 式の値を使わないならIL上で全く一緒
597 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:23:11 ] アクセスに統合Windows認証が必要なWebサイトがあり、それのテストを行うために HTTPリクエストを飛ばしてレスポンスを拾うテストツールを作っています。 デバッグ用なので、生のリクエスト文字列を送り、生のレスポンスを拾いたいため、 TcpClientを使って、HTTPヘッダもユーザが入力できるようにしました。 そこで困っているのですが、TcpClientでの統合Windows認証のやり方がわかりません。 TcpClientで統合Windows認証は可能でしょうか?可能であればどのようにすれば良いのでしょうか。 不可能であればHttpWebRequest等の代替手段を検討しなければ行けないのですが、 統合Windows認証が可能で、ヘッダも含めた生のHTTPリクエストを設定し、生のHTTPレスポンスを 取得できるクラスのようなものはありますでしょうか。 よろしくお願いします。
598 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:24:25 ] Class追加するときって1クラスにつき1つファイル(拡張子は .cs)を用意して そこに記述したほうがいい?それともMain()関数があるところの下につらつら クラスを追加していってもいいんだろうか?
599 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:29:40 ] 内部クラスでないかぎりは1クラス1ファイル
600 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:30:09 ] どこのJavaだよ
601 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:31:17 ] クラスが増えてくると、何がなんだかわからなくなるな UMLとか覚えたほうがいいのかねぇ
602 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:38:35 ] privateな内部クラスを使えば結構減らせる気がする 一つのクラス内でしか使わなくて外に見せる必要もない型って案外多いよ
603 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:49:26 ] >>594 前置
604 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:56:32 ] >>603 >>596
605 名前:デフォルトの名無しさん [2008/10/06(月) 22:00:11 ] 垂直方向のプログレスバーきぼんぬ
606 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:02:58 ] 気色悪い奴
607 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:04:27 ] >>599 どうも(*^ー゚)b >>600 Javaって一つのファイル内にクラスをつらつら書き連ねていくの?
608 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:17:23 ] >>602 それらをツリービューで表示されるから、どのクラスがどのクラスと関連があるのかとか わからなくなるんだよね 関連図をUML風に表示する機能があればいいんだけど プロエディションならあるんだっけ?
609 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:21:45 ] >>597 HttpWebRequest なら CredentialCache か何か使って NTLM 認証が可能。 TcpClient を使うなら、パケットキャプチャしてやりとりを確認すれ。 でもさー。Proxy 通れないケースが多いから、インターネット経由だと かなり厳しいと思うよ。
610 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:28:51 ] javaはpublicクラスは1ファイル1クラスで名前を合わせる必要があるが、 デフォルトスコープ(internal相当)のクラスはその限りではない。 関連のあるデフォルトスコープクラスはまとめてよい。 ただ、public enumをいちいち別ファイルにさせられるのはちとつらいね。 C#の場合はpublicなenumやらdelegateやらいろいろあるから分けてられないよ。
611 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:36:33 ] >>609 HttpWebRequestのCredentialCacheで認証して、 GetRequestStreamでStream取得してそこに書き込めばできそうですね。 ありがとうございます。 ちなみに、 >でもさー。Proxy 通れないケースが多いから、インターネット経由だと >かなり厳しいと思うよ。 これってTcpClientに対してのコメントですか?
612 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:36:33 ] そういえばネストした型をpublicやprotectedにしたらガイドライン違反になるんだっけ
613 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:37:45 ] C#をはじめるならこの本がお勧め、って感じの入門書ってありますか?
614 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:39:28 ] C#以外の経験の有無くらいは書け
615 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:41:19 ] 申し訳ない Cが文法なら大まかに覚えてる〜程度の素人です 他は無知です
616 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:47:11 ] >>594 preインクリメントとpostインクリメントのコストの違い ttp://d.hatena.ne.jp/Seasons/20080527/1211911965
617 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:50:28 ] >>616 スレタイぐらい見ろ
618 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:52:10 ] >>609 すいません、HttpWebRequestのGetRequestStreamの使い方を調べてみたんですが、 ヘッダも含めて、直接HTTPリクエストを書き込める訳では無いみたいですね。 デバッグ用なので、中のデータがどうなっているのかを見るのが最優先なのですが、 そういうリクエストの指定ってできないものでしょうか。
619 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:56:02 ] >>614 マイコミが初心者テキストとしてもリファレンスとしても使いやすい マイコミが理解できるレベルならMSDNで十分だろう
620 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 22:57:12 ] iを使わない場合最適化されるから一緒、つまり++iが速い。
621 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:00:01 ] 一緒なのに早い?
622 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:00:16 ] ImageListの全画像をまとめて1つのファイルに 書き出す(読み出す)方法はありますか?
623 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:03:03 ] >>621 「前置の時と」同じコードに最適化される
624 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:08:25 ] >>611 違う。NTLM 認証の制限。ケルベロスならいけるのかもしれんけど、 試してないからわからん。 >>618 つかさ、デバッグ用なら、なんでパケットキャプチャしないの?
625 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:09:10 ] >>622 どうまとめんのさ 複数フレームの画像ならTIFFとかGIF 単に詰め込むだけで良いなら適当なヘッダつけて突っ込んでけ
626 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:13:38 ] ZipPackageとか
627 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:16:08 ] 大きめのbmpオブジェクトを作って 任意の画像をそこに貼り付けて 適当に保存すればいいんじゃないの?
628 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:17:41 ] >>590 話はややずれるけど private int a, b; public void Swap(int a,int b) { this.a = a this.b = b } という書き方って推奨されている?本来は private int a, b; public void Swap(int _a,int _b) { a = _a b = _b } という書き方の方が正しいのかもしれないけど・・・
629 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:20:59 ] 上が推奨 下はガイドライン違反 下のように書くとすれば、フィールドのa,bの方に_を付ける 「クラス外から見える名前が最優先」
630 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:23:11 ] このスレに出てくるSwapは俺が思ってるのと全然違うんだが
631 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:27:42 ] >>624 クライアント側で想定したリクエストを送れているかということと、 あるリクエストを送ったときのサーバ側の動作をみたいので。 前者だけならパケットキャプチャで拾えば良いと思いますけど、 後者のために任意のリクエストを送れるツールが欲しいのです。
632 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:29:24 ] public static void Swap(ref int a, ref int b) { int tmp = a; a = b; b = tmp; }
633 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:29:50 ] >>631 IIS リソキに含まれてるツールでも使えばいいじゃん。
634 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:34:24 ] KeyedCollectionのGetKeyForItemは何を書けばいいの?
635 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:37:31 ] return item.Name;みたいに 要素自身が含むキーとして使える値を返す
636 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:38:45 ] >>631 興味本位で調べただけだから外してるかも知れん。 NegotiateStreamってクラスがあるらしい。(.Net2.0から)
637 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 23:41:42 ] >>675 どーも
638 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:06:23 ] Object a=new Object(); Object b=a; Object c=b; の場合、cにはaの値のアドレスのコピーを持っているbの値が代入されるということですか? つまり、cの値を得ようとすると、コンピュータは一旦bを経由してからaにたどり着くの? もしそうなら、コピーするほど、処理が重くなる?
639 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:13:03 ] 経由しないよ
640 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:13:06 ] ならない 全部同じ
641 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:22:10 ] こっちが分かり易い。 Object ^a = gcnew Object(); Object ^b = a; Object ^c = b;
642 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:24:45 ] >>638 ありきたりに、変数のアドレスってのを コインロッカーのキー番号に例えると、 Object a = new Object(); の時点で、ロッカーを1箇所確保、そのキー番号を a に代入。 仮に、たとえば、そのキー番号が 5 (適当)だったとすると、 Object b = a; // キー番号 5 を b にコピー Object c = b; // 同じく、5 を c にコピー という状態になる。 a.Property も b.Property も c.Property も、 どれも 5 というキー番号を経由して、同じロッカーを参照。
643 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:51:04 ] >>629 > 上が推奨 > 下はガイドライン違反 マジっすか( ´・ω・)! 上が推奨だったとは・・・ 毎回下の方式でやってて、 _a とか tmp_a とか名前考えるのが面倒だったんだよ。 上でいいならこれからジャンジャン this. を使わせてもらうよ
644 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:54:25 ] むしろ俺はメンバーには this. 必ず付ける派なんだが。
645 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:58:01 ] >>644 フィールドに毎回 this. つけるのって面倒だし見づらくない?
646 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:03:43 ] >>645 フィールドであることを区別する意味ではありだと思う。 それを _ つけて区別するくらいなら、this の方がタッチタイプしやすい。 アンダーバーとかの記号は打ちにくいのよね。
647 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:08:30 ] this付けるのはフィールドのみ? メソッドやプロパティにはどうする?
648 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:16:21 ] フィールドにアクセスするときにわざわざthis.を頭に付けることなんて推奨されてたか?
649 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:18:33 ] 俺はつける。
650 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:20:15 ] お前の話なんてどうでもいいんだ黙ってろ
651 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:21:14 ] >>638 もしその考え方が正しいとするならば、 Object a=new int[] {1,2,3}; Object b=a; Object a=new int[] {4,5,6}; このときにbの値を得ようとしてint[] {4,5,6}を取得することになるよ? んな馬鹿な話あるわけない。 つーか上記のテストコード書いて試したらすぐ確認とれるだろ。 なんでも質問するようではプログラミングなぞ向いていない。 これくらいの疑問なら自分の頭使って自力で解決できないとちと厳しいぞ。
652 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:24:48 ] >>639-642 ありがとうございます。 ずっと疑問だったんで気になってました 高級言語になるほど、内部がどうなってるか見通し利かないでうよねぇ
653 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:26:42 ] 全部付ける派の人は 継承されたメンバにアクセスするときもthis付けるのかな それともbase?
654 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:32:14 ] >>651 それの場合新しいインスタンスを代入しているんだから bの値を得ようとするわけないのはバカでもわかります というか、テストコードってどう書くんですか? cに入っているアドレスが、aの値のアドレスかどうかなんて あのプログラム動かしただけではわからないはずですけどね 参照の「コピー」というぐらいだから、コピー用に新しくメモリが割り当てられているのでは と思ったのが勘違いです。だから、cにはaの参照がコピーされたメモリへの参照のコピーと思ったしだいです
655 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:36:54 ] これは参照です的な目印がないからな〜
656 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:47:44 ] struct Vector { public double X, Y, Z; public double Length { get { return Math.Sqrt(X * X + Y * Y + Z * Z); } set { //現在の長さを取得 double lng = this.Length; //成分を変更する X *= value / lng; Y *= value / lng; Z *= value / lng; } } } サンプル用の自作ベクトル構造体 全部付ける派の人ってのはこれにも全部つけるの? return Math.Sqrt(this.X * this.X + this.Y * this.Y + this.Z * this.Z); とか激しくキモいんだが。 俺はプロパティとフィールドの違いを見るためにプロパティは付ける。 あとはローカル変数とフィールドの区別が必要なときにも当然付ける。 あとは付けない。
657 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:01:19 ] メソッドに参照渡しするときに、宣言だけしたパラメータを渡そうとすると int[] a; HogeMethod( a ); 「未割り当てのローカル変数 'a が使用されました。」 てなエラーが返されてしまう。 int[] a = null; HogeMethod( a ); とすれば問題なくコンパイルは通るんだが、これって汚くない? わざわざnullを割り当ててから参照渡しするのはどうも無駄なステップを 踏まされているように思えて仕方がないんだが。上のようなスマートな 方法も通用して然るべきだと思わん?
658 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:09:10 ] >>657 こういう話じゃないの? void HogeMethod(out int [] a) { a = new int [] { 1, 2, 3 }; } int [] a; HogeMethod(out a);
659 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:10:38 ] 最近Javaから移ってきたのですが、構造体の使い道はこんなので合ってますか? バッチ大量データ登録時にトランザクション単位でエンティティビーン的な構造体に値を放り込む →参照渡しでクエリ実行 →構造体はトランザクション単位でfinalyでnull設定 →パフォーマンスアップな上にメモリ節約できて(゜Д゜)ウマー 現状エンティティビーンクラスにclearメソッド用意してインスタンス使い回してますが、果たして、、
660 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:15:18 ] >>659 いろいろ勘違いしている。Javaと同じでほとんどのケースでクラスを使うことになる。
661 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:19:57 ] >>658 ああ、出力パラメータを指定するという方法もあったね。 でもメソッドを呼び出すときも > HogeMethod(out a); "out"キーワードを付けないといけないんだよね。 呼び出すときくらい"out"キーワードは無視させてくれてもいいと思うんだが。
662 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:22:57 ] >>659 .NET Framework 開発者ガイド クラスまたは構造体の選択 msdn.microsoft.com/ja-jp/library/ms229017.aspx
663 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:28:59 ] 660 662 ご教示ありがとうございます。 構造体はあまり使わない的な文献はよく見かけたのですが、初見なものでなんか使い道あるのでは、と考えましたが、まだ修行がたりないようでしたね、、。
664 名前:659 mailto:sage [2008/10/07(火) 03:50:03 ] 連投すみません。 659の問題点は ・エンティティビーンで16バイト以下は現実的でない ・スコープ抜けたら勝手に解放されるのでnull設定は不要 ・パフォーマンスとはそもそも関係ない で合ってますでしょうか?
665 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 06:13:16 ] >>633 WFetchでしたっけ? あれはSJISのみ対応だったかと思うのですが。 UTF8なのです
666 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 07:23:11 ] >>665 いろいろと制約が厳しいな。 HttpWebRequest の AddHeader でだめってことは、標準ヘッダを ごにょごにょしたい、ってことかな? リフレクションで一部書き換えられたようには思うけど、変に細かい技を 使うより、Tcp でちくちくやるのがよさげだね。
667 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:34:17 ] >>661 ダメ。 メソッド呼びだした先で勝手に値が書き換えられるってのは嫌われる。 C++ でも、参照渡しがあるにもかかわらず、const 参照しか使わないって人多い。 出力パラメータとして参照渡ししたいときはポインタを使う。
668 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:41:53 ] >>656 俺は全部付ける。 MS のガイドラインだと、特に this. つけるとはなってなかった気が。 でも、MS のソースコードの品質チェックツール通すと this. 付いてないと警告出た気が。
669 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:49:17 ] あっ、ごめん、668 の最後の行は気のせいだった。 今やっとツールの名前と使い方思い出して試してみたけど、 付けても付けなくても文句言われない。 ちなみに、StyleCop ってやつ。 code.msdn.microsoft.com/sourceanalysis
670 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:56:25 ] thisが必要なとこ以外にばらまかれてると かえって見づらい気がするのでつけないな
671 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:57:47 ] .NET的にマウスホイールをカーソル直下のコントロールに送るのって、プロパティとかあるの? MouseEnterでフォーカス移す以外であれば教えて(涙。
672 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:58:20 ] >>661 むしろ無いと怖いでしょ >>664 >null 基本的に値型にnullは入れられません Nullableを利用するとNullにできるけど… >パフォーマンス GCのスキャンコストが減ります 用途によってはボクシング/アンボクシングでかえって遅くなることもあります と、これ以上はよくわからん パス
673 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:04:56 ] >>661 そういう意味で参照渡しを前提とするパラメータには必ずrefかoutか付けないと コンパイルが通らないようにすればいいと思ってるんだがC#はそうはなってない んだよな。 値型の変数を参照渡しするときはoutなりrefなりつけないといけないが、参照型 の値を参照渡しするときは普通の変数のように渡せてしまう。 これじゃあとでコードを見たとき、この部分は参照渡しか値渡しなのか一目で 分からない。参照型の変数でも参照渡しするときはoutかrefを必須にすれば よかったと思うんだがどうだろうか?
674 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:13:23 ] >>673 参照型もref/outが無ければ値渡し。参照渡しするならref/outが必要。 それに値型のなかの参照型メンバの値を変更とか考えると意味が無い。
675 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:28:12 ] C#の名称ってどうやって付けてる?どうにもVCとかVBの思考が抜けないんだが 自由なのは分かってるが一般的な付け方がしたいです 関数、プロパティ、名前空間、クラス名、定数は大文字から始める MainForm、UpdateMenbers、LineMax コントロールはプレフィックス(?)を付ける frmMain、btnCancel ローカル変数は小文字から caption、changed 引数はローカル変数と同名を避けるためアンダーバーから _caption 大体こんな感じでいいのかな・・・ あと、引数付きプロパティが使えないが、Get〜とかSet〜ってやらないで、 インデクサ(?)付きクラスでも返した方がC#っぽい?
676 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:45:44 ] >>674 > 参照型もref/outが無ければ値渡し。 え( ´・ω・)?
677 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:50:08 ] >>675 msdn.microsoft.com/ja-jp/library/ms229002 (VS.80).aspx
678 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:52:04 ] 参照の値渡し、参照の参照渡しといいたいのだろう。 その辺はCでもいっしょっしょ。 ポインタの指してる中身を書き換えるだけならポインタをそのまま渡せばいいが、 ポインタそのものを書き換え戻したいなら、ポインタのポインタを渡さないといけない。
679 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:59:31 ] >>678 ああ、そういう意味か。 >>673 で言いたかったことはメソッドに値を渡すとき、その値をコピーして 元の値は書き換えないのか、それとも書き換えるのかがメソッドの宣言を 見ただけでは識別しにくいってことなんだよね。 当然この型は値型だから渡しても書き換えされないはず、この型は参照型 だから渡せば書き換えられるはず、という知識を持っておけば分かるけど、 複雑なコードになるとそこらへんをうっかり間違えてしまいトラブルの元に なるんじゃないかなと。 だから参照渡しをするときは値型だけでなく参照型の変数でもref/outを 必須にすればよかったのにと思ったわけ。
680 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:01:58 ] え?
681 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:04:03 ] 参照型の値渡しにref付けるならば 参照の参照渡しだとrefrefキーワードが必要になるな
682 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:08:48 ] >>679 普通にref/outしたい時に困るんじゃない?
683 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:14:15 ] >>681 参照型の実体(格納してる変数は単なるメモリの番地)を知ってる人には その通りだと思うんだが、そういうことを利用者に意識させないのがC#の 利点であることを考えると値型だろうと参照型だろうと参照渡しするときは ref/outを必須にするように決めた方がいいと思うんだが。 そして参照型をref/out無しでメソッドに渡したら、その参照型のコピーが メソッドに渡されるようにすればいい。つまりref/outなしで参照型の値を メソッドに渡して書き換えられても、オリジナルの値にはなんら影響が 出ないようにすると。 これでユーザーがポインタを意識する必要は100%無くなる。
684 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:22:05 ] それどうみてもただの値型
685 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:24:26 ] むしろパフォーマンスを意識してポインタを知ることになるんじゃね? refだらけになりそうだ
686 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:24:37 ] 正直その主張はconstマンセーにしか読めない。
687 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:25:14 ] なんか初心者が好きなことを書き込むスレになってきてないか
688 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:33:32 ] > 値型だろうと参照型だろうと参照渡しするときはref/outを必須 C#は実際そう。参照渡しの語義を確認したほうがいい ttp://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0#.E5.8F.82.E7.85.A7.E6.B8.A1.E3.81.97 他の言語のスレでもこういう展開になることが多いんだけど 元凶はどこにあるんだろうね・・・
689 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:34:56 ] 元凶はC++だろ。早く無くなればいいのに・・・
690 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:45:11 ] >>686 できるよ。 以上。 ↓次の方どうぞ
691 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:13:11 ] ↑なんでそんなに馬鹿なんですか?
692 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:32:09 ] >>正直その主張はconstマンセーにしか読めない。 できるよ。 意味不…
693 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:33:36 ] やっと*から抜け出せたのに今度はrefかよ それだったら、*のほうがマシだわ
694 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:35:21 ] >>688 数値もポインタもいずれも「値」がメソッドに渡される、という意味ではC#は「値渡し」 になるんだろうけど数値が渡されるのかポインタが渡されるのかは型によって まちまちなわけで、その違いをもっとユーザーに意識させる仕組みが組み込まれて 然るべきじゃないかなと言ったわけよ。
695 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:36:31 ] どうやって参照型を自動でコピーするんだよ フィールド全部再帰的になめるのか? それでも駄目だけど そしてrefだらけになると あほかいな
696 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:38:48 ] あと文字列(string)は参照型にもかかわらずメソッドに渡すときは全く同じ 文字列がコピーされるからメソッド内でいくらいじくってもオリジナルの 文字列が変更されることはない。 でも文字列の配列(string[])をメソッドに渡すとメソッド内での操作が オリジナルの文字列の配列にも反映される。 ここらへんのルールの違いをもっと明確にユーザーに伝わるような仕組みを 構築すべきじゃないかな?特にC#は後発の言語なんだから。
697 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:45:54 ] そうじゃないよ
698 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:46:05 ] >>696 stringは確かに不変オブジェクト扱いだけどこの場合何の関係も無いよ 単に自分自身を操作するメソッド/プロパティが無いだけなんだから リフレクションで値書き換えればちゃんと呼び出し元でも変更される
699 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:49:15 ] 言いたいことをまとめると、 この型はメソッドに渡すと変更を受けるけど この型はメソッドでいじくり回しても一切の変更を受けない。 こういう型が区別も無く平然と並んでいるのがユーザーの混乱を招くってことよ。 どれが参照型でどれが値型かなんて言語ごとに違って当然なんだから それを曖昧なままごちゃまぜにしていればいつか間違いが発生する。 言語の進化というのはそういううっかりミスをなくす方向で発展していく必要が あると思うんだよ。
700 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 13:56:00 ] で、変更しないならconstつけることにした言語があったよね
701 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:00:00 ] 型がimmutableかmutableかをその型の前提知識無しに コードを見ただけで一発で判定可能にするってことか?
702 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:06:57 ] >>699 値型的な扱いはintとstringだけなんだから これを覚えるのに大した労力も必要としないだろハゲ
703 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:15:01 ] どうも >>651 以降、 アフォが湧いてるようじゃのう…
704 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:17:16 ] C#だけ扱うならな。 だが現実にはC++やJava、VisualBasicと多岐にわたる言語を同時に扱うのが普通だろ。 記憶だけに頼る方式は後々重大なエラーを招く。 「てっきりstring型は呼び出したメソッド先での変更が反映されるものだと思っていました」 そう言いながら打ち上げロケットを派手に爆発させるミスが発生するかもしれない。
705 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:31:50 ] どうにも手がつけられない
706 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 15:14:53 ] >>699 参照型を含む値型の扱いはどうする?
707 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 15:17:57 ] 一日でレス進んでると思ったら(ry。 Stringでも他の参照型でも動作は共通してると思うが、>704の頭の中ではどうなってるんかが疑問だな・・。 Stringクラスの編集系メソッドはすべて新たなインスタンスを返してくるわけで、実体の操作は出来ないんだが。 つまり、参照型であっても、値渡しされたStringメソッドがその先で変更されることがありえないので誤解のしようがない。 ref指定した場合、「メソッド内での値の変更=新しいインスタンスを参照」になるだけ。一貫してると思うが。
708 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 15:21:04 ] Stringメソッドがその先で→Stringがその先のメソッドで
709 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 15:34:56 ] ポインタ難しいスレにそっくりさんがいたのを思い出した そういう人にはサンプルコード書かせると言い逃れできなくていいかもね
710 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 15:43:42 ] >>707 他の言語のString型も同じだと言い切れるかな? そしてもし他の言語のString型とC#のString型が違ったらどうするんだ? という疑問を投げかけられて、 「そりゃそれぞれ違いを覚えるしかない」 と答えたらその時点でヒューマンエラーが紛れ込む余地が誕生したと思うべき。 近代の言語が、とくにC#がこの手のヒューマンエラーを極力排除することを 念頭に新たに作り直されたことを考えるとこの点に置いてC#は不十分な言語と 言わざるを得ない。 見方を変えればいまだにC/C++時代のポインタを引きずっているとも言える。
711 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 15:47:37 ] 何のためのCTS(共通型システム)だと思ってんだ
712 名前:この話題にも飽きてきたが mailto:sage [2008/10/07(火) 16:23:06 ] 正直その程度のリファレンスも見ない奴がマルチリンガル気取るのもどうかと思うけど(IntelliSenceで戻り値見るだけでも気付くはず)、 言語間の実装の違いや動作の相違は、そもそも無いほうがおかしい。 それより、言語内で一貫した基準があって、すべてのクラスがそれに則っていることが言語としては第一だろ。 C#の場合、引数は標準で値渡し、ref・outで参照渡し。それがすべて。そしてStringは参照型。 それを踏まえたうえで値渡しのStringが中で変更されると思うのは、参照のイメージが確立していないか、 Stringのメンバの使い方が分かってないかのどちらかじゃないか? 前者はマとして未熟。後者はウッカリというより、これから使うライブラリのリファレンスも見ない向こう見ずに思える。 皆、長文スマンな。
713 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 16:30:19 ] stringが参照型の値渡しなら string[]はどうなるんだ?
714 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 16:32:48 ] stringは参照型の値渡し string[]は参照型の値渡し stringはmutable string[]はimmutable
715 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 16:33:31 ] 反対だ stringはimmutable string[]はmutable
716 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:10:42 ] class TaskMem { public IntPtr Ptr; ~TaskMem() { Marshal.FreeCoTaskMem(this.Ptr); } } [DllImport("hoge.dll")] static extern int Foo(out IntPtr ptr); // int Foo(void** ptr); TaskMem mem = new TaskMem(); Foo(out mem.Ptr); とした場合、Fooから返って来てmem.Ptrに格納される間に例外が起きない事は保証されているのでしょうか? それともCERで保護しないと駄目ですか?
717 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:17:25 ] >>714 string[]を値渡しするのとref付けて参照渡しするのとで、結果は違ってくる? どちらもメソッドでの変更が反映されるだけで動作は全く同じになると思うんだが。
718 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:23:26 ] >>717 参照渡しと値渡しの違い分かってる?
719 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:26:11 ] わかってないだろうな。 >>717 void f1(string[] a){ a = new []{"a","b"}; } void f2(ref string[] a){ a = new []{"a","b"}; } f1、f2が上のように定義されているとき、 string[] b = null; f1(b); // bはnullのまま f2(ref b); // bは{"a","b"}になる
720 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:27:13 ] >>717 public static void hoge(string[] s) { s = new[] { "c", "d" }; } public static void hage(ref string[] s) { s = new[] { "e", "f" }; } static void Main(string[] args) { string[] s = { "a", "b" }; Console.WriteLine("{0} {1}", s[0], s[1]); hoge(s); Console.WriteLine("{0} {1}", s[0], s[1]); hage(ref s); Console.WriteLine("{0} {1}", s[0], s[1]); }
721 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:41:25 ] >>719 > void f1(string[] a){ a = new []{"a","b"}; } > void f2(ref string[] a){ a = new []{"a","b"}; } new演算子を使わずに void f1(string[] a){ a = {"a","b"}; } void f2(ref string[] a){ a = {"a","b"}; } だったらどちらも結果は bは{"a","b"} にならない?
722 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:45:59 ] >>721 コンパイルエラー
723 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:51:00 ] >>722 いや、通ると思うんすけど・・・
724 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:57:10 ] はぁぁあ?
725 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:57:41 ] string[] a = { "a", "b" }; //おk string[] b; b = { "a", "b" }; //だめ new[] を省略できるのは変数宣言の時だけだな ちゃんとコンパイルして試してから言ってるのか?
726 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:58:54 ] どのバージョンで通った?
727 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:00:41 ] それにnew[]を省略できるのは構文糖みたいなもんで 入れたり入れなかったりで挙動が変わるなんてこたあないんじゃないかな
728 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:04:31 ] なんかねえ 初心者を装ったものすごく巧妙な釣り師というか荒らしが常駐してる気がする
729 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:08:58 ] 該当人物は置いといて、どこまでが初心者として受け入れられるかって難しいぞ 質問するほうだって、これは知ってます、それも知ってますって一々言うわけに行かないし
730 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:10:25 ] virtualは遅い?
731 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:11:06 ] >>716 SafeHandle使えば悩む必要なかろ outなら大丈夫だったとは思うが覚えてない
732 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:11:54 ] まあなんだ、初心者はstructやref/outには手を出さないことだね
733 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:42:37 ] しかし、平日の昼間からこんなところでレスしてる人ってどういう人なんだろ。 いや別に他意(<=なぜか変換できない)はないんだけど。
734 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:49:45 ] 職場での息抜きに。 自由な職場っていいよね。
735 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:53:00 ] モノさえ仕上げりゃエロゲしようがアニソン垂れ流そうが自由よ。
736 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:07:42 ] >>732 鉄は熱いうちに打てじゃないが、structとemunは若いうちから慣れておいた方がいい。 なまじstructやemunを使わなくてもプログラムが書けてしまうだけに。
737 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:12:19 ] classは案外早い GCも含めて わざわざstructを使う意義はほとんどない
738 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:15:11 ] ま、よほどタイトな処理内で使う場合じゃないと大して変わらんわな
739 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:16:56 ] 無論状況によってはかなり変わるが、大抵は使い分けるデメリットのが大きい
740 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:27:40 ] >>737 ref/out使わずに結果を取り出したいならstructも少しは役に立つんでね?
741 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:33:34 ] >>739 言ってる意味が分からない。 いくらふらっとスレでもトンデモなことを言いすぎだろう。 使い分けないデメリット、なら話もわかるが使い分けるデメリットってどういう意味だよ。 あるいはどちらでも用が足りる用途なら迷わずクラスを選べ、 というのなら正しいし理解もできる。 だが構造体に存在意義がないかのような意見はおかしい。
742 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:55:10 ] 俺は>>739 じゃないが「それがstructかどうか」を意識しなきゃならなくなるのは苦痛だ PointやRectangleをいちいちnewしなきゃならんのは実に面倒くさい しかしform.Location.X = 100;みたいな記述を可能にするためには Pointに親への参照が必要になってしまいかねないんだよな なかなか難しい
743 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:57:51 ] enumイラネってWin32SDKみたいな定数の溢れたカオスワールドがイイって事?
744 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:06:08 ] つーかお前らほどのアニソンマスターなら放送される曲全て持ってるんだろ 公共ラジオで丸一日垂れ流しする意味ねーじゃん
745 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:06:58 ] >>742 まあPointにイベント(XChanged)を追加することでも可能だと思うけどね。
746 名前:デフォルトの名無しさん [2008/10/07(火) 20:28:06 ] どとねとの構造体ってinteropでAPIとのやりとりのためにあえて残した もんだと思ってた。win form のrect とかpointが構造体なのはwin32の ラッパだからしかたねーんだなと 勝手に思っていた…。
747 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:31:52 ] 書き方が悪かったが、使い分けなきゃならないデメリットというのか、 構造体特有の注意点とか意識しないといけないとか、 そういう点をデメリットって言ったんだよ。
748 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:37:29 ] 巨大な構造体使う奴とか見たもんでな。 基本的に使うな、の方が無難なことが多い。 ちゃんと分かってる奴だけが使うならいいが。
749 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:40:18 ] メソッドいらない場合structだと思、
750 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:42:00 ] >>749 Cから来た人たちが引っかかる罠なんだよね。 ユーザー定義の値型にstructのキーワードを当てはめたのが失敗だったといわれている。
751 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:05:16 ] 全然話の流れが分かってないけど、こういう使い方って問題無い? こうしろよってのがあれば教えて下さい。 private List<Data> list = new List<Data>(); struct Data { public string Key; public string Value; }
752 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:07:46 ] >>750 そんな穴に落ちる奴はいないだろ。 入門者を斜め読みしただけで別物と普通は分かるよ。 「参照」って言葉の意味がC++と似てるけど別物だったりするのが落とし穴というのならわかるが、 構造体で引っかかる人間なんていないと思う。
753 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:10:10 ] struct Data { public readonly string Key; public readonly string Value; } こうすべきじゃないかな クラスまたは構造体の選択 msdn.microsoft.com/ja-jp/library/ms229017.aspx
754 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:15:23 ] リンク先の「変更できない。」という特性を守る場合 KeyやValueの値が可変なら、というか、readonlyだと駄目な状況では 構造体じゃなくクラスを使うべきなんですかね。 Listにクラスを放り込む場合どう書けば???
755 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:25:26 ] class Data { public string Key; public string Value; } こんな感じのクラスを用意して Data data = new Data(); で初期化して使う感じでしょうか?
756 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:31:58 ] ジェネリックなコレクションにstructを使う場合の注意としては、 IEquatable<T>.Equals(T o)と、大小比較する場合はIComparable<T>.CompareTo(T o)を実装すること。 そうしないと比較のたびにボクシングが頻発して悲惨なことになる。 もっとも基本配列であるListの場合はあまり問題ない。 実装しないなら非ジェネリックのコレクションの方が効率がいい。 登録時ボクシングは1回だけですむ。
757 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:51:59 ] >>745 そんなことしたら使い方によってはおっそろしく遅くなるよ
758 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:58:05 ] >>755 [TypeConverter(typeof(Design.DataConverter))] struct Data : IEquatable<Data> { public string Key { get; set; } public string Value { get; set; } public override int GetHashCode() {...} public override bool Equals(object obj) {...} public bool Equals(Data alt) { ... } ... } namespace Design { class DataConverter : TypeConverter { ... } }
759 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 22:00:44 ] >>758 構造体に自動プロパティを使うのは良くない コンストラクタ書けなくなる
760 名前:758 mailto:sage [2008/10/07(火) 22:01:42 ] そいやそうだな、ごめん
761 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 22:06:00 ] >>757 さすがに意味がわからない突っ込みだ。 そもそもパフォーマンスが重要な場面に適合的なケースの話はしてないと思うんだけど。
762 名前:758 mailto:sage [2008/10/07(火) 22:07:04 ] ん、いや、>>759 は正確じゃないな こうすれば書ける。自動プロパティやめとけは同意 struct Data { public Data() : this() { ... } }
763 名前:758 mailto:sage [2008/10/07(火) 22:08:37 ] ああもう、 struct Data { public Data(string key, string value) : this() {...} } な
764 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 23:28:02 ] >>751 って以下と変わらない気がするのですが、それでも >>763 みたいにするべきなのでしょうか。 private List<KeyValuePair<string, string>> MainList = new List<KeyValuePair<string, string>>(); そもそもがstring同士なので大小比較なども行わないし、私の頭では どうするのが一番良いのかイマイチ理解できない…orz
765 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 23:46:17 ] >>764 ・IL 上はだいぶ変わる(バイナリ互換の問題) メソッドコールかフィールドアクセスになる コード互換で言えば、ref で渡せるかどうか程度かな ・リフレクションもだいぶ変わる(バインディングで問題) var props = TypeDescriptor.GetProperties(typeof(Data)); var prop = props["Key"]; ・パフォーマンスかなと考えてもメンバ string だし まとめると、少しでも変更に耐性のあるプロパティにしとけ みたいな。というかフィールドにする意味ないなぁと フィールドのほうが「あえて」立場なんだよ要するに >>758 の例は struct 作るときに標準的にやっといたほうが いい処理が含まれてる実装ですなただの KeyValuePair 使うかどうかはそれ(表現したい対象)が KeyValuePair の機能しか将来的にも持たないんなら それでいいんじゃね
766 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:04:34 ] >>719 で引数がList<T>にしてみたんだけど void hoge( ref List<int> a ) { List<int> a = new List<int>(); }
767 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:05:54 ] 失礼。 void hoge( ref List<int> a ) { List<int> a = new List<int>(); } としてコンパイルしてみたところ ローカルの変数 'a' をこのスコープで宣言することはできません。 これは、'親またはカレント' スコープで別の意味を持つ 'a' の意味が 変更されるのを避けるためです。 というエラーが返されてしまった。 ref→out に変更しても同じエラーが返される。 なにかまずいことでもしちゃったかな?
768 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:08:21 ] 参照渡しが値渡しがどうのとか考えるレベルにすら達してないね ローカル変数の宣言になっちゃってる
769 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:09:12 ] >>767 { a = new List<int>(); }
770 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:10:34 ] >>769 おっ、サンクス(;^ω^)ノシ >>768 (´;ω;`)ブワッ
771 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:12:46 ] >>768 ちょっと言い訳がましいことを言わせてもらうとList<T>があまりにも最新の技術なもんで 手持ちの参考書に一言も触れられてないのね。暗中模索状態だからつまらないところで ミスしてしまう(;^ω^) ちなみに a = new List<int>(); ↑ この()の部分ってコンストラクタの()の名残という認識でok?
772 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:14:35 ] 名残っていうか引数なしのコンストラクタの呼び出しそのもの
773 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:18:42 ] List<int>もintもStringBuilderも全部型の名前 new StringBuilder() new List<int>() ほら同じ
774 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:22:10 ] List<T>ってC#の短い歴史から考えると全然最新じゃないんだけど
775 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:26:18 ] C#2.0が出たのって4年くらい前だっけ
776 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:27:03 ] >>771 ナカーマ 5-6年前に独習C#買って放置→最近また始めたら ジェネリクスやらLINQやらとんでもないことになっててもうね
777 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:32:32 ] >>773 int a = new int(); string b = new string(); もokだっけ?
778 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:34:20 ] >>777 stringは引数なしコンストラクタが存在しないので無理だな
779 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:44:52 ] FileNotFoundExceptionをToString()で書き出すと System.IO.FileNotFoundException: 指定されたファイルが見つかりません。 ファイル名 'image\hoge.png' です。 デバッガ上での実行だと、↑みたいにFileNameが出力されるのに 実行ファイルを直接開くと無視されるのね。そんなものなの?
780 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:45:44 ] >>771 言い訳が言い訳になってないのが滑稽。
781 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:52:39 ] >>790 自分でFileName出力すれば?
782 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 00:55:00 ] >>779 Windowsプロンプトから起動してみたけど そんな感じのメッセージと一緒にスタックトレースが表示されるよ
783 名前:764 mailto:sage [2008/10/08(水) 07:50:28 ] >>765 >>764 の書き方だと全然>>751 みたいな使い方は出来ないですね。 KeyValuePairって初期化すれば値を割り当てられると思ってました。 >>764 は結局>>753 と同じだという事が分かりました。 クラスにすると上手く動かないし、>>763 を参考にしてみます。
784 名前:783 mailto:sage [2008/10/08(水) 08:46:30 ] 何度もすいません。 最終的に、クラスにしてKey、Valueのプロパティを持ち、その都度 インスタンスを生成する事で上手くいきました。 今の使い方ではあまりパフォーマンスにも影響は無さそうですが 今後の事を考えてクラスで運用します。 また、値型、参照型の違いが何となく分かった気がします。 有り難う御座いました。
785 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 10:53:02 ] C#ってJAVAと同じなの?
786 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 10:54:25 ] 釣られないぞ
787 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:30:38 ] 釣られてみる あえて言おう!違うと! まず名前が違う!これだけでじゅうぶんだ。
788 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:34:19 ] 君と私は名前が違うけど同じ人間だよねえ。
789 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:34:30 ] JavaとJ++とJ#が同じかどうかとなると哲学なのだが
790 名前:タイマーについて [2008/10/08(水) 11:35:13 ] 質問です。タイマーについてですが、普通のWindows.Formsのタイマーを使って います。 タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編) − @IT www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html ここに書いてあるようなバグはFramework2.0以降は解決されているようでしたが、 タイムアップのイベントが立つたびに、I/Oのメモリー消費がちびっとずつ増えていく ようなのですが、これはバグなのでしょうか。
791 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:35:37 ] 一括りにすればC#もJAVAもプログラム
792 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:54:12 ] public PerformanceCounterCategory pcc = new PerformanceCounterCategory("LogicalDisk"); private void GetLogicalDiskRead() { this.listView1.Items.Clear(); foreach (string s in pcc.GetInstanceNames()) { foreach (PerformanceCounter p in pcc.GetCounters(s)) { if (p.CounterName == "Disk Read Bytes/sec" && p.InstanceName != "_Total") { this.listView1.Items.Add(new ListViewItem(new string[]{ p.CategoryName, p.CounterName, p.InstanceName, p.NextValue().ToString() })); } } } } 論理ディスクのReadを調べるためにこんなコードを書いたのですが、 エラーも何も無く実行できるものの値がずっと0になってしまいます。 これは何が問題なんでしょうか?
793 名前:792 mailto:sage [2008/10/08(水) 11:57:49 ] 書き忘れです。タイマーで1秒毎の更新にしています。 private void timer1_Tick(object sender, EventArgs e) { GetLogicalDiskInfo(); }
794 名前:デフォルトの名無しさん [2008/10/08(水) 12:53:59 ] >>790 失礼しました、これはタイマーのTickイベントの中で、フォルダの存在を チェックしていて発生していたようです。メモリの消費量がイベントのたび に0〜5バイトぐらいずつ増えていくのでなんだろうと思いましたが、タイマー とは無関係でした。すみません。
795 名前:790 [2008/10/08(水) 12:58:04 ] >>794 ただ、Directory.Exists(_strDirectory)これを行うたびにI/Oのメモリが 消費されるというのは正常なのでしょうか?
796 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:07:58 ] >>792 カウンタ毎回取得してたら駄目だろ 欲しいPerformanceCounterを保持しておく
797 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:13:48 ] C#とJAVAってできることはほぼ同じなの? 動く環境も。
798 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:13:50 ] >>795 「I/Oのメモリ」って何?
799 名前:デフォルトの名無しさん [2008/10/08(水) 13:41:01 ] 質問 VC++みたいな独自のイベントってどうやって実装するんですか?。 VC++ならWM_USER以下にならない様な番号ふってWM_HAGEとか定義して afx_msgにつけ加え定義 MESSAGE_MAPにつけ加えて て感じだったと思うんですが C#ではどうやるのでしょうか
800 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:50:58 ] 取りあえずヘルプでイベントの項目読め
801 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:06:27 ] WindowProc直接いじるならこれかな。 ttp://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html
802 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:23:29 ] >>796 色々と書き直してみてとりあえず動くようにはなったんですが 我ながら何をやってるのかよくわかって無いですorz 変なことやってないですかね? private List<PerformanceCounter> prfList = new List<PerformanceCounter>(); private void Form1_Load(object sender, EventArgs e){ SetReadInfo(); GetLogicalDiskRead2(); } private void SetReadInfo(){ foreach(string s in pcc.GetInstanceNames()) { if (s != "_Total"){ PerformanceCounter p = new PerformanceCounter("LogicalDisk", "Disk Read Bytes/sec", s); prfList.Add(p); } } } private void GetLogicalDiskRead2(){ this.listView1.Items.Clear(); foreach (PerformanceCounter x in prfList){ this.listView1.Items.Add(new ListViewItem(new string[]{ x.CategoryName, x.CounterName, x.InstanceName, ((long)x.NextValue()).ToString() })); } }
803 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 16:32:30 ] つぎのようなメソッドを定義し、(処理1)でエラーが発生したときただちに関数を抜け出すためには どんな方法を採用するのが推奨されていますか?GOTO文で関数の終わりの方まで一気に 飛ばすのはあまり推奨された方法ではないと聞きました。 void Hoge() { ・・・・ tyr{(処理1)} catch{・・・} tyr{(処理2)} catch{・・・} ・・・ }
804 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 16:35:03 ] >>803 return;
805 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 16:37:46 ] >>802 何やってるか分からないてのが一番まずいな >>803 Microsoft曰く「内部実装なんてどう書こうが知らね勝手にしろ」
806 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 16:39:41 ] >>804 こんな感じでいいでしょうか? void Hoge() { ・・・・ tyr{(処理1)} catch{・・・; return;} tyr{(処理2)} catch{・・・; return;} ・・・ }
807 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 16:46:29 ] >>806 catch{ ... ; throw ...}という手もある
808 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 17:52:56 ] C#ってgoto文が実は生き残ってたのかよw
809 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:02:31 ] >>808 無知なのに上から目線ワロタw
810 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:22:24 ] 下向き限定なら絶対ダメってほどでもないでそ
811 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:24:07 ] switchで使えるのはいけるかもと思った。まだ使ってないけど。
812 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:32:26 ] gotoをなくしても break ラベル とか別の文法が増えるだけ。 もう大人なんだからgotoの扱いは自分で責任をもてるだろってこと。 こういう考えでgotoを残してる言語はわりとある。
813 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:33:41 ] >>807 throw・・・例外を投げるメソッドでしたっけ? これをそこで使うことにはどういう意味があるんですか?
814 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:40:48 ] 例外投げればとにかく処理は呼び出し元に戻せる 場合によるけど何も考えずreturnよりは適切かも
815 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:45:33 ] >>814 > 例外投げればとにかく処理は呼び出し元に戻せる void Hoge()を呼び出した元にもtry&catchの構文を書いて そこのcatchに例外をthrowするということですか?
816 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 18:46:56 ] ↑こんな感じでしょうか? try{ void Hoge(); } catch(Exception e){・・・・} ↑のcatch(Exception e){・・・・}に例外をスローすればvoid Hoge()を抜けられるという発想ですか?
817 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 20:18:34 ] JavaのTreeSetみたいなやつはない?
818 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 20:34:29 ] フォルダ名とファイル名のstringを合成してファイルへのフルパスを生成しようと思ってます。 string folder = @"c:\folder"; string file = "test.dat"; string fullPath = folder + @"\" + file; ここでもし人によってフォルダ名を string folder = @"c:\folder\"; のように末尾に\マークを入れてしまう人がいるかもしれません。 フルパスを合成する前にフォルダ名の末尾に\マークがあるかないか場合分けする必要が あるわけですが、C#のクラスにこのあたりの処理を自動化してくれるものはありませんか? 無ければフォルダ名の末尾に\マークがあるかないかで場合分けして対処する必要があります。
819 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 20:37:16 ] Path.Combineあたり できるかは知らないけどその辺に無かったら無い
820 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 20:47:14 ] >>819 どうもです。調べてみますノシ
821 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 20:47:37 ] ユーザに見せる必要がなければ、\が幾つ並んでも問題ない。 それでも受け付けてくれる。
822 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 20:50:54 ] 配列のラストが\\なら消す。
823 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:45:13 ] >>816 そういうこと 抜けるだけならreturnを使うけど、例外の時はthrowを使うという手段もある。 特に、その関数無いでは対処仕切れない場合とか、例外の再throwをすることがある。 string GetMessage() { try {...} catch (ry) { return " tell a lie :p";} } より { try {...} catch (ry) { throw (new Exception("ごごご、ごめんなさい");} } のほうが良い
824 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:47:15 ] >>823 それやるなら、前の例外も付けてやったほうがいいんじゃない? catch(Exception e) { throw (new Exception("ごごご、ごめんなさい", e); }
825 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:53:09 ] 普通のrethrowでいいよ
826 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:56:20 ] >>825 それもそうだな。ネタを考えてて変なことやっちゃったよ
827 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:21:57 ] >>797 C#とJavaって言語だけ見るとダメで、 バックについてるのが Microsoft か SUN かという違いを見ないとダメ。 SUN がクソ。
828 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 22:35:02 ] Linux等でも普通に動くところがJavaと違うんだよな。 だから、おれんとこでは、クライアントアプリがC#、VBどとねと でASPXより、Tomcat−JBOSS-Apatchがまだまだ主流だ。。。 業務サーバーとなれば、どうしてもDB+Unix系がまだまだ主流で 顧客に高級感という付加価値があびせれる。 制御系は、以外とWindowsOnlyでいけること多いんでCのDLL をC#で呼び出す系統のものを提案できるな。
829 名前:デフォルトの名無しさん [2008/10/08(水) 22:57:47 ] >>828 制御の世界でも確かに.netで組む例多くなってきてるな。 ただ、制御もSWもわかる技術者をあつめるのが難しいから IT側とコントローラ側を分離してるだけで決してwindows オンリーでいける というわけではない。コントローラ側はむしろ組み込みの世界に近いと思う