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


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

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



1 名前:デフォルトの名無しさん mailto:sageteoff [2015/03/18(水) 18:08:26.52 ID:irwZfv9C.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part114
peace.2ch.net/test/read.cgi/tech/1419512512/

■関連スレ
C#, C♯, C#相談室 Part86
peace.2ch.net/test/read.cgi/tech/1419608259/

■コードを貼る場合は↓を使いましょう。
ideone.com/

543 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 07:41:03.83 ID:R3oTKNZR.net]
プロセスにフォアグラウンドスレッドが存在しなくなると
バックグラウンドスレッドがまだ処理中でもプロセスは終了してしまう
これが原因ではないか

Taskは内部でスレッドプールを使っているが
スレッドプールのスレッドは全てバックグラウンドスレッドだ
フォアグラウンドスレッドが欲しいなら、自分でThreadを作成するべきだ

以下参考資料
https://msdn.microsoft.com/ja-jp/library/h339syd0%28v=vs.110%29.aspx
https://msdn.microsoft.com/ja-jp/library/0ka9477y(v=vs.110).aspx

544 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 13:34:14.87 ID:tMcWag84.net]
>>525
ありがとうございます
疑問がすっきり解決しました
Taskももう少し改良して欲しいですね・・・

545 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 13:48:49.67 ID:63j168JE.net]
改良?

546 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 13:51:40.44 ID:rowGmHFY.net]
Threadのようにいろいろ機能はあるけどThreadよりも使い勝手が良い、みたいな

547 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 13:54:40.42 ID:5Xzz88z5.net]
TaskScheduler自前で作りゃいいだけだけど
そもそもメインスレッドで待てばいいだろハゲ

548 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 14:34:51.52 ID:buubow6H.net]
.NET3.5ベースで開発しています
あるabstractクラス内のstaticメソッドを動的に舐めて
Dictionary<"メソッド名", メソッド型>に突っ込んでいく処理でつまづいております

codepad.org/uyDTOTDA

取得したメンバを実行するのはInvokeMemberすればいいのですが
今回のケースで探してもなかなか出てきませんでした
よろしくおねがいします

549 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 14:52:20.57 ID:wGou5fq6.net]
Task[] tsk = new Task[] {Task.Factory.StartNew(new Client),
                 Task.Factory.StartNew(new Server)
};
Task.WaitAll(tsk);

こういう風に書くと正常に動きました
お騒がせしました
そりゃMainに書いてりゃMainが終了すれば呼びだされたTaskも強制停止されて
終了してしまう事を忘れていました

550 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 15:19:52.31 ID:MKPJRGG4.net]
>>530
MethodInfo.CreateDelegate

551 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 15:31:25.76 ID:uOKH4JiO.net]
>>530みたいなことやるならMEF使えばいいのに



552 名前:527 mailto:sage [2015/05/25(月) 15:44:28.52 ID:buubow6H.net]
>>532,530

リプライありがとうございます
ご提案いただきましたMethodInfo.CreateDelegate、MEFは、残念ながら.NET 4からの機能です

https://msdn.microsoft.com/ja-jp/library/hh194376%28v=vs.110%29.aspx
https://msdn.microsoft.com/ja-jp/library/dd460648%28v=vs.110%29.aspx

553 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 16:54:45.18 ID:MKPJRGG4.net]
ああ、そうだったか
じゃあDelegate.CreateDelegateのほうで

554 名前:527 mailto:sage [2015/05/25(月) 17:09:02.90 ID:buubow6H.net]
>>535
ありがとうございます!
Delegate.CreateDelegateでいけました!

foreach (MemberInfo m in typeof(Module).GetMembers(BindingFlags.Static | BindingFlags.Public)) {
var del = System.Delegate.CreateDelegate(typeof(method_type), m as MethodInfo);
methods.Add(m.Name, del as method_type);
}

555 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 23:04:17.52 ID:+UFfY2ty.net]
Windowsアプリケーションを作成しているのですが、
private void button_Click(object sender , EventArgs e){ ~~~ }
button.Click += new EventHandler(this.button_Click);
と記述してあるのですが、内部的にどのような処理が行われているのでしょうか。

