ふらっとC#,C♯,C#(初心者用) Part24 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/02/03 17:44:27
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

ふらっとC#,C♯,C#(初心者用) Part23
スレリンク(tech板)

2:デフォルトの名無しさん
08/02/03 18:07:09
C#, C♯, C#相談室 Part44
スレリンク(tech板)

C♯, C#相談室 Part34
スレリンク(tech板)

【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
スレリンク(tech板)

Windows Live プログラミング
スレリンク(tech板)

初心者のためのプログラミング言語ガイド Part6
スレリンク(tech板)

3:デフォルトの名無しさん
08/02/04 12:47:32
WPFのRichTextBoxの行間がデフォルトで二行分空いているようなんですが
一行にするにはどうしたらいいんでしょうか

4:デフォルトの名無しさん
08/02/04 13:40:25
これたてなおす?

5:デフォルトの名無しさん
08/02/04 14:26:19
contravariantって何に使うんですか?
MSの説明を見たのですが、基底クラスを引数に取れる利点がよくわかりません

6:デフォルトの名無しさん
08/02/04 15:22:03
>>5
イベントハンドラを一つにまとめられる、じゃ不満か

7:デフォルトの名無しさん
08/02/04 15:23:38
一般的な反変性の話なのか
デリゲートの話なのか

8:デフォルトの名無しさん
08/02/04 15:26:34
>>6-7
そうですデリゲートの話です
一般的な説明じゃ何使うのかさっぱりで

9:デフォルトの名無しさん
08/02/04 15:28:32
デリゲートっていっぱい関数登録できるものって解釈だとヤバイ?
複数の関数入れて例外が起きたら残りは実行されないのかな

今サンプル動かそうとしてるけど俺あほすぎて時間がかかってる orz

10:デフォルトの名無しさん
08/02/04 15:48:14
>>8
似たようなデリゲート型をたくさん宣言しなくならなくちゃ
ならないような状況になれば分かるかと

>>9
MethodInvoker mi = M1;
mi += M2;
mi += M3;
mi.Invoke();

void M1()
{
MessageBox.Show( "Test1" );
}
void M2()
{
throw new Exception();
}
void M3()
{
MessageBox.Show( "Test3" );
}

11:デフォルトの名無しさん
08/02/04 15:59:03
>>10
covarianceなら、登録できるメソッドが増えるから分かるんですが、
contravarianceは減ってしまいますよね?
だからわからないんです

12:デフォルトの名無しさん
08/02/04 15:59:06
>>10
ありがと!やってみた

例外出たら止まるんか、超わかったw
感謝します


13:デフォルトの名無しさん
08/02/04 16:15:05
>>11
どっちも増える

14:デフォルトの名無しさん
08/02/04 16:22:28
>>13
基底クラスのほうを渡せてもあんまり意味ないと思うのでよく分からないんです
よろしければ具体的な例を教えてください

15:デフォルトの名無しさん
08/02/04 16:35:16
event EventHandler Click;
event MouseEventHandler MouseDown;
void Hoge1(object sender, EventArgs e) { }
void Hoge2(object sender, MouseEventArgs e) { }

Click += Hoge1;//もちろんOK
MouseDown += Hoge1;//MouseEventArgsはEventArgsを継承してるからこれもOK
//Click += Hoge2; これはコンパイルエラー
MouseDown += Hoge2;//もちろんOK

16:デフォルトの名無しさん
08/02/04 16:42:49
>>15
あ、よくわからずイベントハンドラの追加とか書いてましたがなんとなくぴんときた

buttonクラス内にはevent EventHandler Click;みたいにきっとあるんだなあ

17:デフォルトの名無しさん
08/02/04 16:45:43
>>15
Click += Hoge2; これはコンパイルエラー
これなんでまずいんですか?
文法的に許しちゃいけない理由が見あたらないんですが・・・

18:デフォルトの名無しさん
08/02/04 18:11:45
ヘタレな漏れにはメソッドが複数呼び出されるからって何がいいのかわかんね。

>>10の例だと
M1();
M2();
M3();

って書くのがそんなにめんどくさいの?
って言いたくなるんだが
もっと、こう、デリゲードじゃないとそれは無理だね
みたいに納得できる例はないだろうか?


19:デフォルトの名無しさん
08/02/04 18:14:12
同じくよくわからんなぁ

20:デフォルトの名無しさん
08/02/04 18:25:57
俺も分からん
識者の人はやくきてくれー><

21:デフォルトの名無しさん
08/02/04 18:28:02
ちょうど今複数呼んでくれて嬉しいのに気づいたのはApplication.Idle
あちこちのフォームで好き勝手に登録できる

22:デフォルトの名無しさん
08/02/04 18:42:50
>>17
引数eにMouseEventArgs型のオブジェクトが渡される保証がない
(EventArgs以下ならなんでも入れられる可能性がある)
>>18 イベントにイベントハンドラを複数登録できるようにするため
>>21 それきちんと後片付けしないとメモリリークするよ

23:デフォルトの名無しさん
08/02/04 18:45:31
>>22
>イベントにイベントハンドラを複数登録できるようにするため
順番って登録した順番に依存するんじゃないの?
アーキテクチャ的にまずくね?

24:デフォルトの名無しさん
08/02/04 18:49:03
マルチキャストデリゲートで一番使われるのはイベントじゃないかな。。
メインのオブジェクトがあって、
サブのオブジェクトたちがそれぞれイベント付けたりできるじゃん
親アプリにプラグインがたくさんある場面とか。
親は一発ですべての登録されたイベントを発行できる

ちなみに
dlg -= M1;
みたいにそれぞれ取り外しもできるし
dlg = null;
でクリアもできる

25:デフォルトの名無しさん
08/02/04 18:50:02
>>23
そうね。むしろ順番に依存するようなのをデリゲートで書くべきじゃない

26:デフォルトの名無しさん
08/02/04 18:51:24
前から思ってたんだけど、デリゲートって高階関数と違うの?

27:デフォルトの名無しさん
08/02/04 18:52:04
>>26
勉強足りなすぎです。

