ふらっとC#,C♯,C#(初心者用) Part41
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/06(土) 12:30:18「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part40
http://pc12.2ch.net/test/read.cgi/tech/1239599317/
0153デフォルトの名無しさん
2009/06/07(日) 21:53:32どんだけ劣等感持ってんだよw
0154デフォルトの名無しさん
2009/06/07(日) 21:55:43分からん
死ぬ前に教えてくれ
0155デフォルトの名無しさん
2009/06/07(日) 21:56:030156デフォルトの名無しさん
2009/06/07(日) 21:57:340157デフォルトの名無しさん
2009/06/07(日) 21:57:350158デフォルトの名無しさん
2009/06/07(日) 21:58:37あのさぁ、過剰反応つーか、埋め尽くすなよって話だろ
ここなんのスレだよ?言ってみろ
0159デフォルトの名無しさん
2009/06/07(日) 21:58:520160デフォルトの名無しさん
2009/06/07(日) 22:00:47反応しないでスルーできないのか? スルーしたら埋め尽くされないの。2ch初心者?
おまえみたいのがいるから荒れるんだよ。
0161デフォルトの名無しさん
2009/06/07(日) 22:02:12スルーしろっつってんだよ。馬鹿か?
0162デフォルトの名無しさん
2009/06/07(日) 22:02:150163デフォルトの名無しさん
2009/06/07(日) 22:02:41だまれ
0164デフォルトの名無しさん
2009/06/07(日) 22:03:02【魔力】書き込むと願いが必ず叶うスレ【強力】409
だろが
0165デフォルトの名無しさん
2009/06/07(日) 22:04:110166デフォルトの名無しさん
2009/06/07(日) 22:04:580167デフォルトの名無しさん
2009/06/07(日) 22:05:08VB スレに誤爆すんなよw
0168デフォルトの名無しさん
2009/06/07(日) 22:05:310169デフォルトの名無しさん
2009/06/07(日) 22:06:030170デフォルトの名無しさん
2009/06/07(日) 22:06:220171デフォルトの名無しさん
2009/06/07(日) 22:08:37上でも下でも出力は一緒ね、メンテの問題だけね、変なやついるから相手すんなよ
0172デフォルトの名無しさん
2009/06/07(日) 22:10:140173デフォルトの名無しさん
2009/06/07(日) 22:11:01分かってないな。そんな話じゃないだろ。
0174デフォルトの名無しさん
2009/06/07(日) 22:11:390175デフォルトの名無しさん
2009/06/07(日) 22:12:310176デフォルトの名無しさん
2009/06/07(日) 22:12:430177デフォルトの名無しさん
2009/06/07(日) 22:14:070178デフォルトの名無しさん
2009/06/07(日) 22:16:170179デフォルトの名無しさん
2009/06/07(日) 22:21:590180デフォルトの名無しさん
2009/06/07(日) 22:23:52お前変過ぎる、精神病院へいけ、今すぐ
0181デフォルトの名無しさん
2009/06/07(日) 22:28:46ふつうに考えてC#のコンパイル結果ってILの話だと思うぞ。
0182デフォルトの名無しさん
2009/06/07(日) 22:30:27スレが荒れているので聞き流されるかもしれないが、C#のコンパイラはあまり最適化などかけず、
かなり素直なコードを吐き出すんだが、それを知っているんだろうか。
public void SampleMethod1()
{
this.textBox1.Text = "1";
this.textBox2.Text = "1あ";
}
public void SampleMethod2()
{
string s = "1";
this.textBox1.Text = s;
this.textBox2.Text = s + "あ";
}
最初の質問の例を一旦コンパイルした後、ディスアセンブルするとこんな感じになる。
ほとんど最適化されてない。
0183デフォルトの名無しさん
2009/06/07(日) 22:35:400184デフォルトの名無しさん
2009/06/07(日) 22:39:250185デフォルトの名無しさん
2009/06/07(日) 22:42:36ILやメタデータって string s のローカル変数名を保持してんの?
もしそうなら恥ずかしい名前つけれないんだが。
0186デフォルトの名無しさん
2009/06/07(日) 22:45:18そんなことは当たり前のことだから省略した。長かったからな。
>>185
そう。だから.NET用の難読化ツールとかが出回ってたりする。
前のスレでも話題になった。
0187デフォルトの名無しさん
2009/06/07(日) 22:46:22保持はしていないね、直接定数をロードしている。
ちなみに const string s = 1; としてしまえばどちらも一緒。
0188デフォルトの名無しさん
2009/06/07(日) 22:49:09IL_0000: ldarg.0
IL_0001: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_0006: ldstr "1"
IL_000b: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0010: ldarg.0
IL_0011: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_0016: ldstr "1a"
IL_001b: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0020: ret
ちなみにこんな感じだね、しかしこんなのチクチク詰めていっても関係無くないw
あほくさあほくさ
0189デフォルトの名無しさん
2009/06/07(日) 22:50:030190デフォルトの名無しさん
2009/06/07(日) 22:50:38>>182 はガセ?
0191デフォルトの名無しさん
2009/06/07(日) 22:51:290192デフォルトの名無しさん
2009/06/07(日) 22:52:50.method public hidebysig instance void SampleMethod2() cil managed
{
.maxstack 3
.locals init (
[0] string s2)
L_0000: ldstr "1"
L_0005: stloc.0
L_0006: ldarg.0
L_0007: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox ImageComposer.Form1::textBox1
L_000c: ldloc.0
L_000d: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
L_0012: ldarg.0
L_0013: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox ImageComposer.Form1::textBox2
L_0018: ldloc.0
L_0019: ldstr "\u3042"
L_001e: call string [mscorlib]System.String::Concat(string, string)
L_0023: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
L_0028: ret
}
0193デフォルトの名無しさん
2009/06/07(日) 22:52:510194デフォルトの名無しさん
2009/06/07(日) 22:53:51名前になっているのではないかと疑ったので変えてみた。
0195デフォルトの名無しさん
2009/06/07(日) 22:56:46おや、おれのと結果違うね
.method private hidebysig instance void Test2() cil managed
{
// コード サイズ 41 (0x29)
.maxstack 3
.locals init (string V_0)
IL_0000: ldstr "1"
IL_0005: stloc.0
IL_0006: ldarg.0
IL_0007: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_000c: ldloc.0
IL_000d: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0012: ldarg.0
IL_0013: ldfld class [System.Windows.Forms]System.Windows.Forms.TextBox WindowsFormsApplication2.Form1::textBox1
IL_0018: ldloc.0
IL_0019: ldstr "a"
IL_001e: call string [mscorlib]System.String::Concat(string,
string)
IL_0023: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
IL_0028: ret
} // end of method Form1::Test2
まっ、こんなのはコンパイラのバージョン次第で何でてるくかなどコンパイラの作り手の勝手なわけですが。
0196デフォルトの名無しさん
2009/06/07(日) 22:59:040197デフォルトの名無しさん
2009/06/07(日) 23:01:27アセンブリ自体には含まれない
0198デフォルトの名無しさん
2009/06/07(日) 23:04:17おかしくね?
0199デフォルトの名無しさん
2009/06/07(日) 23:04:400200デフォルトの名無しさん
2009/06/07(日) 23:05:450201デフォルトの名無しさん
2009/06/07(日) 23:08:330202デフォルトの名無しさん
2009/06/07(日) 23:18:480203デフォルトの名無しさん
2009/06/07(日) 23:22:07C++サイコーっていいたいなら巣に帰れって事
0204デフォルトの名無しさん
2009/06/07(日) 23:25:41一人必死でC++叩いてる奴が荒らしてただけだよ。
0205デフォルトの名無しさん
2009/06/07(日) 23:30:090206デフォルトの名無しさん
2009/06/07(日) 23:34:100207デフォルトの名無しさん
2009/06/07(日) 23:37:31そしたら、こんなスレッドで嫌がらせなどしなくても自信もって生活できるようになる。
0208デフォルトの名無しさん
2009/06/07(日) 23:48:10>>142が反応した
という流れじゃなかろうか
0209デフォルトの名無しさん
2009/06/07(日) 23:50:46インクリメンタルサーチ式になったけど、あれはもう旧式に戻らないのか?オプションに設定項目はなかったが
進化だとしても旧式も用意して欲しいもんだ
0210デフォルトの名無しさん
2009/06/08(月) 00:03:540211デフォルトの名無しさん
2009/06/08(月) 00:15:42そうやって煽ってるのはおまえ一人だけなんだが。さっさと消えろカス。
0212デフォルトの名無しさん
2009/06/08(月) 04:04:23Google LABSのソースコード検索をマニュアルの補助に使っているのですが、
ちょっと疑問に思うコードがあったので教えてください。
リソースの解放を確実に行うため、usingを使ってスコープを定義すると
いう方法があると思うのですが、そのコードではこう書かれていました。
SQLiteDataReader reader;
using (reader = command.ExecuteReader())
{
何かの処理
}
この様にusingの外にDataReaderを定義して、usingの終わりで確実に
Dispose()されるのでしょうか?
0213デフォルトの名無しさん
2009/06/08(月) 04:12:07SQLiteDataReader reader;
try
{
}
finally
のように宣言することが推奨されている。
http://msdn.microsoft.com/ja-jp/library/yh598w02.aspx
0214デフォルトの名無しさん
2009/06/08(月) 04:14:03SQLiteDataReader reader;
{
try
{
// 何かの処理
}
finally
{
if (reader != null) ((IDisposable)reader).Dispose();
}
}
と同等だけど
using (SQLiteDataReader reader = command.ExecuteReader())
{
// 何かの処理
}
のように宣言することが推奨されている。
0215デフォルトの名無しさん
2009/06/08(月) 04:14:22using が実は現状確実にDispose してくれないという話的には Dispose され
ないと答えるけど、その話を除けば普通に
using(SQLLiteDataReader reader...)
とした場合と同等レベルには Dispose される。
これとそれの違いはスコープぐらいかな、意図がそれだけだと正直わか
らんが。
0216212
2009/06/08(月) 04:38:37ありがとうございました。
GCがいつ実行されるか分からないというのは一応承知してます。
安心してusing内に書くようにします。
0217デフォルトの名無しさん
2009/06/08(月) 05:08:35あー。GC とかは関係ない。
説明すると、現状の using には Abort されたときの耐性がない
という話。
インスタンスが生成された直後とローカル変数に代入されるまでの
間にスレッドが Abort されれば Dispose は呼ばれない。それも
含めて Finalizer が必要な理由にもなっている。
と思って今確認したら try の外でやってるし…なら try に入るまで
かな。
めったに問題になることじゃないので記憶の片隅においておくだけで
いい知識だが。
0218212
2009/06/08(月) 05:59:16ありがとうございます。
今の自分の知識ではお話の半分ほどしか分かりませんが、
滅多に問題になることはないということも含めてメモっておきます。
0219デフォルトの名無しさん
2009/06/08(月) 11:26:26切り替えをしたいと思い、フォームのコンテキストメニューから「切り替え」を
選択した際に、タイトルバーをなくす場合はフォームのTextを空にして
ControlBoxをfalseにしています。しかしControlBox=falseかつText=""
という操作をすると、それ以降Application.Exitで終了したときに
FormClosingイベントが呼ばれなくなってしまいます。
フォームの終了時に設定を保存したいのですが、終了処理はどこで
行えばいいでしょうか。よろしくお願いします。
0220デフォルトの名無しさん
2009/06/08(月) 13:03:06操作中に例外が発生してるんじゃないかな。
そうすると何も起こらず終了しているように見えることがある。
コントロールの存在・状態チェックはしっかりやろう。
0221219
2009/06/08(月) 13:39:01ありがとうございます。存在していないコントロールに触っているのかと思い、
原因を調べるために怪しい所を省いた以下のソースを実行してみたんですが
やはりフォームのTextを空にしてControlBox=falseとすると、FormClosing
のところにブレークポイントを設定してもヒットしなくなりました
ttp://sakuratan.ddo.jp/uploader/source/date112420.txt
こういう場合にはFormClosingイベント等は使えないのでしょうか。。。
0222デフォルトの名無しさん
2009/06/08(月) 13:41:22というか、Application.Exit()じゃなくてメインのフォームをクローズするのが普通じゃないの?
0223デフォルトの名無しさん
2009/06/08(月) 13:48:16そうですね、よく考えたらサブのフォームからでも
MainForm.Close()ってすればいいんですよね
Application.Exitの事は忘れます。ありがとうございました
0224デフォルトの名無しさん
2009/06/08(月) 14:31:59int[] a = {1,2,3};
int[] b = {4,5,6};
↓
int[] c = {1,2,3,4,5,6};
0225デフォルトの名無しさん
2009/06/08(月) 14:47:350226デフォルトの名無しさん
2009/06/08(月) 14:59:340227デフォルトの名無しさん
2009/06/08(月) 19:56:131.コントラクタのInitializeComponent();の後、
2.Loadイベントハンドラ内、
3.フォーム表示直後のShownイベントハンドラ内
の3つがあると思います。
1,2と3はフォームが表示される前か後ろかという違いがありますが、
1と2ではどういう違いがあるのでしょうか?
0228デフォルトの名無しさん
2009/06/08(月) 20:07:050229デフォルトの名無しさん
2009/06/08(月) 20:08:230230デフォルトの名無しさん
2009/06/08(月) 20:14:180231デフォルトの名無しさん
2009/06/08(月) 20:20:21なるほど、ということは、
コンストラクタ→New後、フォーム表示前に一度だけ実行
Loadイベントハンドラ→フォーム表示前に実行。リロードしたら再度実行される。
Shownイベントハンドラ→フォーム表示後一度だけ実行(リロードしても実行しない)
くらいに考えとけば良いですか。
0232デフォルトの名無しさん
2009/06/08(月) 20:30:490233デフォルトの名無しさん
2009/06/08(月) 20:35:350234デフォルトの名無しさん
2009/06/08(月) 20:47:44・・・もう一度マニュアル読んできます。
ありがとうございました。
0235デフォルトの名無しさん
2009/06/08(月) 20:50:260236デフォルトの名無しさん
2009/06/08(月) 20:51:310237sage
2009/06/08(月) 21:28:25fileSystemWatcher
でファイルを監視し、ファイルを読みこんで表示しようとしています。
string file = @"C:\tmp.txt";
public Form1()
{
InitializeComponent();
}
private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
string[] lines = System.IO.File.ReadAllLines(file, Encoding.GetEncoding("Shift_JIS"));
//MessageBox.Show(lines[1]);
label1.Text = lines[1];
label2.Text = lines[2];
label3.Text = lines[3];
label4.Text = lines[4];
label5.Text = lines[5];
}
監視はできているようなのですが、2度めの表示が行われません。
どこがまずいんでしょうか。
0238デフォルトの名無しさん
2009/06/08(月) 21:38:16↑静的なListって可能なんですか?
どうやってメモリを確保しているんですか。
0239デフォルトの名無しさん
2009/06/08(月) 21:39:22そのコードだけで判断しろってのも難しいが、ひょっとして
C# の Array(string[] とか) のインデックスは 0 から始まるぞ。
それはさすがにOK?
0240デフォルトの名無しさん
2009/06/08(月) 21:40:04可能
起動時に自動で1度だけ呼ばれる
0241デフォルトの名無しさん
2009/06/08(月) 21:49:47正確には、そのクラスが初めて使われるときね。
0242デフォルトの名無しさん
2009/06/08(月) 21:50:42一応の確認だけど、そのFileSystemWatcherはVSでツールボックスからD&Dしたものだよね?
0244デフォルトの名無しさん
2009/06/08(月) 22:01:22ビルドして何もクリックしてないのにキャプションバーが灰色になってる
ウィンドウズのバグ?
0245デフォルトの名無しさん
2009/06/08(月) 22:11:040246デフォルトの名無しさん
2009/06/08(月) 22:13:14どなたか知恵を貸してください。設計とか初めてなので><
0247デフォルトの名無しさん
2009/06/08(月) 22:17:570248デフォルトの名無しさん
2009/06/08(月) 22:22:43二次元配列使うとやりやすいと思う
int[,] ってやつ
後は
画像を分割して描画する(g.DrawImage)
バイナリ(orテキスト)でそのデータを保存する
保存したデータを読み込む
クリックした場所を取得する
等々
最低限上の機能は必要
そのほかマップの大きさだとかも必要だろうし
スクロールも必要
0249デフォルトの名無しさん
2009/06/08(月) 22:30:06単純にファイルを開くだけの処理を記述した場合、
1Kと100Mのファイルでは、オープンにかかる時間は違うものでしょうか?
挙動を見ると、単にファイルを開くだけ(Readしない)だと、
どちらも大して時間がかからないのですが、
大きなファイルは開くだけでも時間がかかるといわれまして。
試したところでは、大差ないので、読み込まずに開くだけであれば差は無いのかと
思ったのですが、違いがわかるかた教えていただけますか?
0250デフォルトの名無しさん
2009/06/08(月) 22:32:480251デフォルトの名無しさん
2009/06/08(月) 22:34:39static と言いつつ、静的(コンパイル時決定)じゃない。
あれにstaticって名前が付いてるのはC++を意識しすぎた結果。
実際にはクラス変数とでも呼ぶべきもの。
0252デフォルトの名無しさん
2009/06/08(月) 22:35:07違わない
その人は何か既成のアプリと勘違いしてるんじゃない?
■ このスレッドは過去ログ倉庫に格納されています