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

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

C♯相談室 Part11

1 :名無しさん♯:03/08/19 12:15

(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。


過去スレ・関連リンクは>>2-5あたり。

ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10

2 :名無しさん♯:03/08/19 12:16
過去スレ
Part10 http://pc2.2ch.net/test/read.cgi/tech/1051842450/
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html

関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D

3 :デフォルトの名無しさん:03/08/19 13:11
2

4 :デフォルトの名無しさん:03/08/19 14:29
値型をボクシングするときは別のメモリ領域に値がコピーされてそこをobject型インスタンスが参照するんですか?
それとも値型自体のアドレスを参照すんるでしょうか?

5 :デフォルトの名無しさん:03/08/19 16:33
この変更は漏れ的にも大賛成。
ttp://blogs.gotdotnet.com/EricGu/commentview.aspx/508e8570-ea80-4555-9d67-866fe8741fc2

6 :デフォルトの名無しさん:03/08/19 16:38
英語読めないんで訳していただけないでしょうか?
エキサイトで翻訳しても意味がわかりません、、

7 :デフォルトの名無しさん:03/08/19 20:51
MouseMoveって1pixel動かしただけで呼び出されるんですね

8 :デフォルトの名無しさん:03/08/20 08:43
>>7
そりゃどの言語だっておんなじじゃ

9 :デフォルトの名無しさん:03/08/20 08:56
C#ではダブルバッファ無いんだね

10 :デフォルトの名無しさん:03/08/20 09:18
ある

11 :デフォルトの名無しさん:03/08/20 12:05
privateフィールドの配列に要素アクセスしたいんですがメソッド作らないとできないのでしょうか?
↓こういう処理を
int num = (new Hoge()).GetAtHoge(2);
class Hoge {
private int[10] hoge;
public GetAtHoge(int index) {
return hoge[index];
}
}

↓プロパティとかインデクサとか使ってこういうのはできませんか?
int num = (new Hoge()).Hoge[2];


12 :デフォルトの名無しさん:03/08/20 12:13
> プロパティとかインデクサとか使ってこういうのはできませんか?
できますよ
メソッドというかクラス作って

13 :デフォルトの名無しさん:03/08/20 12:57
public int[] Hoge {
get { return hoge; }
}

14 :デフォルトの名無しさん:03/08/20 13:12
内容を保持したまま配列のサイズを変更することは可能ですか?
VBやVB.NETで言うところのRedim相当のことがやりたいのですが・・

15 :デフォルトの名無しさん:03/08/20 13:15
ArrayList使え

16 :デフォルトの名無しさん:03/08/20 14:07
なるほどできました。ありがとうございます。

17 :デフォルトの名無しさん:03/08/20 14:29
時期バージョンではMenuItemにTagメンバをつけとくれ。

18 :デフォルトの名無しさん:03/08/20 15:46
もともとC++野郎なのですが、C#(というか.NETやJava)の
ガーベジ・コレクションというやつがイマイチ生理的に気に入りません。
デストラクタがいつ働くか分からない?? なにそれ??って感じです。
一応、どんなものかは分かっているのですが、その魅力というか、
便利さを教えてもらえないでしょうか。

19 :デフォルトの名無しさん:03/08/20 16:07
多くの場合、明示的な解放がいらない

20 :デフォルトの名無しさん:03/08/20 16:13
>>18
魅力はJavaとかC#やってC/C++に移行した人だけが体験できるものであって
逆の人は気持ち悪いだろうね

ただ、コレだけはいえる。
JavaとかC#の場合、
そういうこと考えてプログラミングする人と
そうでない人のコードは差が歴然

21 :デフォルトの名無しさん:03/08/20 16:13
>>18
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_01/idnfw11_01_01.html

22 :デフォルトの名無しさん:03/08/20 16:16
>>20
俺、元々C++屋だったけど、別に気持ち悪くないよ。
どうせ、C++でクラス作るときもメモリ管理用のラッパクラス作って参照カウントとかしてたし、
それに比べたら言語レベルでサポートされたガベコレの方がいいよ。


23 :18:03/08/20 16:28
>>19
そうですね。
でも自分はまだ、明示的に解放したほうが精神衛生上いいんですがw
いずれ慣れるのかな・・・。

>>20
なんか、GCが常にオブジェクトの有効期間を監視していることによる
パフォーマンスの低下とかが気になっちゃうなんですよね。
それと引き換えにメモリリークの危険がなくなり、手間が省けるように
なったってことなんでしょうが。。。

>>21
リンク先みました。まさに 取り上げられた という気分ですw

24 :デフォルトの名無しさん:03/08/20 16:56
>>23
参照カウントとか使って自分で自動メモリ管理コード書いたり、
shared_prt とか使うよりは、
Java とか .NET のガベコレの方がパフォーマンスいいよ。


25 :18:03/08/20 16:59
なにが気に入らないといって、C#のデストラクタは呼ばれないことが
あるって点かなあ。
それがイヤならusingで囲めって話なんでしょうけど、
openにはclose、mallocにはfree、newにはdelete、そして
コンストラクタにはデストラクタと、必ず対になるように書くように
教えられてきた人間にとってはけっこう抵抗あったりします。

26 :18:03/08/20 17:00
>>24
そうですか・・ コード量が減るのは実感してるんですが、
パフォーマンスについては他の要因も多くて、ガベコレが
既存のやり方と比べてどうなのか、というのはイマイチ実感できてないです。

27 :デフォルトの名無しさん:03/08/20 17:14
>>25
ならば、明示的に IDisposable.Dispose を呼ぶよう習慣化したらいいのでは?

28 :デフォルトの名無しさん:03/08/20 17:26
IDisposable は明示的に Dispose させる為のインタフェースでしょ
Dispose して当然じゃん

29 :デフォルトの名無しさん:03/08/20 17:30
「パフォーマンスの低下とかが気になっちゃう」香具師がドトネト触る方が
大いなる間違い

30 :18:03/08/20 17:31
>>27
そうですね・・・。明示的に廃棄(?)処理が必要なものは、
そうやってやる必要があるんでしょうね。

31 :デフォルトの名無しさん:03/08/20 17:33
パフォーマンスを気にしないプログラマは怖い
大いなる間違いもへったくれも、趣味グラマじゃなければ
選択の余地がないことのほうが多い

32 :デフォルトの名無しさん:03/08/20 17:37
いみふめ

33 :デフォルトの名無しさん:03/08/20 17:39
いちいち旧言語の機能とマップしないとものを考えられない奴はアホ

34 :デフォルトの名無しさん:03/08/20 17:41
>>25
それは俺も最初抵抗あった。
でも、using 文使えば問題ないし、割と慣れれる。

>>26
http://www.microsoft.com/japan/msdn/net/mag00/GCI.asp
↑この辺読めばガベコレについて分かるかと。


35 :デフォルトの名無しさん:03/08/20 17:42
>>33
ずいぶん効率の悪い人ですね。

36 :デフォルトの名無しさん:03/08/20 17:42
誰も旧言語の機能とマップなんてしてないわけだが。

37 :デフォルトの名無しさん:03/08/20 17:42
http://www.microsoft.com/japan/msdn/net/general/dotnetperftechs.asp

神話: ガーベジ コレクションは手作業で行うよりもつねに遅くなる
神話: JIT で処理されるプログラムはコンパイル済みのプログラムよりも実行速度が低い

38 :デフォルトの名無しさん:03/08/20 17:45
GCのパフォーマンス低下以前に
ニューニューしまくってパフォーマンス低下はありまくり。
ディレクトリ巡回して全てのファイルを表示するコード書くと
途中でカクカクするよ。

39 :デフォルトの名無しさん:03/08/20 17:47
>>38
それは自分のプログラムが悪いだけではないのかと小(ry

40 :デフォルトの名無しさん:03/08/20 17:49
>>39
じゃあヒープ使わないコード書いてミロ

41 :デフォルトの名無しさん:03/08/20 17:50
というか添削してやるからソースを出せと

42 :デフォルトの名無しさん:03/08/20 17:51
普通にプログラムしてればいいんだよ。

今まで綺麗にオブジェクト管理してたヤツ → 参照カウントや開放処理が楽になる
今までメモリリークなプログラム書いてたヤツ → ガベージコレクタ大活躍
それでもダメなヤツ → 「.NETは糞」発言

43 :デフォルトの名無しさん:03/08/20 17:53
C/C++をやってた人間がGCに出会った時、
なんの違和感もなく受け入れられるほうがヤヴァイ気がするんだが


44 :デフォルトの名無しさん:03/08/20 17:54
>>41
書けないなら黙ってろよカスが。

45 :デフォルトの名無しさん:03/08/20 17:55
なんでC/C++と比較するんだ。


46 :デフォルトの名無しさん:03/08/20 17:55

 ソ ー ス を 出 す の が 

 恥 ず か し い 方 が い ら っ し ゃ い ま す



47 :デフォルトの名無しさん:03/08/20 17:55
順序として >>41 の言い分が○かと

48 :デフォルトの名無しさん:03/08/20 17:55
誰も比較してないわけだが。

49 :デフォルトの名無しさん:03/08/20 17:57
>>48
>>26で比較してるじゃん

50 :デフォルトの名無しさん:03/08/20 17:59
>>38
ディレクトリ巡回して全てのファイルを表示するコードってニューニューしまくり??

51 :デフォルトの名無しさん:03/08/20 18:00
少なくとも優劣の話はしてないわけだが、
なぜそう比較の話になると過剰反応するかねえ

52 :デフォルトの名無しさん:03/08/20 18:02
優劣の話だと思っているのはおまえだけ

53 :デフォルトの名無しさん:03/08/20 18:02
優劣の話はしてないと思いますが…

54 :デフォルトの名無しさん:03/08/20 18:03
別の言語だから違和感とかいう問題じゃないんじゃない?

55 :デフォルトの名無しさん:03/08/20 18:06
>>48
お前のほうが過剰反応

っていうか、GCの実行ってコードからも指示できなかったっけ?

56 :デフォルトの名無しさん:03/08/20 18:46
>>43
C/C++ でメモリプールの管理とか、shared_ptr の実装の仕方知ってて、
かつ、GC の動作原理についてちゃんと分かってるなら
別に何の違和感もなく GC を受け入れられるよ。


57 :デフォルトの名無しさん:03/08/20 21:01
>>56
そんなヤシがC++を離れたがるかが疑問

58 :デフォルトの名無しさん:03/08/20 23:21
>>57
ヘッダ書くのがうざいっす。
くだらんながらも俺がC++に戻りたくない一番大きい理由・・・

GCはGCできちんとメモリが解放されるように
参照のゴミが残らないように気をつけなきゃいかんけど
仮にゴミが残ってても無駄にメモリ食うだけでハングの元にはならない。
もうメモリに十分余裕あるから解放済みポインタが残ってハングする可能性を含むより
多少のメモリの無駄があっても安全な方がいいよ。

59 :デフォルトの名無しさん:03/08/21 01:51
>>57
いや、普通にそんな奴でも C# に移ってるよ。
メモリ管理以外にも、プロパティとか
インターフェースとかデリゲートとか結構魅力的。
ライブラリも MFC 使うのに比べたら
.NET フレームワークのクラスライブラリは天国だし。
あと、58の言うヘッド書くのうざいっての激しく同意。



60 :デフォルトの名無しさん:03/08/21 03:09
>>57
C♯に移行する理由は、そういう低レベル(低層という意味)な問題じゃない。
現実的に便利なんだよね。
オレもヘッダはめんどくさい。

61 :デフォルトの名無しさん:03/08/21 04:00
勝手にやってくれるんだから勝手にやらせておけばいい

62 :58:03/08/21 08:32
あとイベントハンドラが言語レベルでサポートされてるのも大きいな。

63 :デフォルトの名無しさん:03/08/21 11:23
C++でwhile(cin>>a){処理}のように入力が成功したら繰り返すのはどうしたらいいんでしょうか?
while((bool)(a=int.Parse(Console.ReadLine())))
と書いてもbool値に変換できませんって怒られます。

64 :デフォルトの名無しさん:03/08/21 11:42
ほーう、C/C++屋はC♯に移行する人も多いのか。
Delphi屋は全然移行できないみたいだよ。

【.NET】C♯Builder Personal update 2【フリー】
http://pc2.2ch.net/test/read.cgi/tech/1058786955/

65 :デフォルトの名無しさん:03/08/21 12:34
>>63
false = 0, true = 0以外 と思ってませんか?

66 :デフォルトの名無しさん:03/08/21 13:07
>>63
それは int が bool に変換できないとかいう以前の問題な気が。

string line;
while( (line = Console.ReadLine()) != null)
{
int a = int.Parse(line);
}

あと、int を bool に変換したかったら a != 0 ってしないと駄目。
それに、int.Parse は変換できなかったら 0 返すんじゃなくて、例外出す。


67 :63:03/08/21 13:26
>>65,>>66
レスありがとうございます。>>66さんのコードでは何を入力したらループが終わるんでしょうか?
何も入力しないでエンターを押してもループが続くんですが。

68 :63:03/08/21 13:35
もしかしてwhile( (line = Console.ReadLine()) != null)は無限ループで
try{
int a=int.Parse(line);
}
catch{
break;
}

でループから抜けるっていうのでいいんですか?


69 :デフォルトの名無しさん:03/08/21 13:41
>>67
Ctrl+Zかな?

70 :デフォルトの名無しさん:03/08/21 13:46
Ctrl+C


71 :デフォルトの名無しさん:03/08/21 13:47
ああ、空行入力でループ抜けたかったら
!= null を != string.Empty に。


72 :デフォルトの名無しさん:03/08/21 13:58
>>68で抜けるのと>>71で抜けるのとどっちがいいんだろうか?

73 :デフォルトの名無しさん:03/08/21 14:01
>>71にきまってるだろ

74 :デフォルトの名無しさん:03/08/21 14:31
やれやれだぜ

75 :デフォルトの名無しさん:03/08/21 15:40
>>72
そりゃ仕様次第だろ。
リダイレクトとかパイプ使いたいんだったら ctrl+C で終わるようにしたほうがいい気がするし、
ctrl+C なんてものの存在を知らない人をターゲットにしたいんなら空行で終わりにした方が。


76 :デフォルトの名無しさん:03/08/21 16:27
っつーかさ、空行で終わるのもctrl+C で終わるのも仕様なんだったら両方実装するだろ。
どちらかにする意味がわからん


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

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

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