556 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 23:26:51.92 ID:uOKH4JiO.net]
>>537
button.Click += new EventHandler(…)は
button.add_Click(new EventHandler(…))と同じ
new EventHandler(this.button_Click)はJavaなら
new EventHandler {
 public void Invoke(object sender, EventArgs e) { this.button_Click(sender, e); }
}
に相当する
だからといって何がしたいのかは分からないだろうけど、それはObserverパターンを勉強しろ

557 名前:デフォルトの名無しさん mailto:sage [2015/05/26(火) 03:24:56.20 ID:fbPfP2jD.net]
TrackBarで、つまみをつかんでいる(つまみの色が変わっている)
かどうかの判定ってできませんか?

558 名前:デフォルトの名無しさん mailto:sage [2015/05/26(火) 03:30:46.44 ID:fbPfP2jD.net]
あと、チェックボックス付のListViewで、1行選択の解除をやりたいんだけど、
ListViewHitTestInfoでクリックしたサブアイテムのindexを取る方法ってありますか

559 名前:デフォルトの名無しさん mailto:sage [2015/05/26(火) 04:12:33.48 ID:Ihaek877.net]
>>539
MouseDownとMouseUpのイベントを発生させるといいかも

>>540
こんなのは?

private void listView1_MouseDown(object sender, MouseEventArgs e)
{
ListViewHitTestInfo info = listView1.HitTest(new Point(e.X, e.Y));
int row = info.Item.Index;
int col = info.Item.SubItems.IndexOf(info.SubItem);
label1.Text = "row = " + row + ", col = " + col;
}

560 名前:デフォルトの名無しさん mailto:sage [2015/05/27(水) 21:58:33.29 ID:XkW9VjQH.net]
WebClientで作成したインスタンスって破棄しないと影響でかいですか?
数秒毎にループでインスタンス作成しては読み取る処理してるんですが、同期処理のせいか重いです。非同期処理はこれから実装を検討してるんですが。

561 名前:デフォルトの名無しさん mailto:sage [2015/05/27(水) 22:21:23.93 ID:ihueyhra.net]
>>542
放置プレイで何の問題も起きてないが。



562 名前:デフォルトの名無しさん mailto:sage [2015/05/27(水) 22:35:44.05 ID:aznGlafD.net]
数秒毎って、攻撃と思われないように気をつけろよ

563 名前:デフォルトの名無しさん mailto:sage [2015/05/27(水) 22:40:12.30 ID:1SVgoR5i.net]
相談室でやってろよ阿呆君

564 名前:デフォルトの名無しさん mailto:sage [2015/05/27(水) 22:53:17.63 ID:ihueyhra.net]
>>542
毎回disposeするとHTTP Keep Alive効かないか

565 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 14:16:08.87 ID:SHzqDeqo.net]
>>546
効くだろ。

566 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 19:10:07.05 ID:d869LRaF.net]
>>547
Disposeでコネクション切断されるだろ。

567 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 20:02:27.61 ID:QF6UrsQ/.net]
544のコンピューターでは切断されたんだろうな

568 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 20:48:57.06 ID:kXESabcL.net]
で、結局gc任せでいいの?

569 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 21:01:06.10 ID:+zWW11JT.net]
Disposeによって内部のコネクションプールに戻されるとかじゃねぇの?
Disposeはしといた方が良いと思う

570 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 21:34:23.34 ID:1xJgnWA+.net]
ソース読むとWebClientはただのファクトリーで
Disposeは何もやってないように見える

571 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 14:56:19.16 ID:DRtbRWlm.net]
IDisposeを解放しないバカは死ね
ただしasync/awaitは除く



572 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 17:06:27.61 ID:UmMhJR2/.net]
開放しないとどのような弊害が起きるんでしょう。

573 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 18:10:40.93 ID:C+IOxaVu.net]
設計上意図されないタイミングで開放するバカもいる

574 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 18:15:33.23 ID:49aSQ4HZ.net]
一般的なIDisposable実装ではファイナライザでリソース解放するようになっているのでパフォーマンスが低下する

575 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 18:28:02.76 ID:2+UGB+5g.net]
>>556
適当なこと言うなよ

576 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 18:55:49.49 ID:y5cl7Y1T.net]
ファイナライザを持つオブジェクトは2回GCしないと消えないので、
GCにかかる時間や頻度、そしてメモリ使用量を増加させる原因になる
Disposeが明示的に呼ばれた場合はSuppressFinalizeでファイナライザを無効化することが推奨されてるから
明示的にDisposすることで結果としてパフォーマンスの向上につながる