28:デフォルトの名無しさん
08/02/04 18:55:18
>>27
だまれ小僧

29:デフォルトの名無しさん
08/02/04 18:55:48
>>27
関数を引数にとって、関数内で任意の処理ができるんだから同じじゃないの?

30:デフォルトの名無しさん
08/02/04 18:56:12
>>27
>>1読めカス

31:デフォルトの名無しさん
08/02/04 18:56:47
>>23>>25
何がまずいの?w
いやもちろんまずい場面もありうるだろうが、そんなのむしろ例外的じゃないの?

っていうかC#ってVBのカスタムイベントみたいなことって出来ないんだっけ?

32:デフォルトの名無しさん
08/02/04 18:57:31
高階関数に相当するのはデリゲートじゃなくてデリゲートを引数に取るメソッドの方だろ

33:デフォルトの名無しさん
08/02/04 19:00:42
>>32
ごめんそういうことがいいたかった

34:デフォルトの名無しさん
08/02/04 19:07:30
>>31
addとremoveは定義できるよ
raiseはない

35:デフォルトの名無しさん
08/02/04 19:14:20
>>34
ならハンドラを呼び出す順番もその気になれば一応制御できるんだよね?

36:デフォルトの名無しさん
08/02/04 19:15:49
どうのこうの言いつつ、
結果的に>>1が投げた質問で盛り上がってる俺ら

37:デフォルトの名無しさん
08/02/04 19:20:08
>>35
デリゲートオブジェクトは呼び出し対象の情報しか持ってないのに何を基準に並べ替えるの?

38:デフォルトの名無しさん
08/02/04 19:24:37
>>37
俺も具体的な用途があまりあるとは思ってないんだけど、抽象的な可能性の話だよ。
例えば標準のFIFO動作をLIFOに変更するとかさ。

39:デフォルトの名無しさん
08/02/04 19:49:51
詳しい人ktkr!!
誰かcontravarianceの使い方を教えてくだしぁ><

40:デフォルトの名無しさん
08/02/04 19:52:41
お前は使わなくていい

41:デフォルトの名無しさん
08/02/04 19:53:19
>>40
ここそういうスレじゃないから

42:デフォルトの名無しさん
08/02/04 20:09:03
object型って変数宣言した瞬間にインスタンスが作られるんですか?
くだ質スマンセン

43:デフォルトの名無しさん
08/02/04 20:13:35
作られないと思う
作られるのはintとかプリミティブ型だけ

44:デフォルトの名無しさん
08/02/04 20:28:48
C#にはプリミティブ型なんてないお

45:デフォルトの名無しさん
08/02/04 20:31:17
プリミティブ型(と呼ばれるもの)はあるよ
値型の中でも言語に組み込みのものをいう

46:デフォルトの名無しさん
08/02/04 20:31:22
ボクシングって知ってる?

47:デフォルトの名無しさん
08/02/04 20:31:36
本当かよw

48:デフォルトの名無しさん
08/02/04 20:39:59
intはプリミティブ型で、Int32がオブジェクト型じゃないの?

49:42
08/02/04 20:40:33
値型の場合・・・・・変数宣言した瞬間にスタック上にインスタンスが生成される。
参照型の場合・・・変数宣言した瞬間にスタック上に参照情報が生成され、初期値としてnullが入る。
ということですよね?

実は手元の入門書で↓のような例文で、
int hoge
hoge = 123;
object obj;
obj = (object)hoge;

「object obj; で、変数objのインスタンスをヒープ上に生成し、参照情報をスタック上に格納」
とあって混乱したのですが、間違いってことでしょうか?

50:デフォルトの名無しさん
08/02/04 20:43:11
>>49
>変数objのインスタンスをヒープ上に生成
うんここはまちがいだな
参考までになんて本?

51:デフォルトの名無しさん
08/02/04 20:46:38
>>48
全く同じ
言語仕様でも同じと明記されてる

52:デフォルトの名無しさん
08/02/04 21:02:05
>参照型の場合・・・変数宣言した瞬間にスタック上に参照情報が生成され、初期値としてnullが入る。
ちがうよ。


53:デフォルトの名無しさん
08/02/04 21:06:03
違うってんなら詳しく書け、書かないならレスつけんな

54:デフォルトの名無しさん
08/02/04 21:06:05
先生ども

コンソールアプリケーションでデフォルトプリンタを取る方法って
普通のc#上には無いんでしょうか?
調べてみると、APIで取る方法とWSHで取る方法がありそうだけど
WSHはデフォルトプリンタを取得するサンプルが見当たらないし、
APIだとどうも負け組みかなって思っちまいます。

55:42
08/02/04 21:10:22
>>50
やっぱりそうですか・・・。

本は↓です。
visual C#2005パーフェクトマスター (著:金城 俊哉 氏)
URLリンク(www.amazon.co.jp)

初めに@ITの川俣氏の「改訂版C#入門」を一通りやって、なんとなく分かった気はしたんですが、
きちんと入門書から始めたほうが良さげだろうと思いまして。
VS2005の使い方も詳しく載ってるお手ごろな入門書を探して、これに行き着きました。

