5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ふらっとC#,C♯,C#(初心者用) Part74

1 :デフォルトの名無しさん:2011/04/30(土) 19:56:45.96
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part73
http://hibari.2ch.net/test/read.cgi/tech/1302422250/

■関連スレ
C#, C♯, C#相談室 Part66
http://hibari.2ch.net/test/read.cgi/tech/1303889653/
ミスターサタンのC#相談室 
http://hibari.2ch.net/test/read.cgi/tech/1092656075/
VB.NET質問スレ(Part36)
http://hibari.2ch.net/test/read.cgi/tech/1301828549/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/

2 :デフォルトの名無しさん:2011/04/30(土) 19:57:02.53
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php

3 :デフォルトの名無しさん:2011/04/30(土) 20:00:33.01
>>1


4 :デフォルトの名無しさん:2011/04/30(土) 21:01:23.76
LINQいいよね〜

5 :デフォルトの名無しさん:2011/04/30(土) 21:20:17.42
ほね」。

6 :デフォルトの名無しさん:2011/04/30(土) 21:40:41.35
>>4
>>5
小学2年生的にはおもしろいよね。続けて


7 :デフォルトの名無しさん:2011/04/30(土) 21:59:15.23
フィールドの変数名ってどうしている?
自動プロパティを使っちゃうと「private GetHellowWorld { get; }」みたいにダサい変数名になっちゃうじゃ

8 :デフォルトの名無しさん:2011/04/30(土) 22:02:02.31
Hellow!

9 :デフォルトの名無しさん:2011/04/30(土) 22:06:53.82
自動プロパティーを使うとダサくなるって、自分でつけてるんでしょ?

10 :デフォルトの名無しさん:2011/04/30(土) 22:14:37.39
>>7
何を言ってるのか意味不明だと思うよ

11 :デフォルトの名無しさん:2011/04/30(土) 22:14:54.79
>>6
面白いねー

12 :デフォルトの名無しさん:2011/04/30(土) 22:22:27.95
プロパティ名にGet〜ってつけたことないや・・・

13 :デフォルトの名無しさん:2011/04/30(土) 22:30:45.56
なんでプロパティに動詞使っちゃうかな

14 :デフォルトの名無しさん:2011/04/30(土) 22:56:35.17
getだけじゃコンパイル通らないし

15 :デフォルトの名無しさん:2011/04/30(土) 22:58:35.85
うちではコンパイル通ったよ^p^

16 :デフォルトの名無しさん:2011/04/30(土) 23:16:25.68
>>7
自動プロパティを使わないダサくない変数名の例も挙げてくれ

17 :デフォルトの名無しさん:2011/05/01(日) 00:10:38.27
フィールドに変数は大文字 or 小文字で始めますか?

18 :デフォルトの名無しさん:2011/05/01(日) 00:22:20.49
どうでもいい
割とマジに姓名判断でも受けて決めたらいい

19 :デフォルトの名無しさん:2011/05/01(日) 01:00:11.54
>>17
ttp://dobon.net/vb/dotnet/beginner/namingrules.html

20 :デフォルトの名無しさん:2011/05/01(日) 01:39:34.83
イベントにハンドラを登録するときは自動でメソッド書いてくれるけど、
Timer ti = new Timer(callback); みたいに()にメソッド名書くときはなんもしてくれない。
コールバックのシグネチャいちいち調べるのめんどくさいから自動で書いてほしいんだけど
なんか方法ある?