577 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 19:37:57.72 ID:vFEdwQTI.net]
IDisposable実装してるクラスは明示的にdisposeした方が良いのが多いが
コネクションプール使ってるヤツは物理的にクローズされてパフォーマンスが落ちるのでものによるな。

578 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 19:45:22.76 ID:u87GwTIT.net]
>>559
例えば?w

579 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 19:53:15.04 ID:zOKa2SxY.net]
常にConnectionと一体になってるような粒度のオブジェクトしか設計したことないんやろ

580 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 20:57:24.50 ID:vFEdwQTI.net]
>>560
SqlConnection クラスとか

581 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 20:58:45.95 ID:d5Z165ny.net]
Disposeしたのに繋がってたら嫌じゃね?



582 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 20:58:57.87 ID:vFEdwQTI.net]
>>561
どういう意味?

583 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 21:03:22.68 ID:mQMhglYl.net]
SqlConnectionは Dispose = プールに返却 だからDisposeは必須だぞ
使い終わりを検知する方法がないのにどうやって使い回してると思ってたんだ

584 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 21:26:23.97 ID:zOKa2SxY.net]
落ちもついたところで今日はお開き

585 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 21:43:46.63 ID:d5Z165ny.net]
おやすみ〜

586 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 22:55:48.95 ID:vFEdwQTI.net]
>>565
コネクションクローズしとくだけで良いだろ。
どうせプロセスが終ればプロセス毎解放されるし。

587 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 23:13:09.23 ID:nd5twrZx.net]
>>558
>ファイナライザを持つオブジェクトは2回GCしないと消えない

その珍妙な説のソースは?

588 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 23:46:38.97 ID:T/VeDaq5.net]
>>569
「ソースはMSDN」くらい省略させてくれよ、常識だろ?
https://msdn.microsoft.com/ja-jp/library/ee787088.aspx

589 名前:デフォルトの名無しさん mailto:sage [2015/05/30(土) 23:56:09.15 ID:oQYe81Za.net]
ソースが出せない人の常套句「ソースはMSDN」
もちろんリンク先にはソ書かれていない

590 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 00:36:38.12 ID:9foGZIMb.net]
MSDNって言われても初心者的にMSDNはわかりにくいんだよなぁ

591 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 00:55:02.32 ID:QGRYrQik.net]
参照型プロパティの初期化について質問です。

■実装方針
1.プロパティのnewは1度きりで、インスタンスは引き継ぐ。
(初期化しても引き継ぎたい値のコピーやnew処理コスト、コード量増加抑止を目的)
2.プロパティのInitializeは毎回実行。
3.Initializeの引数は



592 名前:Nラス毎に異なる。

■実装例
http://ideone.com/nQJ6VZ

■質問内容
1.Initialize内部では例外が無い前提で実装するのは、多人数開発においてアリか。
2.Initializeの成否でなく、thisを戻り値にする設計は、多人数開発においてアリか。
3.「m1 =(m1 ?? new M1()).Initialize」の部分が定形的なので、もっと省略したり単純化する方法はあるか。
4.実装方針に問題点はあるか?

以上、部分的にでもご意見いただければと思います。
[]
[ここ壊れてます]

593 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 01:29:44.63 ID:MabpreS8.net]
>>573
何のために、このような回りくどいやり方をするのでしょうか?

594 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 02:01:48.74 ID:rnPMXZrB.net]
>Initializeは毎回実行

初期化を複数回呼び出すことがおかしい。
何でInitializeがコンストラクターと別なの?

595 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 06:45:17.54 ID:EczZHdOg.net]
>>569
ごめんなさいは?

596 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 07:03:44.63 ID:EczZHdOg.net]
>>573

1. 例外がスローされる可能性を排除しては「いけない」し、そもそも「できない」。多人数だろうが個人だろうが。
2.
インスタンスを返すこのようなメソッドは静的にしたくなる。
成否と言ってるけどそもそもInitializeは失敗するのか? 失敗したインスタンスはどうするのか?
Initializeという名前だけど、毎回実行なら初期化というより単に情報を与えているだけな気が。
3. そういうレベルじゃなくね? m1, m2は初期化前に触られたらどうなんの?
4. なんか筋が悪いコードに見える

