[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 01/29 10:32 / Filesize : 134 KB / Number-of Response : 576
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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

前スレ

ふらっとC#,C♯,C#(初心者用) Part29
pc11.2ch.net/test/read.cgi/tech/1216734995/

323 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 08:20:49 ]
>>321
まじ?

324 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:02:01 ]
>>320
> textBox1.Text += "a";
のことを言ってる? これは何が起こるかわかりやすくするためかと……

イベントハンドラにイベント足し続けてるから、
発生してるイベントが指数関数的に増えてるよ、ってことを言いたいのだと思うのだけど、
実行してみた?


……>>319 も言うように、>>308 が綺麗なコードを書いてるので読んだらいいと思うよ、うん

325 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:27:50 ]
>>323
釣られるな

326 名前:311 mailto:sage [2008/09/06(土) 09:48:08 ]
317やってみたら時間が経ったらバグった
おんなじことがイベントハンドラで起こるってこと?
イベントハンドラの意味とかよくわかってないけど

327 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 09:56:39 ]
>>326
>>311 でも同じような倍倍ゲームになってるというのは分かる?

328 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:18:01 ]
>>327
ボタン1実行中にボタン1が実行で・・・って事ですか?

329 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:21:31 ]
タイマー時刻が来るたびに += してたらそりゃなぁ。

330 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:25:45 ]
てことは+=じゃなくて=ならいいの・・・かな?

331 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:30:51 ]
>>330
eventだから = はできない。delegateむき出しならできるのだけど。



332 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:37:15 ]
難しいな〜
結局>>308のやり方が正解なの?


333 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:52:20 ]
・初期化の時
・ボタンを押した時
・タイマーで指定した時間が来た時
にそれぞれやることが混ざってるので、まずはそれを分けるべし。自分なりでいいから。

334 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:01:25 ]
つまり、タイマーで時間が来た時
×ボタンをくりかえす
○ボタンそのものでなく、ボタンの中のやりたいことをくりかえす
ってことか


335 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:03:11 ]
いや冷静にやりたいこと整理しなって。
毎回イベントハンドラに追加する必要がどこにある?
じゃ追加はだめなら=ならいい?って発想がもうおかしい。
=でいったい何するつもりだ?


336 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:04:12 ]
JavaScript しか使ったことないのかな?

JSと違って、タイマーStart後は一定周期で毎回デリゲートが呼ばれる
タイマーを設定するのは最初の1回(Loaded中)のみでOK
ボタンの押下時にタイマー始めたいなら、+= を Loaded に、Start() を ButtonClick に
あるいは、if(timer.Tick == null) timer.Tick += xxx


337 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:07:58 ]
そもそもタイマーはデザイン画面で貼りつければすむ話。
そしたらどっちのタイマーでも問題ない。
まWindowsタイマーでいいけどな。

イベントハンドラもデザイン画面で作ったらそれでしまい。


338 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:10:12 ]
>>336それもちょっとおかしいぜ?

339 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:35:08 ]
もうVBAでいいよ。やるきあるならVBだな。

340 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:48:12 ]
何が違うんだよw
VBでも同じ結果になるのは目に見えてる。


341 名前:デフォルトの名無しさん [2008/09/06(土) 11:49:13 ]
JScriptもあるよw



342 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:51:24 ]
VBならイベントを宣言的に作れる点?

343 名前:311 mailto:sage [2008/09/06(土) 12:11:25 ]
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = "a";
}
もしかしてツールからフォームだしてダブルクリックして
これでいいの?

344 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:16:09 ]
>>343
その状態で、Form1.Designer.csの
InitializeComponent()の中で何をやってくれているか観察してみ

345 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:19:52 ]
>>343
意味はないけどそれであってるw
System.Windows.Forms.TimerはInvokeいらないよ

346 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:32:14 ]
>>344
おおすげえwwこんなのがあったのかww

ちなみにこれの違いってなんなの?
this.button1 = new System.Windows.Forms.Button();
private System.Windows.Forms.Button button1;

347 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 12:44:46 ]
上は式で下はメンバの宣言だから全く別種の要素だけど

348 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 14:01:14 ]
>>343
そういうのがまあたいていの場合の普通のやり方。
ちょっといろいろデザイナ触ってみた方がいいんじゃないかな。


349 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 14:38:49 ]
File.Move()って一つ一つファイルを移動しても
まとめて移動するのに比べてオーバーヘッドありませんか?

