トップページ⇒tech
76コメント21KB

C♯相談室 Part11

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん♯NGNG

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


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

ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10
0002名無しさん♯NGNG
過去スレ
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
0003デフォルトの名無しさんNGNG
2
0004デフォルトの名無しさんNGNG
値型をボクシングするときは別のメモリ領域に値がコピーされてそこをobject型インスタンスが参照するんですか?
それとも値型自体のアドレスを参照すんるでしょうか?
0005デフォルトの名無しさんNGNG
この変更は漏れ的にも大賛成。
ttp://blogs.gotdotnet.com/EricGu/commentview.aspx/508e8570-ea80-4555-9d67-866fe8741fc2
0006デフォルトの名無しさんNGNG
英語読めないんで訳していただけないでしょうか?
エキサイトで翻訳しても意味がわかりません、、
0007デフォルトの名無しさんNGNG
MouseMoveって1pixel動かしただけで呼び出されるんですね
0008デフォルトの名無しさんNGNG
>>7
そりゃどの言語だっておんなじじゃ
0009デフォルトの名無しさんNGNG
C#ではダブルバッファ無いんだね
0010デフォルトの名無しさんNGNG
ある
0011デフォルトの名無しさんNGNG
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];
0012デフォルトの名無しさんNGNG
> プロパティとかインデクサとか使ってこういうのはできませんか?
できますよ
メソッドというかクラス作って
0013デフォルトの名無しさんNGNG
public int[] Hoge {
get { return hoge; }
}
0014デフォルトの名無しさんNGNG
内容を保持したまま配列のサイズを変更することは可能ですか?
VBやVB.NETで言うところのRedim相当のことがやりたいのですが・・
0015デフォルトの名無しさんNGNG
ArrayList使え
0016デフォルトの名無しさんNGNG
なるほどできました。ありがとうございます。
0017デフォルトの名無しさんNGNG
時期バージョンではMenuItemにTagメンバをつけとくれ。
0018デフォルトの名無しさんNGNG
もともとC++野郎なのですが、C#(というか.NETやJava)の
ガーベジ・コレクションというやつがイマイチ生理的に気に入りません。
デストラクタがいつ働くか分からない?? なにそれ??って感じです。
一応、どんなものかは分かっているのですが、その魅力というか、
便利さを教えてもらえないでしょうか。
0019デフォルトの名無しさんNGNG
多くの場合、明示的な解放がいらない
0020デフォルトの名無しさんNGNG
>>18
魅力はJavaとかC#やってC/C++に移行した人だけが体験できるものであって
逆の人は気持ち悪いだろうね

ただ、コレだけはいえる。
JavaとかC#の場合、
そういうこと考えてプログラミングする人と
そうでない人のコードは差が歴然
0021デフォルトの名無しさんNGNG
>>18
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_01/idnfw11_01_01.html
0022デフォルトの名無しさんNGNG
>>20
俺、元々C++屋だったけど、別に気持ち悪くないよ。
どうせ、C++でクラス作るときもメモリ管理用のラッパクラス作って参照カウントとかしてたし、
それに比べたら言語レベルでサポートされたガベコレの方がいいよ。
002318NGNG
>>19
そうですね。
でも自分はまだ、明示的に解放したほうが精神衛生上いいんですがw
いずれ慣れるのかな・・・。

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