597 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 07:13:17.54 ID:crGWWGGX.net]
コンストラクタで例外投げたくないという話なら分からないでもないが、
Initializeでも投げないとなると、初期化に失敗してる可能性をプロパティ使用時に考慮しなければならない
Initialize呼び忘れのリスクもあるし、ミスを非常に生みやすいクソ設計といえるね

598 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 08:24:58.82 ID:HdJipRY3.net]
ビルダーパターンとメソッドチェーンに妙な感化でもされたのか

599 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 08:26:31.55 ID:E4eD717b.net]
初期化がメソッドチェーンに含まれる設計がクソ
初期化はコンストラクターでやれ

600 名前:570 mailto:sage [2015/05/31(日) 13:31:30.99 ID:QGRYrQik.net]
皆さん、ご意見ご指摘ありがとうございます。
後出しになってすみませんが、まず質問時の補足をさせていただきます。

■状況
現在WPFを勉強中です。
もともと初期化を以下のイメージで実装していました。
これでは、インスタンスの作成とモデル毎に異なる初期化の判別が冗長だと感じたのが今回の質問のきっかけです。
m1 = m1 ?? new M1();
m1.Initialize(hoge,"foo");
m2 = m2 ?? new M2();
m3 = m3 ?? new M3();
if (m3.IsInitialize) {
m3.Reset(dst);
}
else
{
m3.Initialize(dst);
}

■考え方
質問時のコードは、次の考え方を含んでいました。
・コンストラクタでの初期化が適当でないモデルを想定。(継承、シリアル化、バインディング、非同期、他)
・初期化⊃リセットと考え、Initializeにリセットの意味合いを持たせる。
・処理の抽象化とコード量を短縮することを目的に、Initializeをメソッドチェーンにする。
・初期化(リセット)が失敗した場合、エラー度合(処理を進めるのか終了するのか)は、タイミングや他モデルの状態に依存し、
初期化時に例外スローはせずにプロパティ参照時にエラー度合をチェックすべき。

続きます。

601 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 13:34:53.01 ID:QGRYrQik.net]
>>581の続きです。
今回私の考え方に誤りがあることが分かり、勉強になりました。

■反省
ご指摘を受けて、次の是正が必要だと認識しました。
・コンストラクタでの初期化が適当でないものだけ、Initializeを作成する。
・初期化とリセットを混同せず、別々に定義する。
・初期化でのメソッドチェーンはやめる。
・初期化失敗時に例外を投げて問題ない、エラー度合を判断できるクラス設計にすべき。

■お願い
反省点を認識したものの、具体的な実装が浮かびません。
上記コードのようなさまざまな参照型プロパティの初期化が必要な場合、どう効率的に実装するかご提示いただけないでしょうか?
Initializeを作らないというアプローチでもかまいません。

抽象的なお願いとなりますが、ご助力ください。



602 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 15:14:08.09 ID:HdJipRY3.net]
このモデルは本当にコンストラクタでの初期化が適当でないんだろうか

603 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 22:23:16.53 ID:GgyUUQ/3.net]
C#を使うなら諦めろということだ。どうしてもいやならC++を使えばよい。
placement newがある

604 名前:デフォルトの名無しさん mailto:sage [2015/05/31(日) 22:36:02.70 ID:DItVGOoj.net]
プロパティを普通に作って??は消せよ

605 名前:デフォルトの名無しさん mailto:sage [2015/06/01(月) 13:53:32.03 ID:ZLkEb6tw.net]
一つのクラスに色々詰め込みすぎだろ
一緒に初期化できないなら別のクラスにするのが筋
例えば永続化層は単なるデータとして分離しろ

606 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 10:57:10.02 ID:+73WPJDz.net]
バックグラウンドで文字列の置換を行っているのですが
DoWorkの引数を複数にした場合の書き方が分からず困っております。
どうすれば正常に動くのか教えてください。

ideone.com/ZATGGK

607 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 11:50:01.20 ID:3K9K5nvj.net]
this.backgroundWorker1.RunWorkerAsync(new object[] { this.workerArgument, this.workerArgument2 });

と引数を設定したんなら