350 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 19:44:46 ]
       r――――――‐ 、
       |なにして遊ぶ?|
       `ー――v――― ''
           ∧,,∧  ∧,,∧
      ∧,,∧ (´・ω・) (・ω・`). ∧,,∧    r――――――――‐ 、
     ( ´・ω).(O┬O) (O┬O) (ω・´ )  < 公園でかくれんぼ!|
     ( O┬O ∧,,∧. ∧,,∧)┬O )   `─――――――─‐ '
      ◎-J┴◎(  ´・) (・`  )┴し-◎
           ( .__ l) (l __ )
              `uロu'. `uロu'
       r―――.ヘ―────―‐ 、
       |じゃあ公園まで競争だ! |
       `ー―――――────‐ '



351 名前:デフォルトの名無しさん [2008/09/06(土) 21:43:31 ]
Visual C# 2008 でアプリケーションを作ったんですが、
うちでは動くのに、友人のPCだと動きません。

.NET Frameworkのバージョンが、うちは3.5で、
友人のPCが2.0なのが原因じゃないかと思うんですが、
下位バージョンの.NET Fameworkでも動くアプリを作るには、
どうすればいいのでしょうか?



352 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:45:26 ]
プロジェクト→プロパティ
対象のフレームワーク

353 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 21:56:34 ]
それやっても向こうに2.0 SP1入れるかバージョンリダイレクトかけるかしないと動かなくないか?

354 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 22:18:24 ]
素直にsetup作ればいいのに。
なんだか昔のVBerみたいな偏屈に見えるよ。

ちなみに、SP1の機能使ってなければSPなしの2.0環境でも動くんじゃないの?
つーか2.0はWin2000や98用が今のところ用意されてないSP2とかもうグダグダだな。

355 名前:デフォルトの名無しさん [2008/09/06(土) 23:24:16 ]
C#でのASP関連の質問はどこで聞けばいいの?WebProg板にASP.NETスレあるけど、やたら過疎ってるみたいなんだけど。

356 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:45:26 ]
C#でASP……できたっけ?

てのはともかくここでもそこでも好きにすりゃ良いんじゃね

357 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 23:55:57 ]
>>353
なんでやねん
まあSPでの変更点に引っかかる可能性はわずかにはあるが。


358 名前:396 [2008/09/07(日) 08:59:27 ]
エクスプローラの機能限定版(ドラッグ&ドロップが出来ないエクスプローラ)
的なファイル管理ツールを作ろうと思っています。
サンプルとなるものってどこかに無いでしょうか?
開発ツールはC#(VS2008)です。

359 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 09:13:23 ]
C#とは直接関係ないですが、ユーザーコントロールの件。

VisualStudio のソース用のテキストエディタには左側にブレークポイントを
置くエリアがありますが、あれはPanelコントロールのようなものなんでしょうか?
あのような機能のものを作ろうとした場合、ソーステキスト側のスクロール、
Fontのサイズ、行間距離、折り返しの有無とその変化などにすべて対応する
必要がありますが、簡単に実現する方法はないものでしょうか?


360 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 09:37:16 ]
やった事無いけど、テキストボックスにSendMessageで

EM_SETRECTで左に余白を作り
EM_GETFIRSTVISIBLELINEで先頭行の番号を取得し
EM_GETLINECOUNTで表示されてる行数を取得して・・とかやればいけるんじゃね?

361 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 10:55:56 ]
>>359
煽るわけじゃないが、そんな調子でそんな高機能なユーザーコントロールを
作ろうと思ってるわけ?

ちょっと考えれば分かると思うが、たまたま君が実装したいと思っているに過ぎない機能を
都合よく「簡単に」実現してくれる既存のコントロールなんてあるわけないじゃん。



362 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 11:01:53 ]
>>361
まだ夏休みですか

363 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:45:30 ]
>>362
消えろゴミ

364 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:53:25 ]
>>362
ところであなたは大学卒業しました?

365 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 13:02:04 ]
フフ、>>364は大卒じゃないのよ

366 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 13:05:22 ]
>>365=中卒ニート


367 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:28:28 ]
Fラン共うぜぇよ

368 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:13:02 ]
↑Gラン

369 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:02:47 ]
Bラン

370 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 16:15:35 ]
学歴話が好きな奴の人物類型というのは

(1) 学歴コンプレックスのある人間(秋葉原の事件の容疑者タイプ)
(2) 学歴以外に縋るものがないタイプ(かなり古いが宮沢喜一系)
(3) 学歴コンプの奴を煽って楽しむタイプ(マミーなんとか的な幼稚系)

こんなところか。
どっちにしろ他人よりもむしろ「救いがない本人自身を語ってるだけ」、という
簡単で明白な事実に気づくだけの知能が欠けているのは全てのタイプに共通しているようだな。

371 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:01:36 ]
>>359
>簡単に実現する方法はないものでしょうか?

ありません。

".NET エディタ コントロール"で検索してみると
みんな苦労してるのがわかると思う。



372 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 17:23:37 ]
>>370
そういうあなたは中卒ですか?

373 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 18:52:58 ]
ごめんなさい、脳卒中です

374 名前:351 mailto:sage [2008/09/07(日) 23:10:19 ]
>>352
>>353
>>354
遅くなりましたがありがとうございます。
プロパティから対象フレームワークの設定はできました。
友人のPCで試してみます。

375 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 02:07:17 ]
何この自演臭い酷い流れは

376 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 02:09:34 ]
黙れ自演厨

377 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 06:29:54 ]
早く前の流れに戻らないかしら。

378 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 06:34:38 ]
>>373
×ごめんなさい、脳卒中です
○ごめんなさい、中卒脳です

379 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 14:31:04 ]
>>371
>ありません

やはりそうでしたか。

>".NET エディタ コントロール"で検索してみると
>みんな苦労してるのがわかると思う。

わかりました。どうもありがとうございました。ではまた。


380 名前:デフォルトの名無しさん [2008/09/08(月) 15:38:29 ]
C#2.0で質問です。

Winアプリを作成しようとしています。
WEBアプリであればSessionのコレクションに特定のKey名でシリアライズできるオブジェクトを入れて
各画面で遷移した後も使いまわせるようにできると思うのですが
Winアプリで同じようなことを実現するにはどのようにすればよいでしょうか?

エントリポイントの
static void Main()
{
}

この辺りでRunさせる前に作成して保持しておきたいのです。
何か良い方法があればご教授いただけませんか?

381 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 16:16:44 ]
静的なHashtableにでも入れときゃいいんじゃない?
俺はやらんけど。




382 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:00:07 ]
>>380
遷移実行は遷移を管理するObjectに依頼する。
画面は遷移引渡し用Method、遷移元取り込み用Methodを用意する。

383 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:24:44 ]
>>381-382
レスありがとうございます。

>>381
その方法だとすごく簡易にできそうです。

>>382
画面で順々に渡していくわけですね。
遷移絡みで一元管理ができそうです。

今回は一寸時間もあるので>>381+>>382の手法を組み合わせて
勉強しながら進めてみようと思います。

ありがとうございました。


384 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:12:38 ]
>>378
ちょwwくそワロタww

385 名前:デフォルトの名無しさん [2008/09/08(月) 18:32:55 ]
何この糞ップリww

386 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:08:02 ]
一般に、大卒以上の学歴を有しながら、中卒以下の人間を指す

387 名前:デフォルトの名無しさん [2008/09/08(月) 23:23:51 ]

にっぽんサイコー!:?BS11「にっぽんサイコー!」第1回2008/3/9(日)放送
www.team-nippon.com/team_nippon/cgi-bin/player.pl?channel=j_channel&order=25&mode=0&self=1

まあ一辺聴いてみてください。いかに日本が自民党に巻き上げられて官僚やゼネコンに配ってるかwわかります。
いかに口うまく騙されてるかwわかります。

日本Channel:築地があふれた!!壊すな築地7.12東京大行進
www.love-nippon.com/cgi-bin/player.pl?channel=j_channel&order=1&mode=0&self=0

ソトコト 憂国呆談
www.sotokoto.net/yukokuhodan/yukoku_2.html#upside2

断固田中康夫を首相にしましょう!!



388 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:34:08 ]
VC#2008Express SP1でプログラム書いてるんですが、PerformanceCounterが思ったとおりに動いてくれません。

CategoryName : Processor

CounterName : % Idle Time

CounterName : % Processor Time
などの値を取得すると「0」しか返ってこない。

MemoryのAvailable MBytesや% Committed Bytes In Useなどは正しい値が返される。
正しい値とは、perfmon.exeで表示している値との比較。
Processorの% Idle Timeなどの常に「0」と表示される値は
perfmon.exeでは全部0以外の値が表示されている。

という状況です。
ソースの該当部分は
PerformanceCounter pc1;
pc1 = new PerformanceCounter();
pc1.CategoryName = "Processor";
pc1.CounterName = "% Idle Time";
pc1.InstanceName = "_Total";
Console.WriteLine(pc1.NextValue());
です。

どこかの掲示板で同じ症状で悩んでる人がいたんですが、誰もレスつけてなくて解決できたのかもわからない状況…
なにか間違っているところありますか?

389 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:55:35 ]
while(true){
Console.WriteLine(pc1.NextValue());
System.Threading.Thread.Sleep(100);
}

ちょい試してみな

390 名前:388 mailto:sage [2008/09/09(火) 00:01:03 ]
>389
あぁぁぁぁorz
わかりますた…
% Idle Timeとかって初期値が必ず0なのね…
はずかしぃぃぃ

391 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 00:51:30 ]
System.Environment.CurrentDirectory;
のような感じでファイル名も取得したいのですがどうしたらいいでしょうか?

System.Environment.CurrentDirectory ディレクトリの情報しか取得してくれないんです



392 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 00:52:50 ]
>>391
何のファイル名を取得したいの?

393 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 00:56:06 ]
実行ファイルのパスなら、
Application.ExecutablePath

394 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 00:56:24 ]
>>392
説明不足ですいません
ttp://dobon.net/vb/dotnet/system/explorecontextmenu.html
ここを参考にして、右クリックメニューからプログラムを開くようにしたんですが、
その右クリックしたファイル名を取得したいんです。
どうしたらいいでしょうか。

395 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 03:53:27 ]
>>394
右クリックメニューからどのプログラムで開くように設定したの?
登録したプログラムが君の作ったプログラムだったらMain関数の引数がまさしくファイル名になるけど、
たとえばnotepad.exeで開くようにしたのだったら当然ファイル名を取得することはできないよ?
notepad.exeは君の作ったプログラムじゃないから当たり前なんだけどさ。

何がしたいのか全然想像できん。
相当初心者みたいだから、もっと具体的に説明してくれないと答えにくい質問だわ。

396 名前:デフォルトの名無しさん [2008/09/09(火) 05:21:33 ]
>>394

ようわからんが

Main(string[] args)
{
string fileName = args[0];
}

でいいんじゃね?
ちなみに、リンク先の方法は「フォルダ」をプログラムに関連づける方法だから、
「ファイル」を関連づけたいなら
dobon.net/vb/dotnet/system/associatedapp.html
こっちの方だと思うんだけど。

397 名前:デフォルトの名無しさん [2008/09/09(火) 12:06:27 ]
List<string> a = new List<string>();
a.add("aaa");
・・・

ときて、aの要素すべてを"\\"で連結してひとつの文字列にしたい

398 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:12:30 ]
String.Join

399 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:19:25 ]
サンクス

string.Join("\\", a.ToArray());
でできた


400 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:42:05 ]
>>395はリンク先読んでからレスしろよw

401 名前:395 mailto:sage [2008/09/09(火) 15:08:47 ]
>>400
当然読んだに決まってるじゃん。
リンク先のサンプルは右クリックメニューにオリジナルメニューを追加させるようなアプリのサンプルなんだから、
右クリックで開かれるファイル名を取得したいという質問自体が意味不明なんだよ。
あくまでレジストリにキーを追加するだけのアプリと、コマンドライン引数を取得することは全く結びつかない。
コマンドライン引数を取得したいのならばそう言えばいいだけで、リンク先の記事は何の意味もなさないんだよ。



402 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:40:12 ]

 政治板にあった的確なAAを紹介します!!
          ↓

【選挙前】 郵政民営化に賛成か否か 国民投票です

    自民党↓ 小泉
    , - ,----、
    (U(    )  
    | |∨T∨   
    (__)_)    国民様、へへへーっ
          ↓
          ↓
【選挙後】
自民党↓   ガソリン暫定税率維持
         後期高齢者制度制定
   ∧_∧    日雇い派遣 制限撤廃
  ( ´∀`)     郵政造反組復党
  (   /,⌒l     & 天下り先独法の特別会計ジャジャ漏れは完全に温存 !!
  | /`(_)∧_0.  & 二人の総理投げ出し他人事で辞任!
  (__)(´∀`; )⊃⌒⊃   ← ← ← (一般民間人)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