>>21
リンク先みました。まさに 取り上げられた という気分ですw
0024デフォルトの名無しさんNGNG
>>23
参照カウントとか使って自分で自動メモリ管理コード書いたり、
shared_prt とか使うよりは、
Java とか .NET のガベコレの方がパフォーマンスいいよ。
002518NGNG
なにが気に入らないといって、C#のデストラクタは呼ばれないことが
あるって点かなあ。
それがイヤならusingで囲めって話なんでしょうけど、
openにはclose、mallocにはfree、newにはdelete、そして
コンストラクタにはデストラクタと、必ず対になるように書くように
教えられてきた人間にとってはけっこう抵抗あったりします。
002618NGNG
>>24
そうですか・・ コード量が減るのは実感してるんですが、
パフォーマンスについては他の要因も多くて、ガベコレが
既存のやり方と比べてどうなのか、というのはイマイチ実感できてないです。
0027デフォルトの名無しさんNGNG
>>25
ならば、明示的に IDisposable.Dispose を呼ぶよう習慣化したらいいのでは?
0028デフォルトの名無しさんNGNG
IDisposable は明示的に Dispose させる為のインタフェースでしょ
Dispose して当然じゃん
0029デフォルトの名無しさんNGNG
「パフォーマンスの低下とかが気になっちゃう」香具師がドトネト触る方が
大いなる間違い
003018NGNG
>>27
そうですね・・・。明示的に廃棄(?)処理が必要なものは、
そうやってやる必要があるんでしょうね。
0031デフォルトの名無しさんNGNG
パフォーマンスを気にしないプログラマは怖い
大いなる間違いもへったくれも、趣味グラマじゃなければ
選択の余地がないことのほうが多い
0032デフォルトの名無しさんNGNG
いみふめ
0033デフォルトの名無しさんNGNG
いちいち旧言語の機能とマップしないとものを考えられない奴はアホ
0034デフォルトの名無しさんNGNG
>>25
それは俺も最初抵抗あった。
でも、using 文使えば問題ないし、割と慣れれる。

>>26
http://www.microsoft.com/japan/msdn/net/mag00/GCI.asp
↑この辺読めばガベコレについて分かるかと。
0035デフォルトの名無しさんNGNG
>>33
ずいぶん効率の悪い人ですね。
0036デフォルトの名無しさんNGNG
誰も旧言語の機能とマップなんてしてないわけだが。
0037デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/net/general/dotnetperftechs.asp