21 :デフォルトの名無しさん:2011/05/01(日) 14:02:09.00
new TimerCallback(まで入力したらシグネチャを表示してくれる

22 :デフォルトの名無しさん:2011/05/01(日) 16:18:45.49
>>21
さんくす

23 :デフォルトの名無しさん:2011/05/01(日) 16:55:36.56
>>21
thx

24 :デフォルトの名無しさん:2011/05/01(日) 16:58:22.01
それならF12で定義に飛んでコピペした方がよっぽど早いような....

25 :デフォルトの名無しさん:2011/05/01(日) 17:07:21.71
>>17
StyleCopおすすめ。

26 :デフォルトの名無しさん:2011/05/01(日) 17:11:08.25
何度も使えばDependencyPropertyChangedEventHandler(object sender, DependencyPropertyChangedEventArgs e)とかでも暗記するだろ

27 :デフォルトの名無しさん:2011/05/01(日) 17:23:25.68
>>21
すげー、知らなかったはww

28 :デフォルトの名無しさん:2011/05/01(日) 19:10:32.52
>>24
メタデータなんて見れるんだ。知らなかった

29 :デフォルトの名無しさん:2011/05/02(月) 14:05:20.99
すみません。for文の中のインクリメントは、++iとi++の両方を見かけますが、
同じなのでしょうか?
前置きと後ろ置きだそうですが、評価されるタイミングが違うんですよね?
for文だとどっちでも同じになるんですかね?

30 :デフォルトの名無しさん:2011/05/02(月) 14:08:22.02
くそうるせー人に絡まれるので前置にした方が良いですよよよ

31 :デフォルトの名無しさん:2011/05/02(月) 14:31:52.81
どっちでも一緒。
前置きの方が速いから式の値を使わないなら前置きにしろというのは迷信。今時それくらい最適化される。
VC#のコードスニペットが生成するのは後置きだから後置きでいい。

32 :デフォルトの名無しさん:2011/05/02(月) 14:40:34.28
そんな迷信あったの知らんかったw
迷信にしても頭悪過ぎる迷信だな

33 :デフォルトの名無しさん:2011/05/02(月) 14:43:59.12
鰯の頭も信心と言うだろ
信心はこえーぞ

34 :デフォルトの名無しさん:2011/05/02(月) 14:53:51.72
インクリメントのところでラムダ式とか入れる強者が居たら・・・

35 :デフォルトの名無しさん:2011/05/02(月) 14:57:51.86
褒められた書き方ではないが
下記のnumに入る数値は変わる。

int i = 1;
int num = i++;

int i = 1;
int num = ++i;


36 :デフォルトの名無しさん:2011/05/02(月) 15:00:53.33
評価のタイミングについては前置きしてたのね。
>>35は無視してくれ


37 :デフォルトの名無しさん:2011/05/02(月) 15:01:13.94
i = 0;
array[i++] = x;
array[i++] = y;
array[i++] = z;
こういうのはついC++の癖でやってしまう

38 :デフォルトの名無しさん:2011/05/02(月) 15:01:21.41
>>35
いくらふらっとスレでもそのレベルの話をドヤ顔で書いちゃうってどうなのよ。
さすがに常識過ぎ

39 :デフォルトの名無しさん:2011/05/02(月) 15:07:38.55
>>37
こういうの馬鹿正直にループ回しちゃうわ。

40 :デフォルトの名無しさん:2011/05/02(月) 16:02:44.62
あれ迷信だったのかorz

41 :デフォルトの名無しさん:2011/05/02(月) 16:19:36.28
>>40
どんまい

42 :デフォルトの名無しさん:2011/05/02(月) 16:31:04.60
C++だと違いあるんじゃないの?

43 :デフォルトの名無しさん:2011/05/02(月) 16:36:12.93
一時オブジェクトがどーたらとかいう講釈はほとんどの場合は最適化で消えるってことであってます?

44 :デフォルトの名無しさん:2011/05/02(月) 16:54:04.14
10億回くらいのループ内なら少し考える

45 :デフォルトの名無しさん:2011/05/02(月) 16:57:16.04
以下のことがやりたいのですが,どの言語でやればいいかよくわかりません(というか選び方がわかりません).アドバイスお願いします.

・粒子(砂)の堆積についてのシュミレーション
・数は1万個程度.大きさは100μm程度
・計算としてはルンゲクッタ法を用いる予定
・剛体球モデルを用いる予定

よろしくお願いします.

46 :デフォルトの名無しさん:2011/05/02(月) 16:58:48.90
べつにどの言語でも出来る
というか言語どうこうの問題じゃない

47 :デフォルトの名無しさん:2011/05/02(月) 17:00:56.85
FortranかC++でいいじゃん
そういうのならどの言語で書いても手間は似たようなもんだから速いの選んどけ
言語なんかよりも、近くの粒子をリストアップしておいて計算回数を減らすなどの
アルゴリズム上の工夫が超重要

48 :デフォルトの名無しさん:2011/05/02(月) 17:08:21.35
配列として1万個以上の物体が入ればそれで用件は済む。
で、大きさは貴方の求める仕様なので貴方が物体と物体の距離を定義すればいい。
アルゴリズムのことはよくわからないが、
要するにその物体同士が当たり判定で当たったとしたときの挙動を求めることが結果につながると思う。

というわけでどの言語でも配列と当たり判定が実装できればなんでもいいが、
カラフルなビジュアルが必要であればC#も選択肢に入るかもね。

ってとこじゃね?

49 :デフォルトの名無しさん:2011/05/02(月) 17:12:40.95
>>45
研究とかやってるんなら
CUDAC あたりでメイン処理書いといてC#とかXNAで描画とかどう

50 :デフォルトの名無しさん:2011/05/02(月) 17:27:52.63
各粒子ごとに、自分自身からある程度の距離内にいる粒子のリストを持っといて
そのリストにある粒子との衝突判定だけを行うようにすればO(N^2)がO(N)に近くなってかなり速くなる
ときどきそのリストを更新する必要があるけど、それはO(N^2)かかってしまうので
そこがネックになるようなら空間を分割するとか工夫する
小手先の最適化よりアルゴリズムだよ

51 :デフォルトの名無しさん:2011/05/02(月) 21:28:52.05
45です.
ご意見ありがとうございました.検討してみます.
また何かあったらよろしくです.

52 :デフォルトの名無しさん:2011/05/02(月) 21:56:42.30
>>32
C++で、ユーザー定義型の ++ の場合は前置きの方が速いのよ。
もちろん、整数の場合はコンパイラが最適化するからどっちでもいっしょ。

53 :デフォルトの名無しさん:2011/05/02(月) 23:32:58.50
.netのnamespaceってどんなのがあるのか知りたいのですが、
見やすい一覧って無いのですか?

54 :デフォルトの名無しさん:2011/05/02(月) 23:39:57.08
つ MSDN
つ ヘルプ

55 :デフォルトの名無しさん:2011/05/02(月) 23:40:00.43
msdn

56 :デフォルトの名無しさん:2011/05/02(月) 23:41:04.20
たった4文字打つだけなのにかぶったぜ

57 :デフォルトの名無しさん:2011/05/03(火) 00:02:30.99
>>53
Visual StudioでC#プロジェクト作って、Ctrl+.

58 :デフォルトの名無しさん:2011/05/03(火) 00:13:46.36
>>57
それVSのバージョンいくつから?
VC#2008Expressじゃあ反応しないな

59 :デフォルトの名無しさん:2011/05/03(火) 01:09:25.88
lockステートメントに入れるインスタンスは適当なのがなけりゃObjectクラスのをnewして入れとけ
ってどこかで見たけど、そのメソッドを持ってるインスタンス自身を入れるのって問題ない?
lock (this)
{
...
}

60 :デフォルトの名無しさん:2011/05/03(火) 01:30:03.17
lockステートメントの解説から。
「インスタンスに対してパブリックにアクセスできる場合には、lock (this) が問題になります。」

これは、thisオブジェクトが外から見えてしまうので別の排他制御で使われるかもしれない
から注意してね、という意味だと思う。
インスタンスメソッド間で排他制御に使ってると、外部じゃ分からなくて排他制御に使うかも
しれないよ、と。

61 :デフォルトの名無しさん:2011/05/03(火) 01:38:11.32
具体的には
class hoge {
...
 void hogeCallback() {
  lock(this) {
   done = true;
  }
 }
}
で、
hoge obj = new hoge();
として
lock(obj) {
 while(! obj.done) {
  Thread.Sleep(500);
 }
}
とか。(検証したわけじゃないが)

62 :デフォルトの名無しさん:2011/05/03(火) 01:46:21.95
>>60-61
なるほどそういうケースがあるのか。さんくす

63 :デフォルトの名無しさん:2011/05/03(火) 01:58:49.76
そもそもクリティカルセクションを作るためにlockを使う、っていうのが
lockの本来の使い方じゃないような気もするんだけど、かといって代替手段がないのか。

64 :デフォルトの名無しさん:2011/05/03(火) 02:11:07.81
>>63
どういうこと?MSDNにはクリティカルセクションをマークするためのものって書いてあるけど。

65 :デフォルトの名無しさん:2011/05/03(火) 02:21:26.41
>>63
納得いく説明をしてくれよ

66 :デフォルトの名無しさん:2011/05/03(火) 02:41:37.52
>>64
言葉の使い方が正確かどうか自信がないけど、lock(hoge)の機能は排他制御だよね。
つまり、複数のスレッドが同時にhogeにアクセスすることを防止したい場合に使う。
(hogeのためにlockが使われている)

単にクリティカルセクションを作りたいだけの場合、hogeは1ヶ所しかないlock(hoge)のためだけに
存在する(その行以外では使われない)わけで、要するに別にlock(hoge)はhogeをロックすることを
狙ってるわけじゃない。(むしろlockのためにhogeが使われている)

ごめんどうも上手く書けてる気がしない。
人に説明するのって難しいな....

67 :デフォルトの名無しさん:2011/05/03(火) 03:27:42.43
lock キーワードは、指定のオブジェクトに対する相互排他ロックを取得し、ステートメントを実行し、
ロックを解放するステートメント ブロックをクリティカル セクションとしてマークします。

68 :デフォルトの名無しさん:2011/05/03(火) 04:29:09.27
>同時にhogeにアクセスすることを防止したい
これがちょっと認識が怪しいんじゃないかと思うな。

オブジェクト操作で捉えてしまうと、その思考だと複数のオブジェクトの同時変更
ではそれぞれ全部ロックする必要があることになるけど、これは面倒極まりない。
そんなことしなくても、代表を決めておいてそれを握っている奴だけが操作できる
という取り決めで簡素化が可能。

そこで代表だったら単なる new Object() でいいじゃんという話になる。
つまりlockってのは単にオブジェクトを保護するためのモノじゃないよ、ということ。

69 :デフォルトの名無しさん:2011/05/03(火) 04:39:26.92
Javaでの話だけど、かなり一般論。

http://www.shudo.net/article/JavaWorld-200201-multithread/#deadlock

・・・その場合、それではまったくロックしないというわけにもいかないので、より上位の、
包括的なモニタを獲得することになる。
具体的には、個々の口座をロックするのではなく銀行自体をロックする、といった具合いである。


70 :デフォルトの名無しさん:2011/05/03(火) 04:39:38.20
visual studio 2010 expressで
クラスのメソッド一覧って出せますか?

2008 expressだとソリューションエクスプローラー(?)で
見れた気がするんですが。

71 :デフォルトの名無しさん:2011/05/03(火) 04:42:54.40
Monitor の静的メソッドで任意のオブジェクトをロックするより、
Monitor をインスタンス化するような実装の方がよかった気もするのよね。

なんか、意味のない object syncObj = new object(); して lock(syncObj) とかするより、
lock() の中身はMonitor 限定でよかったような。

72 :デフォルトの名無しさん:2011/05/03(火) 07:08:13.37
意味のあるロックオブジェクトの場合もあるっしょが

73 :デフォルトの名無しさん:2011/05/03(火) 08:27:06.30
でも、めったに行わない lock のために、全てのオブジェクトが同期インデックスを持ってるのって無駄だったりしないのかな。

Java の場合、JVM の命令としてmonitorender/monitorexitを実装してるけど、
.NET の場合、IL レベルじゃなくて、Monitor クラス使った構文糖衣なわけで、
特に全部のオブジェクトに同期インデックス持たせる理由もないような。

あと、Monitor.Enter が静的メソッドとして実装されてるがために結構問題も起こしてるみたいだし。

74 :デフォルトの名無しさん:2011/05/03(火) 11:06:54.71
Javaはsynchronized(this)だらけだからでしょ。設計ミスだけど。
設計時にはまだlock(this)の問題が十分に認識されてなかったからとりあえずJavaと同じにしたんじゃないの
[MethodImpl(MethodImplOptions.Synchronized)]でthisがロックされたりするし、
この属性はイベントアクセサに自動的に付けられてしまう。
C#4からはイベントアクセサにも上の属性は使われなくなってる。

75 :デフォルトの名無しさん:2011/05/03(火) 11:48:22.25
そう、lock(obj) はどう考えてもJavaの影響なんだけど、
IL レベルで実装するのはやめたんだから、「もう1歩」あってもよかったかなと。

76 :デフォルトの名無しさん:2011/05/03(火) 12:05:28.30
全てのオブジェクトを同期に使える言語が広く使われてる以上、
共通言語基盤としては仕様に入れないと仕方なかったんじゃないの
当初はJ#も戦略の中心にいたんだし

77 :デフォルトの名無しさん:2011/05/03(火) 12:06:29.67
また設計ミス厨か

78 :デフォルトの名無しさん:2011/05/03(火) 14:54:22.39
後知恵はいつも素晴らしいw

79 :デフォルトの名無しさん:2011/05/03(火) 16:57:14.35
次の世代の言語に期待するしかねーな

80 :デフォルトの名無しさん:2011/05/03(火) 17:13:15.83
次は何?
C丼?

81 :デフォルトの名無しさん:2011/05/03(火) 18:17:03.33
C鬱

82 :デフォルトの名無しさん:2011/05/03(火) 18:45:47.81
地名でも偉人の名前でも頭字語でも何でもいいけど、C#だのC♭だの検索しにくい
投げやりな名前は止めてほしい。

83 :デフォルトの名無しさん:2011/05/03(火) 18:46:36.10
swichってifと比べて遅いからなるべく使わないほうがいいって
100分岐以上でもifにしたほうがいい?
swichを分割してifで二分岐して絞ったほうがいいのかな

84 :デフォルトの名無しさん:2011/05/03(火) 18:54:27.57
80年代のBASICじゃあるまいし....

85 :デフォルトの名無しさん:2011/05/03(火) 18:55:10.02
気にすんな

86 :デフォルトの名無しさん:2011/05/03(火) 19:26:05.36
>>83
別に遅くはないだろ?

87 :デフォルトの名無しさん:2011/05/03(火) 20:28:58.95
むしろはまれば速いんじゃ?

88 :デフォルトの名無しさん:2011/05/03(火) 20:29:01.55
一般にswitchで書けるならswitchの方が速い

89 :デフォルトの名無しさん:2011/05/03(火) 20:38:29.89
がんばって100個以上クラス定義してポリモーフィズムしようぜ

90 :デフォルトの名無しさん:2011/05/03(火) 20:39:25.33
C7とかCmajorとかC1000takedaとか

91 :デフォルトの名無しさん:2011/05/03(火) 20:47:10.24
switchは場合によってILになったとき専用のテーブルが作られることがあるから
むしろifより最適化はされやすい(=常に速いということではない)

92 :デフォルトの名無しさん:2011/05/03(火) 20:50:25.64
>>88
本当かよそれ。
まあifで2分探索で書くのが一番平均速度が早そうだけど、可読性の面では最低になりそうだ。
代替案でDictionaryにデリゲート突っ込んで…こっちも読みにくそうだな

93 :デフォルトの名無しさん:2011/05/03(火) 21:01:55.72
いやswitchなら連続値の場合O(1)だ

94 :デフォルトの名無しさん:2011/05/03(火) 21:11:11.46
switchって内部的にはif文に読み替えられるのかと思ってたが
違うんだな・・・

95 :デフォルトの名無しさん:2011/05/03(火) 21:15:41.10
確かに値が散ってなければ機械語でいうジャンプテーブルみたいなものに最適化できるはずだよな。

96 :デフォルトの名無しさん:2011/05/03(火) 21:18:44.13
>>94
.NETはILレベルでswitch命令持ってて、その先、JIT結果がどうなるかはたぶん実装依存だったと思うけど、
MSのCLRは、caseの数が少なかったりcaseが飛び飛びだとif相当のコードに展開、
連続なcaseだったらジャンプテーブルになる。

97 :デフォルトの名無しさん:2011/05/03(火) 21:21:14.83
C#コンパイラやJITコンパイラが、これはifの方が速いだろうと判断すれば
switchからif相当のコードを生成することは簡単にできるはずだけど
逆にifからswitchは難しいだろうから、もちろん実装によるけど本来ifの方が速くなる余地はないわな

98 :デフォルトの名無しさん:2011/05/03(火) 22:55:47.08
<書籍情報>
<書籍>
<書籍名>名前1</書籍名>
<書籍名>名前2</書籍名>
</書籍>
</書籍情報>

var quary = from item in xmlDoc.Descendants("書籍") select item.Element("書籍名");
ってやると一番最初の名前1しか読めないです
どこがいけないんでしょ?

99 :デフォルトの名無しさん:2011/05/03(火) 23:01:06.32
item.Element("書籍名");

目が悪いんだな

100 :デフォルトの名無しさん:2011/05/03(火) 23:01:42.51
一文字足りないな

214 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)