403 名前:デフォルトの名無しさん [2008/09/09(火) 16:18:33 ]

ageろよww


404 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 19:14:16 ]
コピペ君って馬鹿だな、まで読んだ。

405 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:29:25 ]
>>396
ありがとうございます。
期待していた動きをさせることができました。

406 名前:デフォルトの名無しさん [2008/09/10(水) 11:30:15 ]
メソッドの引数にプロパティがたくさんあるクラスを渡そうとしています。
引数を渡す時に ref をつけて渡した方が、実行速度上 ( 微々たるものかもしれませんが ) 有利になるのでしょうか。
ref を付けずに渡すと、メソッドに渡す時に引数がコピーされると、プログラミング c# に書かれていました。
どうなのでしょうか?


407 名前:デフォルトの名無しさん [2008/09/10(水) 11:31:53 ]
用途による としか言いようがない

408 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:32:39 ]
されない。
そう書いてあったならその本が間違ってる。
もしくは値型についての話と混同してる。


409 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:33:50 ]
厳密にはクラスでも引数はコピーされるが、今の話はそういう話ではないはず。


410 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:36:47 ]
大きな値型なら速くなる
クラスなら付けない方がたぶん速い

411 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:37:43 ]
そうじゃなくて、そのメソッドをよく呼ぶときに実行速度が問題となるってこと。