object[] obj = (object[])e.Argument;
string str = (string)obj[0];
string str2 = (string)obj[1];
じゃね?

しかしFormがBackgroundWorkerを公開しちゃってるしよろしくないね
BackgroundWorkerなんて投げ捨ててTask使おうぜTask

608 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 12:42:25.68 ID:+73WPJDz.net]
>>588
教えていただいたとおりにしたところ正常に動作しました。
難しそうですがTaskというものも調べてみようと思います。
どうもありがとうございました。

609 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 20:50:03.01 ID:pCEddnCf.net]
ソレでもいいけど、Tuple使うのが常套手段じゃね?
www.atmarkit.co.jp/fdotnet/dotnettips/1024tuple/tuple.html

610 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 21:18:24.64 ID:16XnEFNb.net]
>>590
これってメソッドとかに渡す時、受け側はどう宣言するの?

611 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 21:29:11.90 ID:Km0g2dva.net]
asyncじゃあかんの?



612 名前:デフォルトの名無しさん mailto:sage [2015/06/02(火) 23:36:06.84 ID:Xy74cFV6.net]
まだTupleとか言ってるバカがいるのか
タプルってのは var name, age = GetNameAndAge(); のようにして使うもんであり、
間違ってもitem1とかいう意味不明な名前でコードを暗号化するためのものではない
言語レベルでのサポートがない言語で使うべきではない

613 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 01:02:06.86 ID:N6yD348L.net]
dynamicはアカンの

614 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 04:04:12.25 ID:+cwo1qGY.net]
item1とか適当な名前でも問題ないぐらいの処理だからTuple使うわけで
ちゃんとした処理ならちゃんとしたクラス作るか匿名クラスかでやるわ

615 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 07:15:25.31 ID:Wh0ON4xv.net]
もう質問は解決してますよ
思想の話がしたければ電車に飛び込んだ後、地獄でゆっくりやれよクソカス

616 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 07:15:29.90 ID:amqoRlyA.net]
ほうほう
では匿名クラスを使ったサンプルとやらを見せて貰おうか

617 名前:デフォルトの名無しさん mailto:sage [2015/0 ]
[ここ壊れてます]

618 名前:6/03(水) 07:27:33.67 ID:Wh0ON4xv.net mailto: 地獄でやれって言ってんだろ痰壷野郎 []
[ここ壊れてます]

619 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 07:40:18.45 ID:QMuypoEX.net]
TupleはF#のために追加されただけだよ
C#も言語レベルでサポートしてほしい派だけど、
Tuple.CreateやらItem1やらを喜んで使うのはセンスを疑うわ

620 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 07:42:09.25 ID:u1dB80rd.net]
ウンコはトイレでしてもらえますか?臭いですよ

621 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 17:26:40.68 ID:o7sLDqXU.net]
Tupleは内部の隠ぺいされた範囲内でテンポラリーとして仕方なく使うものじゃないの?



622 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 18:57:18.34 ID:QadS+ygN.net]
型と順序だけ決まっていればいいならTuple
メンバーに名前を付けたいならクラスを定義する
名前を付けたいけど取り出すコードが近くにあるテンポラリなら匿名オブジェクト
名前をつけたいけどクラスを定義するのがダルいならdynamic

タプル型は変数に名前が欲しいかどうかであって、チンポラリとか関係無い

623 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 21:16:51.33 ID:90whoNkH.net]
>>601
クラス内部で使うデータ構造としてお手軽便利に使っておりますが。

624 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 22:09:17.51 ID:RjLZjXm6.net]
IComparerとかIEqualityComparerを実装するのに class と struct のどっちがお勧め?

継承する必要がないなら struct の方がいいんじゃないかと思うんだが

625 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 22:15:57.39 ID:tAqP6WbY.net]
>>604
その問題設定そのものが変

626 名前:デフォルトの名無しさん mailto:sage [2015/06/03(水) 22:17:10.12 ID:QMuypoEX.net]
本当にそれだけの条件しか考慮しないならclassだろう
CompareやEqualsの呼ばれる頻度が高いならstructはコピーで遅くなる可能性があるし
struct+interfaceはボックス化避けるためにジェネリック多用しなきゃいけなくて不便だし
特殊化でメモリも食う