読んでみたら初版なせいか誤字が多い・・・しかもいきなりWindows Formの説明から始まって・・・
もしかして地(ry   orz

56:デフォルトの名無しさん
08/02/04 21:20:32
俺は>>50の言ってる事の方が間違ってると思うなw

57:デフォルトの名無しさん
08/02/04 21:22:37
っていうかヒープだのスタックだのなんてフレームワーク内部の低水準の話は
とりあえずうっちゃっておいても問題ない、というよりそんなの後回しに
すべきだと思うよ。

58:デフォルトの名無しさん
08/02/04 22:09:24
>>49
C++とごっちゃになってるようにも読み取れるな

59:デフォルトの名無しさん
08/02/04 22:15:18
>>49
そのライター結構いっぱい本書いてるけどやばい記述多いのかな

60:デフォルトの名無しさん
08/02/04 22:16:54
>初期値としてnullが入る。
入らないよ。


61:デフォルトの名無しさん
08/02/04 22:21:39
>>1

62:42
08/02/04 22:34:56
そうですか。色々勘違いしてるのかもしれません
とりあえず今は置いといて、本を読み進めようと思います。

63:デフォルトの名無しさん
08/02/04 22:41:55
値型も宣言しただけでは初期化されないよ。


64:42
08/02/04 22:58:38
結局、宣伝はメモリ確保するだけで、(0やnullなども含めて)何かで初期化されるわけではない、ってことですかね?
というか、当たり前か・・・

65:デフォルトの名無しさん
08/02/04 23:01:01
if(myPS->isString("+")){
if(debug){cout<<"24回"<<endl;
     }
return true;

上の分の->これっていったいなにをしているんでしょう
また、if文カッコ内debugの中の変数は0か1かではなく、True Falseでも判定かのうなのでしょうか?
よろしくお願いします

66:デフォルトの名無しさん
08/02/04 23:05:01
猫でもわかるC#のフォーム編ってまだ発売決まってないのかな?
知ってる人います?

67:デフォルトの名無しさん
08/02/04 23:11:25
著者か出版社に聞けばいいじゃんw
っていうか俺あの著者の本を好む人が理解できん。

あの人低水準のこと = 基本だと思ってないか?w
っていうかどうでもいい無駄話が多すぎ。

68:デフォルトの名無しさん
08/02/04 23:13:05
>>67
そうなの?
かなり分かりやすく書いてあるから、重宝してるんだが
ありがとう、著者にメール送ってみる!

69:デフォルトの名無しさん
08/02/04 23:14:41
人によるんじゃねえかなぁ、独習シリーズも人によっては結構わかりづらいみたいだし
文体がお堅いっていうのはあるけどお浚いする為にはああゆうのが便利だと思ってる

入門は柔らかい文体の本一冊+Webで、くらいで

70:デフォルトの名無しさん
08/02/04 23:38:46
>>64
俺は宣言するだけじゃメモリ確保すらされないと理解してるんだが。
だって、一度も代入してないのをいきなり使おうとすると
>未割り当てのローカル変数 'name' が使用されました。
って出るじゃん

71:デフォルトの名無しさん
08/02/04 23:45:49
独習シリーズって教科書には向かないけど、
自分でコツコツ読むには何でも書いてあるいい本だよね

72:65
08/02/04 23:51:02
分かる人いたらお願いします・・・

73:デフォルトの名無しさん
08/02/05 00:01:03
このスレはC#のスレ。それC++じゃないの?

74:デフォルトの名無しさん
08/02/05 00:05:59
>>72
ポインタ演算子じゃないの?

75:デフォルトの名無しさん
08/02/05 00:14:14
アロー演算子って呼び方が一般的じゃないかな

76:デフォルトの名無しさん
08/02/05 00:14:39
そだね

77:デフォルトの名無しさん
08/02/05 00:21:42
>>未割り当てのローカル変数 'name' が使用されました。
>って出るじゃん

英語のメッセージは
Use of unassigned local variable 'name'
なんだぜ?
allocateじゃなくてasign


78:デフォルトの名無しさん
08/02/05 00:29:57
紛らわしいw

79:デフォルトの名無しさん
08/02/05 00:35:38
>>54
URLリンク(dobon.net)
これは調査済み?

80:デフォルトの名無しさん
08/02/05 00:43:11
デリゲートとかクロージャみたいな難しい概念を
実際のコードに使ってる人なんているの?

81:デフォルトの名無しさん
08/02/05 00:44:40
難しい(笑)

82:デフォルトの名無しさん
08/02/05 00:45:00
難しくないから普通に使ってるだろ。
Cでポインタが難しいと言ってるのと変わらない。

83:デフォルトの名無しさん
08/02/05 00:46:37
言語マニアしか分からなくないですか?
デリゲートとかクロージャがなくて困るケースってあります?

84:デフォルトの名無しさん
08/02/05 00:48:35
.NET Fxはほとんど使えなくなるだろ。

85:デフォルトの名無しさん
08/02/05 00:49:33
イベントドリブンな処理

86:デフォルトの名無しさん
08/02/05 00:49:38
クロージャはともかく、デリゲートはVSでWindows.Formsをポトペタすると使いまくってるだろ。

87:デフォルトの名無しさん
08/02/05 00:50:24
そうなんか(´・ω・`)
ポインタと違って無くても困らない程度のもんだと思ってたんだが

88:デフォルトの名無しさん
08/02/05 00:52:02
関数ポインタの代わりがdelegateなわけで…

89:デフォルトの名無しさん
08/02/05 00:53:22
MDIのアプリを作ろうとしていますが、
親のMDIフォームにToolStripContainerをDockStyle.Fillで張り付けた場合、
MDIの子ウィンドウが表示されなくなりますが、
これを表示させるようにするための解決法はございますでしょうか?

Excel2003のようなアプリを目指しています。

90:デフォルトの名無しさん
08/02/05 00:56:02
クロージャはまぁ無くなっても困らんなw

91:デフォルトの名無しさん
08/02/05 01:09:05
ArrayListで作る配列って、多次元配列に出来るの?

92:デフォルトの名無しさん
08/02/05 01:13:31
ArrayList<ArrayList<string>>

93:デフォルトの名無しさん
08/02/05 01:13:54
ArrayListにArrayList突っ込めば

94:デフォルトの名無しさん
08/02/05 01:13:57
できるよ

95:デフォルトの名無しさん
08/02/05 01:25:00
そうか、出来るのか!
何か難しそうだけどやってみるよ!!ありがと!

96:デフォルトの名無しさん
08/02/05 01:58:08
コスト的に死ねると思うのは俺だけでいい

97:デフォルトの名無しさん
08/02/05 02:08:08
4次元配列とか案の?

98:デフォルトの名無しさん
08/02/05 02:50:20
お前は何を言っているんだ

99:デフォルトの名無しさん
08/02/05 07:58:30
任意のN次元配列を動的に定義できるの?

100:デフォルトの名無しさん
08/02/05 08:18:51
おまいの本当にやりたいことは配列の定義とかそんなちっぽけなことじゃなかったはずだ

101:デフォルトの名無しさん
08/02/05 08:21:39
任意のN次元配列を動的に宣言できるの?

102:デフォルトの名無しさん
08/02/05 08:23:05
動的にIL作ればいいんじゃね

103:デフォルトの名無しさん
08/02/05 08:24:12
C#で書いてみれ

104:デフォルトの名無しさん
08/02/05 08:25:10
つうか動的と宣言って相反するんじゃね

105:デフォルトの名無しさん
08/02/05 08:34:32
Array.CreateInstance

106:デフォルトの名無しさん
08/02/05 08:47:13
動的に作成じゃなくて動的に宣言らしいんだけど

107:デフォルトの名無しさん
08/02/05 08:52:12
静的に宣言するか動的に作成するかしか出来んな

108:デフォルトの名無しさん
08/02/05 09:51:18
>>79
遅くなってすません。
もう見てたんですが
もう一度見直したらしっかり使えるじゃまいですかw

ということでおかげさまで解決しました。


109:デフォルトの名無しさん
08/02/05 10:33:51
任意のN次元配列を動的に宣言できるの?

110:デフォルトの名無しさん
08/02/05 10:39:29
くどいよ

111:デフォルトの名無しさん
08/02/05 11:25:08
俺もn次元配列興味あるなぁ
以前作ったときは、n次元を1次元に無理矢理マッピングして
コーディングしたんだけど、
エレガントさに賭けていたので

112:デフォルトの名無しさん
08/02/05 11:38:26
(´・ω・`)しらんがな

113:デフォルトの名無しさん
08/02/05 11:39:37
賭けていたのか
コードを見てみたいところだ

114:デフォルトの名無しさん
08/02/05 11:40:54
確かに、int[][][][]・・[]とか書くのは美しくないなwww

115:デフォルトの名無しさん
08/02/05 13:36:45
N次元配列にアクセスする時はArray.GetValue

116:デフォルトの名無しさん
08/02/05 14:31:18
C#にクロージャってあるんですか?
匿名メソッドはクロージャではないと聞いたのですが
どこが違うのでしょうか?

117:デフォルトの名無しさん
08/02/05 15:03:47
匿名メソッドはクロージャ

118:デフォルトの名無しさん
08/02/05 15:13:38
>>116
クロージャで正解。
クロージャの考え方はいろいろあってとくに手続き型の言語ではバリエーションが広い。
自分の使ってる言語と動作が違うからC#のは真のクロージャではないという議論が、
しばらくなされたことがあって、そのときに
>匿名メソッドはクロージャではない
という話が出回ったことがある。

119:デフォルトの名無しさん
08/02/05 15:17:28
>>117
>>118
ありがとうございます

メソッド内で匿名メソッドを宣言したときに、
親メソッドの変数を参照できないとクロージャではないみたいな話を聞いたもので

クロージャ自体方言みたいなもので
明確な定義がないんですかね?

120:デフォルトの名無しさん
08/02/05 15:21:26
逆にレキシカルクロージャ以外クロージャではないと言ってる過激派もいるけどね。

121:デフォルトの名無しさん
08/02/05 15:30:11
レキシカルクロージャってのも議論が混乱してて分からない俺涙目
どっかに分かりやすい解説ない?

122:デフォルトの名無しさん
08/02/05 16:52:26
匿名メソッドは親メソッドのローカル変数を参照できる

123:デフォルトの名無しさん
08/02/05 17:08:47
>>89 まさにこれ?
URLリンク(dobon.net)

124:デフォルトの名無しさん
08/02/05 18:13:36
静的スコープってのは、クロージャの中身がローカル変数になることをいうの?
動的スコープて何?

125:デフォルトの名無しさん
08/02/05 18:18:49
C#についてるのってレキシカルクロージャだっけ?

126:デフォルトの名無しさん
08/02/05 19:02:51
>>124
動的スコープのクロージャはマクロみたいなものでC#ではありえない。
コードにするとこんな感じ。

var f = DFUNC(a) { return a + b; } // この時点で b は存在しない。

void A() {
  var b = 2;
  f(3); // 6が戻る。
}

void B() {
  f(3); // b がないので実行時エラー
}


127:デフォルトの名無しさん
08/02/05 19:06:58
>>126
なるほどなー
それはわかりやすい

128:デフォルトの名無しさん
08/02/05 19:07:36
スクリプト言語でありそうなコードだね

129:デフォルトの名無しさん
08/02/05 20:56:31
java屋の質問なんだけど、名前空間とディレクトリ階層が一致しなくてもいいみたいなんだが
みんなルール決めて変な事にならないようにしてるの?
javaみたいに言語仕様で縛らないのは何か意味があるのかな。

130:デフォルトの名無しさん
08/02/05 20:58:45
むしろJavaが変

131:デフォルトの名無しさん
08/02/05 21:05:48
なんで言語仕様でディレクトリの構成が縛られないといけないんだ

132:デフォルトの名無しさん
08/02/05 21:10:56
言語なんて複数やってるもんなのにjava屋とかいっておきながら井の中の蛙とは一体

133:129
08/02/05 21:12:36
>>130
んー、C#が変だとは思ってないんだが、クラス名の衝突を防いだりするためなんだから、ファイルもディレクトリ作ってぶつからないようにするんでないの?

134:デフォルトの名無しさん
08/02/05 21:17:57
>>129
今まで違和感無かったか?俺はあったぞ。

135:デフォルトの名無しさん
08/02/05 21:25:05
>>133
論理的な構成と物理的な構成が同じじゃなきゃいけないってのは原始的な感じがする

136:129
08/02/05 21:40:50
チームで開発するときとかは、○○系はこのディレクトリに入れてって会社や個人でルールを決めてるってことか。
javaだとパッケージのルールだけ決めるだけだったから、C#には暗黙のルールでもあるのかな?って思ったんだ。
C#を悪く言ってるつもりはないんだけど、そう聞こえてたらごめん。

137:デフォルトの名無しさん
08/02/05 21:43:06
いやいや別に無問題

138:デフォルトの名無しさん
08/02/05 21:43:15
ArrayListって2.0ではListにとってかわられたんじゃないの?

139:デフォルトの名無しさん
08/02/05 21:43:15
悪く言ってるようには聞こえてないよ

140:デフォルトの名無しさん
08/02/05 21:43:55
たしかにもうListばかり使ってるな

141:デフォルトの名無しさん
08/02/05 21:44:30
>>138
非ジェネリックのクラスを使う事ってある?
俺にはあんまり目的が思いつかんなー

142:デフォルトの名無しさん
08/02/05 21:46:27
Silverlightでは非ジェネリックコレクションは削除されるって噂だよ

143:デフォルトの名無しさん
08/02/05 21:48:26
Silverlightみたいな環境だとジェネリックって重いような木がするんだけどどうなんだろ

144:デフォルトの名無しさん
08/02/05 21:51:26
ジェネリックって重いってどこから出てきた都市伝説だよ

145:デフォルトの名無しさん
08/02/05 21:52:17
重いっつかコードが肥大化するでしょ?
Webにはどうなんかなーと

146:デフォルトの名無しさん
08/02/05 21:52:26
ArrayList使うくらいならList<object>使った方がなんぼかマシだ

147:デフォルトの名無しさん
08/02/05 21:53:27
ジェネリックが特殊化されるのは値型の場合のみでしかも実行時だよ

148:デフォルトの名無しさん
08/02/05 21:54:19
テンプレートじゃあるまいに

149:デフォルトの名無しさん
08/02/05 21:59:14
だいたいランタイムライブラリはクライアントにあるのに、
Webだからどうこうって意味不明だろ。

150:デフォルトの名無しさん
08/02/05 22:13:27
ArrayList使いまくってて
しかもジェネリックが搭載されたのを知らないやつは
まだ余裕で使ってるぜ?
1.1縛りな開発とかだと知っててもジェネリック使えないしな

List<T>に慣れるとArrayListには戻れんな

151:デフォルトの名無しさん
08/02/05 22:20:05
そもそもジェネリックって何の事かわかってない
C#はじめたばっかりの俺

ぐぐってみる

152:デフォルトの名無しさん
08/02/05 22:20:27
WPFはGDI+にとってかわるのかな?

153:デフォルトの名無しさん
08/02/05 22:24:21
WPFはノウハウが全く違うから普及するのに10年ぐらいかかりそうだな

154:デフォルトの名無しさん
08/02/05 22:26:21
Hashtableはよく使う。


155:デフォルトの名無しさん
08/02/05 22:37:17
>>152
WPFのソフトウェアレンダリングコードはGDI+からだいぶ流用したらしい。
社内的にはとってかわってるのかもね。

156:デフォルトの名無しさん
08/02/05 22:41:29
>>154
何か理由があって使ってるの?

157:デフォルトの名無しさん
08/02/05 22:43:29
画像とハッシュテーブルがどうからむのかよくわからん(´・ω・`)

158:デフォルトの名無しさん
08/02/05 22:43:35
Hashtableは名前がダサい
HashTableならいいのに

159:デフォルトの名無しさん
08/02/05 22:45:03
C#で作ったプログラムは必ず使う側に.NETが入っている必要があるんでしょうか?

160:デフォルトの名無しさん
08/02/05 22:45:28
いいえ

161:デフォルトの名無しさん
08/02/05 22:47:13
.NETがいらないC#プログラムを作るにはどうしたらいいんでしょうか?
using System;とかありますがああゆうの全部.NETのクラスライブラリだとかなんですか?

そこら辺のことが書いてあるサイトとかないでしょうか

162:デフォルトの名無しさん
08/02/05 22:49:27
>>161
無理
自分で1からコンパイラ作れば可能だけどさ

163:デフォルトの名無しさん
08/02/05 22:49:50
>>156
マルチスレッド絡み、やや微妙な制約はあるけどね。
ほんとはjavaのConcurrentHashMapだったかみたいな
専用のがあるといいんだけど。


164:デフォルトの名無しさん
08/02/05 22:50:17
>>161
mono

165:デフォルトの名無しさん
08/02/05 22:51:17
>>162
コンパイラ作るだけじゃダメ
CLIを実装しないと

Silverlightは.NETじゃないといえば.NETじゃないかも

166:デフォルトの名無しさん
08/02/05 22:53:24
>>165
C#をネイティブコードにするコンパイラがあればいいんだろ。
別にILしなければならない理由はない。

167:デフォルトの名無しさん
08/02/05 22:54:58
ライブラリどうすんのよ…


168:デフォルトの名無しさん
08/02/05 22:55:00
ネイティブにして、移植したライブラリを使用したとして、
その環境は .NET ではないと言えるのだろうか。

169:デフォルトの名無しさん
08/02/05 22:55:01
すまんCLIはいらないみたい
でも言語仕様に記載されてるBCL(標準クラスライブラリ)は全部実装する必要がある

170:デフォルトの名無しさん
08/02/05 22:55:37
c#暦1ヶ月です。
MSDNのページがさっぱり理解できないんですが、ある程度使えるようになったら読めてくるもんなのでしょうか?

171:デフォルトの名無しさん
08/02/05 22:58:43
日本語版は理解できなくても無理はない
英語版読め

172:デフォルトの名無しさん
08/02/05 22:59:32
つーかどこが分からんの?

173:デフォルトの名無しさん
08/02/05 22:59:34
>>170
カンでさがしてサンプルコード張って動かしてみるのが正しい使いかた
理解するんじゃない感じるんだ

174:デフォルトの名無しさん
08/02/05 22:59:42
クラスの解説を読めるようになるのは初心者脱出の第一歩だな
C#の言語仕様についての説明のページはVB.NETと違って初心者向けに書かれてないから結構難しい

175:デフォルトの名無しさん
08/02/05 23:00:11
なんでC#ってネイティブコード吐けないんだろ

176:161
08/02/05 23:00:46
monoはうにx版.NETみたいな感覚でした、それは置いておいて無理ですか、把握しましたありがとう

177:デフォルトの名無しさん
08/02/05 23:01:40
無理じゃないと言っているのだが。

178:デフォルトの名無しさん
08/02/05 23:01:44
>>175
.NETを使うために作られた言語だから

179:デフォルトの名無しさん
08/02/05 23:01:45
一応マルチプラットフォームを考えてるんだろうが、
だったら MS が色んなプラットフォームで処理系作りやがれと。

180:デフォルトの名無しさん
08/02/05 23:02:45
吐けないんじゃない。吐かないだけ。

181:デフォルトの名無しさん
08/02/05 23:03:27
馬鹿でかいBCLが障害

182:デフォルトの名無しさん
08/02/05 23:03:51
>>175
フレームワーク使う言語としては正しいけどね・・・

183:デフォルトの名無しさん
08/02/05 23:04:12
>>177
馬鹿?

184:デフォルトの名無しさん
08/02/05 23:04:17
ネイティブコード吐ければもっと普及すると思う

185:デフォルトの名無しさん
08/02/05 23:04:54
何でネイティブコードにこだわってるんだ?馬鹿なの?

186:デフォルトの名無しさん
08/02/05 23:05:26
>>185
そこは突っ込みどころと違う

187:デフォルトの名無しさん
08/02/05 23:06:24
>>185
バカはお前だろ

188:デフォルトの名無しさん
08/02/05 23:06:35
そもそも.NETを普及させるための言語なわけだから
ネイティブコードを吐けるようにして普及を図ったところで意味がない

189:デフォルトの名無しさん
08/02/05 23:07:04
CPU ごとに別のマシン語はかないといけないとなると
処理系作るの面倒だし・・・。

190:デフォルトの名無しさん
08/02/05 23:07:04
もう.NETとかいう思想自体が古いけどな

191:デフォルトの名無しさん
08/02/05 23:08:17
>>175
いきなりネイティブコード吐くとリフレクションやLCGと相性悪そうだがその辺考えてみた?

192:170
08/02/05 23:08:26
MSDNの読み方というか、歩き方みたいなのがいまいち分からんのです。
ググる時も、大抵先頭にくるMSDNはなるべく避けて、@ITとかのサイトに逃げてます・・・
機械翻訳ぽいのがどうにも

193:デフォルトの名無しさん
08/02/05 23:08:32
>>190
何が古いんだ?具体的にどうぞ。

194:デフォルトの名無しさん
08/02/05 23:10:18
新しいのが出てないのに古いとはなかなか言い辛いでしょう

>>192
俺がMSDN渡り歩けるようになったのはプログラミング歴5年目くらいです
非常に遅いな

195:デフォルトの名無しさん
08/02/05 23:10:32
というかネイティブコードじゃないこととフレームワークは関係ないだろ。

196:デフォルトの名無しさん
08/02/05 23:12:17
>>192
基本的にMSDNはリファレンス。辞書。
分からないときに引くものであって、教科書じゃない。
MSDN2になって翻訳は随分まともになったと思うが。

197:デフォルトの名無しさん
08/02/05 23:13:07
>>192
@ITは正しい選択

198:デフォルトの名無しさん
08/02/05 23:13:54
まあ変なVB系Tipsサイトよりは

199:デフォルトの名無しさん
08/02/05 23:14:04
そしてブーデー川俣の記事読むのか

200:デフォルトの名無しさん
08/02/05 23:17:31
.NET Tipsで十分場合が多い

201:デフォルトの名無しさん
08/02/05 23:18:13
緑のバイク

202:デフォルトの名無しさん
08/02/05 23:19:46
C#、でぐぐってでた1ページ目が日本語C#情報の9割だと思う俺

203:デフォルトの名無しさん
08/02/05 23:20:18
むしろ9割9分くらいだろ

204:デフォルトの名無しさん
08/02/05 23:24:27
何件表示するかの設定によるんじゃ

205:デフォルトの名無しさん
08/02/05 23:54:25
多次元配列の初期化で、配列初期化子は変数かフィールド初期化子の中でのみ使用できます。新しい式を使用してください。
というエラーが取れなくて困っています。
int[ , ] hoge = new int[ , ] {
 { 1, 2 },
 { 1, 2 }
};
は問題ないのに、
int[][ , ] hoge = new int[][ , ] {
 { new int[]{ 1, 2 }, new int[]{ 1, 2 } }, // ★
 { new int[]{ 1, 2 }, new int[]{ 1, 2 } }, // ★
};
とすると、★の行を指して上記のエラーがでます。
intからint[]に型を変えただけだと思っているのですが、何が違うのでしょうか。

206:デフォルトの名無しさん
08/02/05 23:58:49
>>205
int[]の[,]なんだから逆
int[,][]

207:デフォルトの名無しさん
08/02/06 00:00:10
基本やり直し。

配列初期化子ってわかる?

208:デフォルトの名無しさん
08/02/06 00:01:33
>>207
お前は分かってるのかよ。わかってるなら書け。

209:デフォルトの名無しさん
08/02/06 00:01:51
>>207
そんな大げさな間違いじゃない

210:デフォルトの名無しさん
08/02/06 00:03:03
>>206
ほんとだ…
ありがとうございます。

211:デフォルトの名無しさん
08/02/06 00:21:43
>>179
いろんなプラットフォームありますよ。
x86, x64, IA-64
.NET Compact Framewrok
.NET Micro Framework
どれもWindows上というのはご愛敬w。

後は申し訳程度にSSCLIがFreeBSD対応だった気がする。

212:デフォルトの名無しさん
08/02/06 00:23:00
Linuxはmonoがあるしなぁ
MSも支援してるし

213:デフォルトの名無しさん
08/02/06 00:25:52
質問した当人ですがあらゆるWindows上で使えたらなぁとか思ってました

214:デフォルトの名無しさん
08/02/06 00:26:23
フィールドって言葉がイマイチなじめない
メンバ変数って言いたくなる

215:デフォルトの名無しさん
08/02/06 00:46:59
>>213
「あらゆるWindows」ってなにがあるの?

216:デフォルトの名無しさん
08/02/06 00:48:40
Windows1.0

217:デフォルトの名無しさん
08/02/06 00:49:29
ごめんなさい凡そ今いるWindowsユーザーです
だから.NETなくて良いって条件さえあればVistaは知らないけどいけるかな

218:デフォルトの名無しさん
08/02/06 00:49:50
最後にとが抜けたorz

219:デフォルトの名無しさん
08/02/06 00:50:30
.net入れればいいじゃん。

220:デフォルトの名無しさん
08/02/06 01:13:06
今時.NETくらい誰でも入れてるだろ、とかいう認識の俺はだめなんだろうな

221:デフォルトの名無しさん
08/02/06 01:14:33
.NET程度が使えない環境は切り捨てられるべき

222:デフォルトの名無しさん
08/02/06 01:24:51
private void foo(string hoge, string piyo)
{
 いろいろ処理
 foo(fuga, hogehoge);
}



private void foo(ref string hoge, ref string piyo)
{
 string hoge0 = hoge;
 string piyo0 = piyo;
 いろいろ処理
 foo(ref fuga, ref hogehoge);
}

どっちが良いんでしょうか?
渡す文字列は100文字程度で再帰による関数の呼び出しは100~5000回くらいです
後者が良い気がするのですが、文字列100文字程度なら前者のがいいのかなぁと考えてます

223:デフォルトの名無しさん
08/02/06 01:26:39
やっとまともな質問だなw

後者でいいよ、むしろなんで前者選ぼうと思ったの?

224:デフォルトの名無しさん
08/02/06 01:27:31
      ___    ━┓
    / ―\   ┏┛
  /ノ  (●)\  ・
. | (●)   ⌒)\
. |   (__ノ ̄  |
  \        /
    \     _ノ
    /´     `\
     |       |
     |       |

225:222
08/02/06 01:28:48
>>223
やっぱりそうですか

>>224
参照渡しって初めて知りまして、なんかやばいですか?

226:デフォルトの名無しさん
08/02/06 01:29:08
5000plyも呼べたっけ?

227:222
08/02/06 01:31:12
実際はあんな形ではないんですが、想定してるのは5000回くらいまでです

228:デフォルトの名無しさん
08/02/06 01:31:22
ああ末尾ね

229:222
08/02/06 01:36:42
すみません、fugaとhogehogeはいろいろ処理、と書かれてる部分で引数を元に
値を設定されたstring型です

230:デフォルトの名無しさん
08/02/06 01:43:15
>>225
なんかやばいかどうかは使いどころ

たとえば,参照渡しだと副作用完了点が関数内部まで拡大する可能性がある.
 2*n*val_func(n) ≠2*n*ref_func(n)

かもしれない

231:デフォルトの名無しさん
08/02/06 01:48:55
とりあえず自宅のC#3.0で下記を試したら,一つだけ結果違った
static void Main(string[] args) {
    int n;
    n = 5;
    Console.WriteLine(2 * n * valfunc(n));
    n = 5;
    Console.WriteLine(2 * n * reffunc(ref n));

    n = 5;
    Console.WriteLine((2 * valfunc(n)) * n);
    n = 5;
    Console.WriteLine((2 * reffunc(ref n)) * n);
    Console.ReadLine();
}
private static int valfunc(int n)     { n = -n; return n; }
private static int reffunc(ref int n) { n = -n; return n; }

あと再帰に関してはrefもvalも計算コストはそんなに変わらないと思っている.
とある言語の実装だと「refは,呼び出し元でコピーした変数を値渡しして,戻ってきたら本物に上書き」みたいなことやってたみたい.

232:222
08/02/06 01:53:51
参照渡しじゃなくてポインタ使えればなぁ、と思うんだけどそうもいかないんですよね

>>230
それだと非常にやばいです、それとあまり差がないんですか、ありがとうございます
どの道わからなければ安全そうな値渡しにしようと思ってたのでこれでいってみます
ありがとうございました

233:デフォルトの名無しさん
08/02/06 02:05:19
C#ってオブジェクト渡しは全部参照渡しみたいなもんじゃないの?

234:デフォルトの名無しさん
08/02/06 02:07:22
参照型は参照渡し
値型は値渡し

235:デフォルトの名無しさん
08/02/06 02:07:53
FileInfoとか渡したらどうなるんだろうね

236:デフォルトの名無しさん
08/02/06 02:09:55
参照だろ

237:デフォルトの名無しさん
08/02/06 07:28:13
stringは参照渡しだからrefなんざつけんでいい
stringの代入はコピーではなくポインタを代入してるだけ

238:デフォルトの名無しさん
08/02/06 07:40:12
>>232
stringを渡すときrefつけるのとつけないので結果が変わる場合があるのはわかってる?

239:デフォルトの名無しさん
08/02/06 08:23:49
>>234
参照型を値で渡すのと参照渡しは違うよ。
揚げ足取りじゃなくて全然違う。

240:デフォルトの名無しさん
08/02/06 09:26:56
なぜ説明を書かないのだろう。

241:デフォルトの名無しさん
08/02/06 09:59:58
揚げ足取りだから

242:デフォルトの名無しさん
08/02/06 10:34:02
MSDNでrefで検索して最初に出て来るページにすっかり書いてあるだろJK

243:デフォルトの名無しさん
08/02/06 11:03:23
メソッド内で生成された参照型のインスタンスへの参照を、呼び出し元で受け取るには、refなりoutなりを使って参照の参照を渡す必要がある。(returnは別として)
呼び出し元で作成したインスタンスを操作するなら、インスタンスの参照を渡せばいいから、refはいらない。

引数をメソッド内で変更したい場合、Stringみたいに操作する度に新しいインスタンスが生成されるタイプのクラスは前者。StringBuilderみたいに新たなインスタンスを生成せずに操作できるタイプのは後者。

244:デフォルトの名無しさん
08/02/06 11:16:06
読み返してみるとくどくて意味不明だな。すまん。
徹夜明けだからもう寝るわ。

245:デフォルトの名無しさん
08/02/06 14:51:23
using System;
using System.Text;

namespace ConsoleApplication1{
  class Program
  {
   static void Main(string[] args)
   {
    StringBuilder strbld = new StringBuilder("Start");
    EditValue(strbld);
    Console.WriteLine(strbld.ToString()); //出力:Start+Edit

    ChangeValue(ref strbld);
    Console.WriteLine(strbld.ToString()); //出力:Changed

    NotChangeValue(strbld);
    Console.WriteLine(strbld.ToString()); //出力:Changed

    Console.ReadKey(true);
   }
   static void EditValue(StringBuilder value)
   { value.Append("+Edit"); }

   static void ChangeValue(ref StringBuilder value)
   { value = new StringBuilder("Changed"); }

   static void NotChangeValue(StringBuilder value)
   { value = new StringBuilder("NotChanged"); }
  }}

こういうことか。勉強になった。Thx

246:デフォルトの名無しさん
08/02/06 15:00:13
違うだろ

247:デフォルトの名無しさん
08/02/06 15:06:43
参照型の参照渡しはポインタtoポインタ(**object)だな
まぁ,C風に覚えてもかまわないと思われ

248:デフォルトの名無しさん
08/02/06 15:16:11
>>246
どう違うの?
出力結果を見ると違わないんだけど。
アホにも分かるように教えてくれ。

249:デフォルトの名無しさん
08/02/06 15:22:19
>>248
>>246 ではないが NotChangeValue の後が違うかと。

250:デフォルトの名無しさん
08/02/06 15:29:56
ん?stringもref stringも
関数内で引数を書き換えなきゃ変わらんだろ

251:デフォルトの名無しさん
08/02/06 15:48:50
あーそうか、ChangeValueとかNotChangeValueとかいう関数名が分かってないようにとられた原因か。
ChangePtrとNotChangePtrに名前を変更して読んでちょうだい。

上記二つのメソッドは参照の参照を変更しようとしているから、
参照渡しをしないNotChangePtrの方は当然参照が変更されない

EditValueというメソッドは、参照型を値渡しで受け取り、それのインスタンスメソッドによって
インスタンス自身が変化する。

こういう認識でいいんだよね?

252:デフォルトの名無しさん
08/02/06 15:51:24
>>250
意味分からん。
コードで書くとどういうこと?



253:デフォルトの名無しさん
08/02/06 15:52:24
他Formから値を参照したいのだがわからないww
初心者過ぎて笑われそうだが…
Form1,2で
1に設置しているRadiobuttonをCheckすることで
2に値の変化を与えたい。
わかりにくい説明ではあるが誰か教えてくださいな^ω^

254:デフォルトの名無しさん
08/02/06 15:53:18
>>249
コンパイルして走らせてみた?
出力結果は間違いないよ?

255:デフォルトの名無しさん
08/02/06 15:53:45
>>253
C#の基礎というかプログラミングの基礎のページ見て来い

256:デフォルトの名無しさん
08/02/06 15:55:22
>>253
"デリゲート"でググれ

257:デフォルトの名無しさん
08/02/06 15:59:35
すまんID出ないんだったな。

>>245
>>248
>>251
>>254

全部同一人物です。
以後コテハン245になるとしよう。




258:デフォルトの名無しさん
08/02/06 16:00:24
>>250
static void Main( string[] args )
{
    string str = "250 は";
    Manuke( str );
    Console.WriteLine( str );
    Teinou( ref str );
    Console.WriteLine( str );
    Console.ReadKey();
}

static void Manuke( string s )
{
    s = "間抜け";
}

static void Teinou( ref string s )
{
    s = "低能";
}


259:坊
08/02/06 16:03:50
ありがとっす^ω^

260:坊
08/02/06 16:05:29
あっ
>>253
ですww
困ったらまたきますんでw

261:254
08/02/06 16:05:47
>>258

禿同。

参照渡しと値渡しの違いって中級者でも分かってない人が多いって記事をどっかで見たことある。

262:デフォルトの名無しさん
08/02/06 16:06:01
>>258
そんなレベルの話してたのか?

263:262
08/02/06 16:07:05
あ、値渡しはともかく参照渡しってCのアドレス(ポインタ)渡しと結局同じだと思ってたけど違うの?って意味な

264:デフォルトの名無しさん
08/02/06 16:08:55
>>258
だからそうやって引数を書き換えなきゃ同じだろ

265:デフォルトの名無しさん
08/02/06 16:11:19
>>264
彼らは参照渡しは知ってても使い方を知らないんだろう

266:デフォルトの名無しさん
08/02/06 16:13:00
>>258が話の流れと日本語を読めないってことだけは分かった

267:デフォルトの名無しさん
08/02/06 16:14:53
>>263
まあ凡そ。
それを大前提に進んでた話なんだけど>>258が爆発した

268:デフォルトの名無しさん
08/02/06 16:16:08
かわいそうな>>258がいるスレ

269:デフォルトの名無しさん
08/02/06 16:27:43
で、話の大元の>>222に立ち返ったとして何を議論してたんだっけ?



270:デフォルトの名無しさん
08/02/06 16:32:29
>>222は前者でいいってことじゃね
余計な副作用を与えないために

271:デフォルトの名無しさん
08/02/06 18:05:58
>>247
というか、むしろそのほうが分かりやすいような気が
「参照情報」なんて回りくどい言い方せずに、「アドレス」って言ったほうがイメージが伝わりやすいような

272:デフォルトの名無しさん
08/02/06 18:36:51
>>271
根本に返って冷静に考えてみ。
アドレスの方が本来間接的な表現な上に間違ってるでしょ。

参照をもし言い換えるのなら、俺なら「位置情報」と言うな。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5372日前に更新/190 KB
担当:undef