412 名前:デフォルトの名無しさん [2008/09/10(水) 11:42:57 ]
>>407-411
お返事ありがとうございます。
なかなか難しいですね。

私の理解としては、メソッドの引数が、
クラスの場合→インスタンスのアドレスが渡される ( コピーされない )
値型の場合→ボックス化?され ( つまりコピーされ ) 渡される
という理解ですが、良いのでしょうか?

クラスの場合に、そのクラス中に値型のフィールドが含まれることもあるかと思いますが、そちらはよく分かってません。





413 名前:デフォルトの名無しさん [2008/09/10(水) 11:43:13 ]
refキーワードは速度じゃなく、メンバの使われ方が問題なんだが

414 名前:デフォルトの名無しさん [2008/09/10(水) 11:44:14 ]
よく考えなくても分かるけど、参照がコピーされたのに、参照に含まれる一部が実体とかおかしいだろ

415 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:47:40 ]
意味が分かりませんw

416 名前:デフォルトの名無しさん [2008/09/10(水) 11:47:47 ]
>>414
なるほど。

では、まとめると、
クラスの場合→インスタンスのアドレスが渡される ( コピーされない )
クラスのメンバに値型が含まれる場合→インスタンスがコピーされアドレスが渡される
値型の場合→ボックス化?され ( つまりコピーされ ) 渡される
という理解ですが、良いのでしょうか?