神話: ガーベジ コレクションは手作業で行うよりもつねに遅くなる
神話: JIT で処理されるプログラムはコンパイル済みのプログラムよりも実行速度が低い
0038デフォルトの名無しさんNGNG
GCのパフォーマンス低下以前に
ニューニューしまくってパフォーマンス低下はありまくり。
ディレクトリ巡回して全てのファイルを表示するコード書くと
途中でカクカクするよ。
0039デフォルトの名無しさんNGNG
>>38
それは自分のプログラムが悪いだけではないのかと小(ry
0040デフォルトの名無しさんNGNG
>>39
じゃあヒープ使わないコード書いてミロ
0041デフォルトの名無しさんNGNG
というか添削してやるからソースを出せと
0042デフォルトの名無しさんNGNG
普通にプログラムしてればいいんだよ。

今まで綺麗にオブジェクト管理してたヤツ → 参照カウントや開放処理が楽になる
今までメモリリークなプログラム書いてたヤツ → ガベージコレクタ大活躍
それでもダメなヤツ → 「.NETは糞」発言
0043デフォルトの名無しさんNGNG
C/C++をやってた人間がGCに出会った時、
なんの違和感もなく受け入れられるほうがヤヴァイ気がするんだが
0044デフォルトの名無しさんNGNG
>>41
書けないなら黙ってろよカスが。
0045デフォルトの名無しさんNGNG
なんでC/C++と比較するんだ。
0046デフォルトの名無しさんNGNG

 ソ ー ス を 出 す の が 

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

0047デフォルトの名無しさんNGNG
順序として >>41 の言い分が○かと
0048デフォルトの名無しさんNGNG
誰も比較してないわけだが。
0049デフォルトの名無しさんNGNG
>>48
>>26で比較してるじゃん
0050デフォルトの名無しさんNGNG
>>38
ディレクトリ巡回して全てのファイルを表示するコードってニューニューしまくり??
0051デフォルトの名無しさんNGNG
少なくとも優劣の話はしてないわけだが、
なぜそう比較の話になると過剰反応するかねえ
0052デフォルトの名無しさんNGNG
優劣の話だと思っているのはおまえだけ
0053デフォルトの名無しさんNGNG
優劣の話はしてないと思いますが…
0054デフォルトの名無しさんNGNG
別の言語だから違和感とかいう問題じゃないんじゃない?
0055デフォルトの名無しさんNGNG
>>48
お前のほうが過剰反応

っていうか、GCの実行ってコードからも指示できなかったっけ?
0056デフォルトの名無しさんNGNG
>>43
C/C++ でメモリプールの管理とか、shared_ptr の実装の仕方知ってて、
かつ、GC の動作原理についてちゃんと分かってるなら
別に何の違和感もなく GC を受け入れられるよ。
0057デフォルトの名無しさんNGNG
>>56
そんなヤシがC++を離れたがるかが疑問
0058デフォルトの名無しさんNGNG
>>57
ヘッダ書くのがうざいっす。
くだらんながらも俺がC++に戻りたくない一番大きい理由・・・

GCはGCできちんとメモリが解放されるように
参照のゴミが残らないように気をつけなきゃいかんけど
仮にゴミが残ってても無駄にメモリ食うだけでハングの元にはならない。
もうメモリに十分余裕あるから解放済みポインタが残ってハングする可能性を含むより
多少のメモリの無駄があっても安全な方がいいよ。
0059デフォルトの名無しさんNGNG
>>57
いや、普通にそんな奴でも C# に移ってるよ。
メモリ管理以外にも、プロパティとか
インターフェースとかデリゲートとか結構魅力的。
ライブラリも MFC 使うのに比べたら
.NET フレームワークのクラスライブラリは天国だし。
あと、58の言うヘッド書くのうざいっての激しく同意。

0060デフォルトの名無しさんNGNG
>>57
C♯に移行する理由は、そういう低レベル(低層という意味)な問題じゃない。
現実的に便利なんだよね。
オレもヘッダはめんどくさい。
0061デフォルトの名無しさんNGNG
勝手にやってくれるんだから勝手にやらせておけばいい
006258NGNG
あとイベントハンドラが言語レベルでサポートされてるのも大きいな。
0063デフォルトの名無しさんNGNG
C++でwhile(cin>>a){処理}のように入力が成功したら繰り返すのはどうしたらいいんでしょうか?
while((bool)(a=int.Parse(Console.ReadLine())))
と書いてもbool値に変換できませんって怒られます。
0064デフォルトの名無しさんNGNG
ほーう、C/C++屋はC♯に移行する人も多いのか。
Delphi屋は全然移行できないみたいだよ。

【.NET】C♯Builder Personal update 2【フリー】
http://pc2.2ch.net/test/read.cgi/tech/1058786955/
0065デフォルトの名無しさんNGNG
>>63
false = 0, true = 0以外 と思ってませんか?
0066デフォルトの名無しさんNGNG
>>63
それは int が bool に変換できないとかいう以前の問題な気が。

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

あと、int を bool に変換したかったら a != 0 ってしないと駄目。
それに、int.Parse は変換できなかったら 0 返すんじゃなくて、例外出す。
006763NGNG
>>65,>>66
レスありがとうございます。>>66さんのコードでは何を入力したらループが終わるんでしょうか?
何も入力しないでエンターを押してもループが続くんですが。
006863NGNG
もしかしてwhile( (line = Console.ReadLine()) != null)は無限ループで
try{
int a=int.Parse(line);
}
catch{
break;
}

でループから抜けるっていうのでいいんですか?
0069デフォルトの名無しさんNGNG
>>67
Ctrl+Zかな?
0070デフォルトの名無しさんNGNG
Ctrl+C
0071デフォルトの名無しさんNGNG
ああ、空行入力でループ抜けたかったら
!= null を != string.Empty に。
0072デフォルトの名無しさんNGNG
>>68で抜けるのと>>71で抜けるのとどっちがいいんだろうか?
0073デフォルトの名無しさんNGNG
>>71にきまってるだろ
0074デフォルトの名無しさんNGNG
やれやれだぜ
0075デフォルトの名無しさんNGNG
>>72
そりゃ仕様次第だろ。
リダイレクトとかパイプ使いたいんだったら ctrl+C で終わるようにしたほうがいい気がするし、
ctrl+C なんてものの存在を知らない人をターゲットにしたいんなら空行で終わりにした方が。
0076デフォルトの名無しさんNGNG
っつーかさ、空行で終わるのもctrl+C で終わるのも仕様なんだったら両方実装するだろ。
どちらかにする意味がわからん
■ このスレッドは過去ログ倉庫に格納されています