627 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 01:05:37.04 ID:hSX2tQGq.net]
ソートメソッド内でIComparerを引数にするメソッドが呼ばれてるからコピーが発生しまくるってこと?
Array.Sortの実装見ただけだけど

628 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 01:17:57.75 ID:nTFCM4h6.net]
それだけの条件って言うけど
どういう条件下ならstructを選ぶの?
選ぶ理由が全くない気がする

継承云々は問題に聞こえないし(sealedしとけよ)

629 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 01:21:11.61 ID:pwnhvS/Q.net]
だから問題設定がそもそも変なんだってw
そうとしか言いようがない。

630 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 08:12:26.92 ID:hSX2tQGq.net]
structの方がインスタンス化が早いので

でもソートメソッド内でコピーが発生する実装になってたらデメリットになるなと

631 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 08:32:19.38 ID:xuWz3vjX.net]
何か達成したい目的があって、IComparerを実装するのはその手段だろ?
IComparerを実装するのにどっちがいいかとか意味不明すぎる
Q. 新しい礼服を買ったので週末着ていきたいです。どこに行けばいいですか?
A. 葬式
みたいな質問



632 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 08:46:15.14 ID:bfstKBEm.net]
話の内容が理解できないなら無理してレスしなくてもいいんだよ?

633 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 10:20:31.70 ID:xy19AX+E.net]
条件提示してんだからそれについて解答すりゃええやん
どういう条件に変わればこっちを選ぶとか蛇足もいいとこ
答えられないから自分の答えられる実装の方がいいとかも論外

634 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 10:36:35.29 ID:SACPq2eU.net]
御託並べていい気に浸ってんじゃねえよ無職ハゲが

635 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 11:09:16.46 ID:xuWz3vjX.net]
そもそも条件なんか提示されてないに等しいだろ
俺は>>606だが、インターフェイスを強調するからには使用頻度が高いのだろうとか
恐らくパフォーマンスを重視しているのだろうとか
多くの勝手な想像を基にした回答だ
こういう意味不明な質問はまず目的を訊くのが一番手っ取り早くて確実なんだよ

636 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 11:45:56.80 ID:xy19AX+E.net]
classとstructのどっちがいいかと聞かれたらclassと答えとけばいいんじゃないかね
理由
コピーにかかるパフォーマンスとか計算できるぐらいなら質問してこないと判断

637 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 12:13:28.56 ID:03L4l+Cb.net]
理由になってないな。
質問者の質問がトンチンカンなら答える方もトンチンカンときてる

638 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 12:16:51.46 ID:6LXNtE4C.net]
                     /j
                   /__/ ‘,
                  //  ヽ  ', 、
                    //    ‘     
                /イ       ', l  ’     …わかった この話はやめよう
               iヘヘ,       l |  ’
               | nヘヘ _      | |   l    ハイ!! やめやめ
               | l_| | | ゝ ̄`ヽ | |〈 ̄ノ
               ゝソノノ   `ー‐' l ! ¨/
            n/7./7 ∧        j/ /     iヽiヽn
              |! |///7/:::ゝ   r===オ        | ! | |/~7
             i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ..     nl l .||/
             | | | | l {':j`i::::::::::::::::`ーr '         ||ー---{
              | '" ̄ ̄iノ .l::::::::::::::::::::::∧       | ゝ    ',
      , 一 r‐‐l   γ /、::::::::::::::::::::::::〉ー= ___  ヘ  ヽ   }
    / o  |!:::::}     / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ     ノ
   / o    ノ:::::∧   /ヽ  o  ヽ::::::::| o i::::::::ヽ、 /   /
   /    ノ::::::/    /::::::::ヽ  o  ヽ:::| o {::::::::::::::Υ   /

639 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 13:00:46.81 ID:+mmsYIdN.net]
マンガ脳の恐怖、まで読んだ。

640 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 14:25:28.39 ID:18shCTe3.net]
お前らVSはいくつつかってる?オラは2010だべ

641 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 15:17:58.42 ID:ualL+iXH.net]
2013 Community
Gitも使えるんで



642 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 16:04:23.30 ID:ziyE/dl1.net]
2010個もVS使うのかー

643 名前:デフォルトの名無しさん mailto:sage [2015/06/04(木) 16:42:30.85 ID:9wvQs+dO.net]
典型的コミュ障






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

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

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