417 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:52:17 ]
とりあえずいろいろコード書いて試してみりゃいいよ

418 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:57:14 ]
>>416

これ読んどけ。じっくり読むと理解できるから。流して読むと川俣ワールド迷走することになるが

www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_006/cs2_006_01.html

419 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:06:54 ]
>>414だいぶ混乱してる。
少なくとも今の話にはボックス化は無関係。
ただしコピーされるってのは間違ってない。
値型メンバはクラスのインスタンスにそのまま埋め込まれてる。
参照型メンバはクラスのインスタンスに、まあ君の理解で言うとアドレスが埋め込まれてる。


420 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:09:11 ]
>>416

× クラスのメンバに値型が含まれる場合→インスタンスがコピーされアドレスが渡される
○ クラスのメンバに値型が含まれる場合→インスタンスを保持している変数のアドレスが渡される


// 例

class Hoge {
private string msg;
Hoge(string s) {
msg = s;
}
public override string ToString() {
return msg;
}
static void foo(ref Hoge fuga) {
// Main関数のhogeが指しているインスタンスが別のものになる。
fuga = new Hoge("Foo");
}
static void Main(string[] args) {
Hoge hoge = new Hoge("Hello");
Console.WriteLine(hoge.ToString());
foo(ref hoge);
Console.WriteLine(hoge.ToString());
}
}


421 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:15:25 ]
値型は実体がコピーされる。
ただし、参照型に含まれる値型は値型の参照がコピーされる。

以上



422 名前:デフォルトの名無しさん [2008/09/10(水) 12:15:53 ]
もう難しすぎる!

423 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:16:01 ]
>>413
XNA Frameworkとか覗いてみたらわかるよ
決して良い使い方だとは言えないんだけど






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<134KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef