C#, C♯, C#相談室 Part88at TECH
C#, C♯, C#相談室 Part88 - 暇つぶし2ch484:デフォルトの名無しさん
15/08/17 15:58:11.51 /53UNtSq.net
javaでGUI作るとかwって言われたからc#始めたのにc#もこれかよ…

485:デフォルトの名無しさん
15/08/17 16:16:36.52 eXSE2CJH.net
そもそもGuiなどというものは流行り廃りが激しく再利用性も低い
使い捨てして乗り継いで行くイメージで作るべきもの
この前提があるからみんな口を揃えてレイヤーを分けろって言うんだね

486:デフォルトの名無しさん
15/08/17 16:19:11.16 eAn+98gr.net
デスクトップアプリという分野自体がもう終わったからね
Web面白いよ?
俺もそうだったが、食わず嫌いしてたら後悔する

487:デフォルトの名無しさん
15/08/17 16:27:51.07 w34N0MAp.net
特定のブラウザ専用ならwebもGUIの道具の一つとしてありかなとも思うが、
各ブラウザの違いやバグ対策みたいなGUIの本質とかけ離れたところにばかり
時間を取られる非生産的な仕事ってイメージしかないね。
仕事でやりたいとは思わないなあ。ストレス大盛りって感じ。

488:デフォルトの名無しさん
15/08/17 19:35:09.97 w9n3OemN.net
最近のmsはインターフェースより
抽象クラスを推奨してるってなんかの本で
読んだんだけど・・・

489:デフォルトの名無しさん
15/08/17 19:45:34.88 RAwbDv5U.net
んなことはない
インターフェース大好きMSが書くソースコードは今も昔もどの言語でもインターフェースまみれ
インターフェースが問題になるのはインターフェースを定義する側と実装する側の距離が離れているとき
MSは内部では本当にインターフェース使いまくってる
MSが一番最近作った新言語のTypeScriptだってインターフェースが基本

490:デフォルトの名無しさん
15/08/17 22:37:51.82 FJuxg1JS.net
みんなHTA使おうよ

491:デフォルトの名無しさん
15/08/17 22:43:25.40 Wyfczv4M.net
シングルトンの作り方で、sataticクラスにしてstaticイニシャライザでstaticな変数に作るのと、
通常のクラスでコンストラクタでstaticな変数に自分をnewするのでは何か違いますか?

492:デフォルトの名無しさん
15/08/17 22:59:02.86 +cUtloob.net
そもそもstaticクラスはインスタンスを作れないのでは?

493:デフォルトの名無しさん
15/08/17 23:00:29.54 VtDZ2XCv.net
>>484
はい。
概念的に、そのシングルトンを持つ存在がシングルトンの実体と別なのか同一なのかという決定的な違いがあります。
形しか見ない低能には区別がつきませんが

494:デフォルトの名無しさん
15/08/17 23:12:20.05 q/emGwsq.net
VS2015のC#でForm1からForm2上のTextboxを変更したいのですがどうすればいいのでしょう
URLリンク(detail.chiebukuro.yahoo.co.jp)
ここを参考に進めていったのですが、Form1でForm2のTextbox1.textを変更するよう記述したところ
(Form2Obj.textBox1.Text = "こんにちは";のように)
『'object' に 'Text' の定義が含まれておらず、型 'object' の最初の引数を受け付ける拡張メソッド 'Text' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。』
こんなエラーを返され、textbox1.に続く自動入力を見るになんだか読み取り専用になってるような気がします
まだ駆け出しなので何か根本間違えてしまったりしてますか?

495:デフォルトの名無しさん
15/08/17 23:18:08.90 RAwbDv5U.net
>>484
シングルトンはこうやって使うんだよ
class Hoge {
private Hoge(IHage hage) { this.hage = hage; }
public void method1() { hage.method2(); }
}
//Hogeクラスを使うとき
new Hoge(Hage.GetInstance()).method(); // IHageの実装を注入
こういう設計にすればIHageの実装をダミーに入れ替えてHogeを単体テストできる
こういうことを考慮せずにどこでもGetInstance呼んでるなら>>484の疑問の通り実質的な違いはない

496:デフォルトの名無しさん
15/08/18 00:09:30.31 pnM0xe2/.net
>>1
デュエル・マスターズ的な非電源TCGの 《 オンラインTCGツクール系 》 ソフト(エディター)の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してある制作ソフト。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、バディ、ドレノ、フォースofウィル、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ディメンションゼロ、ライブオン、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。
設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。
個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディタ系ソフト群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど、発売済みゲームソフトの存在するケースはベンダーに研究させる。

TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリーグ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。
さ~て、製作を受けてくれるベンダーが見つかるかな?ww(クス
スレリンク(gameama板)l50

497:デフォルトの名無しさん
15/08/18 04:24:03.38 pRZZzM/P.net
>>487
全体像が見えないのでなんともですが
とりあえずForm2に配置されているtextboxのプロパティーを開いて
Modifiersを private → public へ変更して、Form2クラス外からも見えるようにしてみる?とか

498:デフォルトの名無しさん
15/08/18 04:38:39.80 pRZZzM/P.net
>>479
WEBは面白いけど、eコマース、SNS、ゲームといった仕事をしない人にとっては用のない世界でもあったりする
公開されない用途では、多様な環境への対応は意味のない単なる負担でしかないからね
面白いという理由だけで意味のないコスト発生させても仕方がないのだ
自分がそうだけど

499:デフォルトの名無しさん
15/08/18 05:50:02.90 EGG1pcbp.net
>>487
(Form2Obj.textBox1 as TextBox).Text = "こんにちは";

500:デフォルトの名無しさん
15/08/18 06:40:39.06 ffkOBUQn.net
>>492
エラーが分かりにくくなるだけだからnullチェックしないならasは使うな

501:デフォルトの名無しさん
15/08/18 07:44:01.93 EGG1pcbp.net
>>493
んな事知るかボケ

502:デフォルトの名無しさん
15/08/18 08:09:33.82 JFS1mc9t.net
>>487の回答者はよくもまあ長々と書くもんだなぁ
こんなしょーもないことにあれだけ付き合うって素晴らしい人、もしくはひどい暇人
だけどForm2Obj というフィールド変数の名前はどうよ

503:デフォルトの名無しさん
15/08/18 08:10:48.65 JFS1mc9t.net
>>492
型の問題じゃなくてスコープの問題だからその回答はマヌケ

504:デフォルトの名無しさん
15/08/18 08:21:27.56 sLRvpB24.net
夏休み今日までだから
明日からこの糞くだらない無駄話に参加できなくなって悲しいですわ

505:デフォルトの名無しさん
15/08/18 08:30:04.89 O5wCO4NL.net
>>496
スコープ?まじで?長すぎて全然読んでなかったよ

506:デフォルトの名無しさん
15/08/18 08:38:29.36 GgDcmGMQ.net
>>490
最終的にそれだろうけど
エラーメッセージが違うんだよなー

507:デフォルトの名無しさん
15/08/18 09:05:35.08 JFS1mc9t.net
>>498
あ、ごめん型の問題でもあったねw
おれは知恵袋の方しか見てなくて>>487のレス読んでなかったw
>>487
Textbox1の型はどうなってんのよ
うだうだ言っても始まらないからコード晒したら?
■コードを貼る場合はこちら
URLリンク(ideone.com)

508:デフォルトの名無しさん
15/08/18 09:29:08.18 O5wCO4NL.net
>>487
コード晒さないにしても一字一句正確に書いてよ
>Form1でForm2のTextbox1.text
>(Form2Obj.textBox1.Text = "こんにちは";のように)
TextBox1が先頭小文字になってるから、
Form2.cs
public object textBox1 { get; }
を想像したんだけど

509:デフォルトの名無しさん
15/08/18 09:31:26.11 C75F2sdQ.net
ゲッターやセッターの中でこういう事やるなって処理があれば教えて下さい

510:デフォルトの名無しさん
15/08/18 09:35:25.75 O5wCO4NL.net
(set書き忘れた)

511:デフォルトの名無しさん
15/08/18 09:37:41.70 JFS1mc9t.net
>>502
必要なことならなんでもやっていいのよ

512:デフォルトの名無しさん
15/08/18 10:04:42.64 v9B/n+sr.net
セッターの中でゲッターをあまり呼ばないことぐらいかな?
意図的にやる場合はいいけど、無意識に使っているとバグの元になる

513:デフォルトの名無しさん
15/08/18 10:35:34.34 A08QTc66.net
これをやっとくと便利だな というのはなるべく避ける
これをやっとかないのはどう考えてもアホやろ というのをしぶしぶ入れる
無駄に何回も呼ばれても困らないようにする
というかそもそもゲッターセッターをむやみに作らない・露出しない のが美しいオブジェクト設計

514:デフォルトの名無しさん
15/08/18 12:17:05.48 +z7OWFlW.net
抽象的に言えばやるべきでないのは根拠がない教条主義だな
セッターやゲッターでやってはいけないことがあるんだって発�


515:zそのものがよく分からない。 むしろ>>502は何でこういう疑問を持ったんだろう。



516:デフォルトの名無しさん
15/08/18 13:43:22.03 sLRvpB24.net
ベストプラクティスベストプラクティスって糞カスがうるさいから

517:デフォルトの名無しさん
15/08/18 15:27:08.93 5lg1jc8O.net
>>506
> そもそもゲッターセッターをむやみに作らない・露出しない のが美しいオブジェクト設計
こんなク○スレにもまともなやつはいたんだな
ちなみに俺もそれが理由でプロパティみたいなもんは存在からして不要だと思ってる
ゲッターセッターがむしろ書きにくく手間がかかる言語こそが本当に気の利いたOOPL

518:デフォルトの名無しさん
15/08/18 15:43:01.49 +rFwHajx.net
いや、オブジェクトなんぞ元々どぎたなくて美しさの欠片もない代物

519:デフォルトの名無しさん
15/08/18 16:11:49.85 IEGJFkcT.net
オブジェクト指向に美学を求めてもなぁ

520:デフォルトの名無しさん
15/08/18 16:19:58.26 +rFwHajx.net
しかし、オブジェクトに美しさを求めるって、どんだけオブジェクトの事をわかってないんだ?
という感じ、クラスやオブジェクトは元々どぎたないものを「隠す」というだけであって、
別に「美しくする」訳ではない(キリッ

521:デフォルトの名無しさん
15/08/18 16:55:22.43 vgvX2pjS.net
隠すのでも美しくするのでもないよw
っていうかオブジェクトって何だよw
OOの本質はクラスやインスタンスという一種の状態機械を
データや機能の収納箱として利用する、分類や整理の手法だと思う。

522:デフォルトの名無しさん
15/08/18 17:26:54.71 IEGJFkcT.net
OOの本質は、特にありません
モナド則のような厳しいしきたりもありません
本質的に守らなければならないルールは、
リソースリークに気をつけるぐらいでしょうか
みなさん自由にしましょう

523:デフォルトの名無しさん
15/08/18 18:17:06.72 C+CrAcbu.net
この場合、美しさはカンタンに定義できると思うけどなw
「美しさ=汚さの逆」であり
美しくする=汚くしない(ドヤッ

524:デフォルトの名無しさん
15/08/18 18:25:58.85 JFS1mc9t.net
ドヤッとかつけないで正々堂々とレスしようよ

525:デフォルトの名無しさん
15/08/18 18:31:45.16 GgDcmGMQ.net
やっぱりコピペ指向

526:デフォルトの名無しさん
15/08/18 19:08:36.73 MvA+WoyG.net
昔OOの本質はマルチプルインスタンスだって書いてる人もいたけど、
それはOOPを使えば簡単にそれが出来るというだけの話で、
オブジェクト指向の本質ではないと思う。

527:デフォルトの名無しさん
15/08/18 19:22:37.20 TP6OV89s.net
OOPの本質はモジュール化だよね
OOP以前にあったものの小さい版
プロセスとスレッドの関係に似てる

528:デフォルトの名無しさん
15/08/18 19:42:27.95 IEGJFkcT.net
何かに似ているとか、たとえ話とか、そういうのいらないんで

529:デフォルトの名無しさん
15/08/18 19:52:27.38 JFS1mc9t.net
OOPの本質とか夏休みの宿題のネタくらいにしかならないだろ
まじどうでもいい

530:デフォルトの名無しさん
15/08/19 02:06:12.07 0nl1pVRH.net
DataGridViewがマウスのチルトで横スクロールしないのが不便なので
色々試行錯誤したんですがあと一歩のところでうまくいきません。
派生クラス作ってWM_MOUSEHWHEELを拾って
HorizontalScrollBar.Value += 10;
と書いたんですが、バーは動くけど中身のデータ表示部が微動だにしないんです。
ここからさらにバーの動きに連動して中身のグリッドも左右に動かすには
どうしたらいいんでしょうか。

531:デフォルトの名無しさん
15/08/19 08:47:52.85 /Qsn/PCA.net
DataGridView知らないけど
設定後に更新とか再描画させてみた?
Javaだとそういう場合だいたい
コンポーネントに対してrepaint()を手動で呼ぶ

532:デフォルトの名無しさん
15/08/19 09:27:13.54 9fa2/Guo.net
俺も知らないけどHorizontalScrollingOffset使うって書いてあるよ

533:522
15/08/20 05:08:37.71 IiHrtFdq.net
>>523
>>524
ありがとうございます
HorizontalScrollingOffset += 10;
これで思い通りの動きになりました。
再描画系は
Refresh()
Update()
Invalidate()
を試してみましたがどれもダメでした。
HorizontalScrollBar.Valueはあくまでバーの位置を指定するだけで
グリッド部分には影響しないのかもしれません。

534:デフォルトの名無しさん
15/08/21 18:42:46.11 YBnVLwK5.net
zip/rar ファイルを扱うために SevenZipSharp.DLL を使用しています。
スレッド内で SevenZip.SevenZipExtractor を作成し、展開はできるのですが、
スレッド外で SevenZip.SevenZipExtractor を作成し、スレッド内で展開しようとすると
System.InvalidCastException の例外が出てしまいます。
ファイルのキャッシュ等をしたいのでスレッド外で SevenZip.SevenZipExtractor を
作成したいのですが、エラーにならずに展開できないでしょうか。
もしくは、それができる zip/rar 展開用(MemoryStreamに解凍できるもの)ライブラリ
があれば教えてください。

535:デフォルトの名無しさん
15/08/21 18:48:48.63 NPCxxztI.net
そもそもスレッド内外ってなんだ(哲学
UIスレッドの話なら非同期メソッドつかえ
Begin~の奴

536:526
15/08/21 20:14:20.47 YBnVLwK5.net
すみません、こんな感じです。
private void ok_tt()
{
SevenZip.SevenZipExtractor szExt1 = new SevenZip.SevenZipExtractor("test.zip");
MemoryStream ms = new MemoryStream();
szExt1.ExtractFile(0, ms); // OK
}
private void OK()
{
Thread tt = new Thread(new ThreadStart(ok_tt));
tt.Start();
}
private SevenZip.SevenZipExtractor szExt2;
private void ng_tt()
{
MemoryStream ms = new MemoryStream();
szExt2.ExtractFile(0, ms); // Exception
}
private void NG()
{
szExt2 = new SevenZip.SevenZipExtractor("test.zip");
Thread tt = new Thread(new ThreadStart(ng_tt));
tt.Start();
}
NG() の形でやりたいのですが例外が発生してしまいます。

537:デフォルトの名無しさん
15/08/21 21:04:36.41 n472Qw2U.net
ネイティブDLLの仕様だろ
Cならそういうのはよくあること
SevenZipExtractorのコンストラクタはStreamを引数に取るオーバーロードもあるんだから、
Streamだけスレッド外で作っとくとかでファイルのキャッシュくらいどうとでもなるだろ

538:デフォルトの名無しさん
15/08/21 21:53:16.84 +BYzVuol.net
BeginExtractFile使えば例外は飛ばないけど
FileExtractionFinishedでMemoryStreamとれないから、どうにかしないといけない
private void ng_tt() {
 MemoryStream ms = new MemoryStream();
 szExt2.FileExtractionFinished += SzExt2_FileExtractionFinished;
 szExt2.BeginExtractFile(0, ms);
}
private void SzExt2_FileExtractionFinished(object sender, SevenZip.FileInfoEventArgs e) {
   //eからはMemoryStreamとれない
}

539:526
15/08/21 22:36:17.52 YBnVLwK5.net
>>529
FileStreamで組んでみましたが、SevenZipExtractorを閉じる時にストリームも一緒に閉じられてしまうようで、
毎回MemoryStreamにコピーしなければなりません。
そうすると遅延軽減のための処理が余計な時間をくってしまいそうです。
アドバイスありがとうございました。
>>530
ストリームがとれないと厳しいですね・・・

540:デフォルトの名無しさん
15/08/21 23:13:26.69 +BYzVuol.net
ArchiveFileInfoをキーにしてMemoryStreamをDictionaryにでも突っ込んどいて
FileExtractionFinishedのe.FileInfoでMemoryStreamを取り出すとかじゃだめなんかね
いや、まぁてきとーに思いついただけだから・・・

541:デフォルトの名無しさん
15/08/21 23:31:20.10 YNgc8We+.net
URLリンク(akabeko.me)
こちらのサイトで"MeteringStream というクラスは NAudioDemo のものを流用している。"と書いてあったのですがNAudioDemoをダウンロードしたのですがどのファイルを参照についかすればいいか分かりません。
どれを追加すればいいのでしょうか?

542:デフォルトの名無しさん
15/08/21 23:36:45.66 Je5mj4J0.net
>>533
ふらっとで叱られた子じゃん
351 名前:デフォルトの名無しさん[sage] 投稿日:2015/08/18(火) 19:50:36.75 ID:JFS1mc9t
NAudioでぐぐって懇切丁寧に説明してくれてるサイトが見つかるのにそれ見ないでグダグダ言ってたりしないよな?

543:デフォルトの名無しさん
15/08/21 23:39:42.47 n472Qw2U.net
>>533
そのレベルでの試行錯誤は時間の無駄だからちゃんと本読んで出直してきなさい

544:デフォルトの名無しさん
15/08/22 00:12:23.71 /ddVcb/Z.net
javadocのような物が乗ってるサイトはないのでしょうか?
サンプルソースばかりでクラスの継承関係やメソッド、引数、戻り値などが分からないので。
できれば日本語でお願いします。

545:デフォルトの名無しさん
15/08/22 00:15:34.86 5hyMMp2f.net
C#相談室(相談に答えるとは言ってない)

546:デフォルトの名無しさん
15/08/22 00:16:33.52 u4KBIQ2T.net
え、一体どこのサイトを見てんの?
MSDN見てる?

547:デフォルトの名無しさん
15/08/22 00:22:31.03 6V9DEjWD.net
どぼんでも見てんじゃねえの

548:デフォルトの名無しさん
15/08/22 00:41:51.73 /ddVcb/Z.net
ここ
URLリンク(akabeko.me)

549:デフォルトの名無しさん
15/08/22 00:54:00.36 oxql1dUV.net
なんだNAudio君か
ID変わったら分かるわけねえだろ
で、リファレンスは無いらしいよ
ましてやこんなマイナーライブラリで日本語でなんて夢のまた夢だね
諦めて畑でも耕してろよ田子作君

550:デフォルトの名無しさん
15/08/22 01:01:47.13 KIpdc5GT.net
>>541
これNAudio 本体のソースあるだろ・・・何が解らないのかマジで意味が判らない

551:デフォルトの名無しさん
15/08/22 15:19:12.99 /ddVcb/Z.net
色々調べたら.NETはHTMLではなくXMLでドキュメントを出力すると書いてあったのですが付属のXMLはどうやってみればいいのでしょうか?

552:デフォルトの名無しさん
15/08/22 15:22:26.90 ixHtKeVz.net
>>539
ドボンわかりやすくて好きなんだけど評判悪いの?

553:デフォルトの名無しさん
15/08/22 15:46:33.05 FsGTTI8e.net
大雑把だからねあのサイト

554:デフォルトの名無しさん
15/08/22 15:55:11.13 3HC4qH6u.net
>>543
sandcastle とかの話?

555:デフォルトの名無しさん
15/08/22 15:58:13.44 sBJvd1d/.net
>>543
XML無いんだろ?じゃあ見れないよ

556:デフォルトの名無しさん
15/08/22 16:07:06.30 oDfmtetu.net
>>544
どこの世界にも、自分は何もしないで他人の貢献にケチをつけるだけの卑しい馬鹿はいる。

557:デフォルトの名無しさん
15/08/22 16:49:23.39 gTtGqll8.net
>>544
わりと古い情報が残ってる

558:デフォルトの名無しさん
15/08/22 16:56:24.11 /dRiP8l8.net
そんなの一カ所だけじゃなくて複数箇所見て比較すれば済む話なんじゃ。。
多少問題があっても有効な情報も多数あるサイトならあった方が便利だと思うんだけど。

559:デフォルトの名無しさん
15/08/22 17:07:23.50 /ddVcb/Z.net
>>547
NAudio.XMLがついていましたがどのような形式で書いてあるのかが分かりません

560:デフォルトの名無しさん
15/08/22 17:15:56.97 +n0G/6wG.net
xml形式だよ

561:デフォルトの名無しさん
15/08/22 17:37:51.84 KIpdc5GT.net
>>549
1.1~2.0の頃のネタばかりだから昔はお世話になったけど、今は検索でヒットしてもスルーしちゃうわ

562:デフォルトの名無しさん
15/08/22 17:51:26.44 JpeLxAWc.net
ドボンってIDisposableなオブジェクトでも基本usingしないというありえないコードばかりなので

563:デフォルトの名無しさん
15/08/22 18:00:11.86 sBJvd1d/.net
>>554
そりゃそのまま使っちゃだめだよ

564:デフォルトの名無しさん
15/08/22 18:09:11.16 TF79Y1M/.net
>>554
前も書いたけどあそこはそこまで酷いコードはない。

565:デフォルトの名無しさん
15/08/22 18:18:17.85 TF79Y1M/.net
っていうか、ちゃんと記事読んだことがあれば、あそこの管理人がそんな馬鹿じゃないことぐらいは
分かると思うんだけど。
2chって何かを貶めることで自分が一人前だと錯覚したがってるとしか思えない馬鹿多いけど痛々しいよ。

566:デフォルトの名無しさん
15/08/22 18:25:43.07 zOssAmca.net
>>544
>>536 に対して >>538 で、そういったリファレンスならMSDNだろ的な指摘して
>>539 はサンプル的なサイト見てんじゃないかと言っただけだろうと思う。
ドボンが悪いとかは書いてない。

567:デフォルトの名無しさん
15/08/22 18:27:46.34 yRr1oZWk.net
msdn.microsoft.comのAPIリファレンスとリフレクタ(今はILSpy)だけで
すべてやりくりしてきた俺、ドボンを知らず低見の見物

568:デフォルトの名無しさん
15/08/22 18:34:01.47 /al9OGnB.net
>>557
後半
あるあるある

569:デフォルトの名無しさん
15/08/22 20:23:16.96 JpeLxAWc.net
>>557
いや、当人がどんな人物であったかとは関係なく、
あのコードを垂れ流しているというのは犯罪に近いよ。
分かってる人にはいいけど、初心者にはあまりいい影響を与えない。
何かを公開して流布している責任というものがある

570:デフォルトの名無しさん
15/08/22 20:41:11.99 9JN1kuOn.net
言論の自由があるので仕方ない

571:デフォルトの名無しさん
15/08/22 21:22:44.29 /dRiP8l8.net
そもそもネットの記事を鵜呑みにするヤツの方に問題があるんでわ。

572:デフォルトの名無しさん
15/08/22 21:28:50.69 Z73ESiAy.net
>>561
わかる
でもそれは仕方ない
「にわかな奴ほど語りたがる」の法則は今だ根強い
糞かどうかの判断がつかないから顔面に糞つけて糞頬張りながら糞うpするんだよ

573:デフォルトの名無しさん
15/08/22 21:35:41.70 3HC4qH6u.net
>>561
具体的にどれよ
url 教えてくれ

574:デフォルトの名無しさん
15/08/22 22:46:49.90 FpzfkEmP.net
>>559
.NETのソースならよく読むけど、逆コンパイルするほど気になるソフトってなんかある?

575:デフォルトの名無しさん
15/08/23 01:33:58.42 kX8AQ+CF.net
>>561
犯罪的なコードって何でしょう?

576:デフォルトの名無しさん
15/08/23 03:28:16.91 AQ6+ZwTX.net
>>554
あそこはVB.NETがメインで、Usingが使えるようになる前からのコードがあるからだよ
Disposeしろって注意書きは時々みかけるし、そもそもあそこ初心者のためのサイトじゃないと思うが

577:デフォルトの名無しさん
15/08/23 10:55:36.67 BEYfXVp0.net
Dispose厨のレベルの低さに泣ける
何でもかんでも明示的に破棄するのはアホのやる事だぞ
マネージドって言葉の意味少しは考えろよ

578:デフォルトの名無しさん
15/08/23 11:11:07.80 U8H/JFYc.net
Dispose厨ってのは
MSDNも読まずにマネージドリソースの解放にDisposeを使っちゃう
アホなクラス設計者のことですよね?

579:デフォルトの名無しさん
15/08/23 11:15:15.60 QlQ/u5s/.net
人を非難する前にマネージドリソースとは何か明確に定義せよ

580:デフォルトの名無しさん
15/08/23 11:15:48.70 CLEYS0FF.net
>>569
どゆこと?
>>570
>マネージドリソースの解放に
それはGCがやるもんだが

581:デフォルトの名無しさん
15/08/23 11:49:28.77 BEYfXVp0.net
クリティカルなリソースはusingを使うべきだ
パフォーマンス問題になるならusingを使っても良い
しかしそれ以外ではusingを使うな
CLRに全てを委ねてプログラマをリソース管理の責務から解き放つのだ

582:デフォルトの名無しさん
15/08/23 12:05:44.69 9aqT3FI6.net
メモリ以外のリソースはすべて・・・・

583:デフォルトの名無しさん
15/08/23 12:17:42.22 CLEYS0FF.net
>>573
全く分からん

584:デフォルトの名無しさん
15/08/23 13:15:02.38 JQjk+2hP.net
マネージドリソース
それは(ライブラリの中のコード含めて)ネイティブを使わずに記述できるもの
ファイルやTCPソケットはこれに該当しない
クリティカルとか言ってる馬鹿は放置

585:デフォルトの名無しさん
15/08/23 13:20:50.40 9aqT3FI6.net
メインメモリ以外のリソースはすべてアンマネージドだ

586:デフォルトの名無しさん
15/08/23 13:22:15.46 prCrabVF.net
usingを使えるってことはIDisposableなわけで、つまりそのオブジェクトがアンマネージドオブジェクトを含んでいたりラップしているのが普通だ
IDisposableをやたら使うなならともかく、usingを使うなってのは意味がわからんな

587:デフォルトの名無しさん
15/08/23 13:33:23.13 /F5UpcuB.net
ファイルやTCPがマネージドとか言い切ってる奴大丈夫かよ

588:デフォルトの名無しさん
15/08/23 13:36:39.19 bbkyb+Wi.net
8月以降このスレで大丈夫そうな書き込みは見てませんよ
ここまで無脳と馬鹿のコラボばっか

589:デフォルトの名無しさん
15/08/23 13:43:35.74 zGFxmPuI.net
ちょっと上にあった「ニワカほど語る」法則が炸裂してんだろ。
確かにDisposeだのマネージドだのニワカくせー話題だわ。

590:デフォルトの名無しさん
15/08/23 15:33:29.02 JLY6V2Uz.net
無脳なのは573と579と581ぐらいじゃないか

591:デフォルトの名無しさん
15/08/23 15:44:14.12 1KB/gLgO.net
ファイルみたいな共有リソース掴んでない限りGCされるまでメモリを消費するだけだし、Disposeする必要のない場面もあったりする
呼んで損はないから、明らか不要なとき以外は呼ぶが吉だけどね
WPF版のドボンみたいなサイトがほしい

592:デフォルトの名無しさん
15/08/23 15:54:39.63 Rmxdvxky.net
>Disposeする必要のない場面もあったりする
へー、どんな場合だよ
ただしawaitのTask以外で

593:デフォルトの名無しさん
15/08/23 15:58:35.35 cYtxjCYh.net
WPF(笑)
存在そのものが意味不明なフレームワークは隔離スレで大人しくしてなよ
お呼びじゃないから

594:デフォルトの名無しさん
15/08/23 16:04:54.83 UzzkwRGD.net
>>584
GDI+関係はかなりあるよ。
Win9x時代はOSの制約上確実に呼ぶ必要があったが今は必ずしも必要ないもの

595:デフォルトの名無しさん
15/08/23 16:19:52.74 bbkyb+Wi.net
頭がとろけたような具体性のかけらもない会話

596:デフォルトの名無しさん
15/08/23 16:24:59.06 hc4Y2Ev5.net
無脳だと認めたら終わってしまうくらい他に何かが無いのに、これ以外にできることが無い奴なんだろうな
暴れすぎやで
> 573,579,581

597:デフォルトの名無しさん
15/08/23 17:28:44.31 MIhiF6BJ.net
リソースクラスにはDisposeパターンを適切に実装する
実際にDisposeする時期はCLRに任せて人間は管理しない
これ.NETの世界じゃ基本中の基本だよ
管理不要でパフォーマンスへの影響もないリソースを工数かけて人間の手で管理したがる
救いようのない馬鹿としか言いようがない

598:デフォルトの名無しさん
15/08/23 17:37:04.51 CLEYS0FF.net
はぁ??

599:デフォルトの名無しさん
15/08/23 17:43:43.11 MIhiF6BJ.net
>>590
やれやれ
論理的な反論ならまだ救いようがあるが、
無学が原因で理解が及ばない、ってだけでケチを付けるなよ
それもう敗北宣言に等しいぞ

600:デフォルトの名無しさん
15/08/23 17:48:20.40 0gT6iToJ.net
>>586
kwsk
StringFormatとかIDisposableだから律儀にusingしてるけど

601:デフォルトの名無しさん
15/08/23 17:50:34.03 0gT6iToJ.net
起動してすぐ終了するようなツールしか作らないならファイナライザ任せでもいいかもね

602:デフォルトの名無しさん
15/08/23 17:54:13.26 hc4Y2Ev5.net
リソースの意味が微妙な感じの流れだから、それは置いとくとして
ファイルなどを取り扱う場合はちゃんとDisposeしないとファイルが開きっぱなしになって、他所からアクセス不能になって困る事がある
必ずクローズすれば良いが、例外などで予想外の進行をした場合に備えて using で確実なDisposeをしておいた方が良いだろう
面倒だがDisposeがあるなら必ずDisposeするべきでしょう
C++などの場合と比べてファイナライザ(デストラクタ)の実行順序が当てにならないので、あてになる順序をきちんと作る必要がある場合も利用されるでしょうから

603:デフォルトの名無しさん
15/08/23 17:57:04.83 bbkyb+Wi.net
あの、ふらっとでやってくれる?
そういうの

604:デフォルトの名無しさん
15/08/23 18:01:14.22 hrfhzpqC.net
ニワカなやつほど(略

605:デフォルトの名無しさん
15/08/23 18:04:40.51 MIhiF6BJ.net
>>594
当然
適切な終了処理が必要なものは、そう書く必要がある
しかし、そういった処理が不要で、CLRに任せておけば良いように作られたリソースクラスでは必要がない
むしろ不必要な記述でコードを汚染するだけなので、書いてはいけない
すでに自動化されているものは、機械に任せるのが正解なのである

606:デフォルトの名無しさん
15/08/23 18:04:49.28 hc4Y2Ev5.net
595,596
煽りたいだけなら、今すぐネット切って死んでしまえば良い

607:デフォルトの名無しさん
15/08/23 18:09:32.22 hc4Y2Ev5.net
>>597
Disposeを書くという事は、今後そのライブラリを作った人が
そのように使う必要があるよう変更するかもしれないという余地が残っているのです
みんなで作業するときトラブルなどが発生しないように取り決めた事ですから、可能な限り従う事がよろしいでしょう

608:デフォルトの名無しさん
15/08/23 18:13:39.60 bbkyb+Wi.net
煽りたくないけど低レベル過ぎて邪魔だよ
どっから湧いてるの?

609:デフォルトの名無しさん
15/08/23 18:17:14.27 idej2sB9.net
>>600
お前も煽ってるだけで何も貢献してないけどな

610:デフォルトの名無しさん
15/08/23 18:17:59.99 GkEjDFKz.net
俺のDisposable講義は始まったばかりだぜ
聞きたくない奴は帰りな

611:デフォルトの名無しさん
15/08/23 18:21:04.69 GkEjDFKz.net
MSDNやそこらのブログに散々書いてあるようなことしか言わないぜ
耳タコだと思うが勘弁な
俺は喋りたいんだ
昨日今日知ったばかりなんでな
だから聞いてくれ

612:デフォルトの名無しさん
15/08/23 18:23:20.43 MIhiF6BJ.net
>>599
そんな糞みたいな仕様変更をする破壊工作員は処刑が必要
ぶっちゃけコード直してる場合じゃない
最初のバージョンから、Disposeが必須であると、明記されているなら使うべきだし
明記されてい無いなら、Disposeを必須にするような変更は行ってはならない
馬鹿でもわかる話だが知らなかった?

613:デフォルトの名無しさん
15/08/23 18:27:38.13 NRN2Fhep.net
お前の頭から修正しとけよ
もうリカバリ不能かも知れんがな

614:デフォルトの名無しさん
15/08/23 18:34:31.35 MIhiF6BJ.net
ふぅ~
まいったね
反論すらできないところまで追い詰めちゃったか
論理的な、とまでは言わないから、せめて安い暴言じゃなくて反論を頼むよ

615:デフォルトの名無しさん
15/08/23 18:36:25.70 UiYX5d8M.net
そもそもリソースクラスって何だよ

616:デフォルトの名無しさん
15/08/23 18:36:31.29 nxY8tWuM.net
ちょっとこのスレDisposeしてくる

617:デフォルトの名無しさん
15/08/23 18:41:24.76 bbkyb+Wi.net
Disposeの実装が糞で駄目なパターンだな

618:デフォルトの名無しさん
15/08/23 18:41:34.58 UiYX5d8M.net
それに呼ばないのが基本中の基本としつつもIDisposableの代表例


619:であるFileStreamを例外にするってどういう事だよ 長々と書いているが結局呼ばなくていい場合があると言いたいだけか?



620:デフォルトの名無しさん
15/08/23 18:44:40.15 JbH8lT1Q.net
MSDN確認してその通りにやればいいだけでは?
> 基本クラスが IDisposable を実装する場合は、オブジェクトは基本クラスの Dispose メソッドも呼び出す必要があります。
> Dispose のメソッドを明示的に呼び出す必要があるため Dispose のメソッドを呼び出してオブジェクトのコンシューマーがに失敗したため、
> アンマネージ リソースが解放されないこと危険性が常にあります。 これを回避するには、次の 2 とおりの方法があります。
> ・System.Runtime.InteropServices.SafeHandle から派生されるオブジェクトのマネージ リソースをラップしてください。
> ・Dispose が呼び出されないときにリソースを解放するようにファイナライザーを実装してください。
> StreamWriter などのアンマネージ リソースにアクセスするオブジェクトを使用するときは、using ステートメントでインスタンスを作成することをお勧めします。
> using ステートメントは、使用しているコードが完了すると、ストリームを自動的に閉じ、オブジェクトの Dispose を呼び出します。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx

621:デフォルトの名無しさん
15/08/23 18:50:22.66 53h6zSH3.net
CLR再起動

622:デフォルトの名無しさん
15/08/23 18:50:45.39 hc4Y2Ev5.net
>>604
それでは共同作業になりませんね、そこまで自我を通したいなら自分一人で作業するしかないでしょう
取り決めは大事

623:デフォルトの名無しさん
15/08/23 18:53:42.93 MIhiF6BJ.net
>>613
共同作業を円滑にするために、常にDispose必須、とかいうオレオレルールを排除しなければならない
理由はもう説明したな

624:デフォルトの名無しさん
15/08/23 18:59:05.24 53h6zSH3.net
今度は共同作業のマナー論ですか
君らはまず場を弁えることを学ぶのが先決では…

625:デフォルトの名無しさん
15/08/23 19:02:58.05 8rh7GHk2.net
>>592
Font, Brush, Penなんかは自分で作った物(システムリソースじゃない)であっても
今のWindowsではいちいちDisposeしなくてもまず何の問題もない。
そうは言っても習慣で書いちゃうけどね。

626:デフォルトの名無しさん
15/08/23 19:09:30.05 2AMvri3n.net
>>616
そうなんだ
でも呼ばないと高コストなファイナライザでの解放になっちゃうしね

627:デフォルトの名無しさん
15/08/23 19:24:52.17 qzhEyH2V.net
今unityでゲームを作っているのですが、累計の記録ってどう書けばいいのでしょうか?
今まで対象のオブジェクトが何回タップされたか記録したいです。
playerprefsを使えばできますか?

628:デフォルトの名無しさん
15/08/23 19:25:54.56 idej2sB9.net
unityスレで質問しなよ

629:デフォルトの名無しさん
15/08/23 19:36:46.47 hc4Y2Ev5.net
Disposeがどうしても嫌なら、勝手に俺ルールを作り出さず素直にファイナライザに書けばいいんだよ
そういうルールで作ろうという事になっているんだから
それで問題なければそれで上手くいく、そうでないものは決められた極力ルールに従う事
そうしてファイナライザのみにすると具合が悪い話が必ず出てくると気付くはず
例えば、ファイルオブジェクトのように、ロック握っている奴とか
例えば、アンマネージ側の参照カウンタがカウントダウンされなくて予想外のメモリーリークしたとか
例えば、C++のつもりでデストラクトの順序を考えていたら予定外の順序でファイナライザが起動してクラッシュしたとか

630:デフォルトの名無しさん
15/08/23 19:44:15.23 0gT6iToJ.net
>>616
システムリソースじゃないってほんとかい? GDIオブジェクトとしてタスクマネージャに表示されるんじゃないの?
でも大概描画=なんども呼ばれるシナリオだから
そのたびに破棄しておいたほうがメモリ的にも安心じゃね?

631:デフォルトの名無しさん
15/08/23 19:45:43.68 MIhiF6BJ.net
>>620
何回言えばいいのかな
呼び出しが必要な必要と使用に明記する
明記されない以上は明記しなくても問題ないように実装する
それが社会のルールだ
呼ばないとダメになる場合があるのにそれを仕様に明記しないでDisposeが呼ばれるオレオレルール(出典不明)を前提に作るな
クズが死ね

632:デフォルトの名無しさん
15/08/23 19:53:17.04 JbH8lT1Q.net
>>616
今更ながらPenがDisposeを実装していると知った。(もちろんDisposeしたことはない)
何でこれまで気づかなかったのかと探せば、
PenのサンプルコードではDisposeしているが、DrawLinesのではしていないからだ。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
なお、これまで特に問題を感じたことはなかった。
>>617
Finalize自体はDisposeと大して変わらないよね?
GC自体のコストと、メモリ撹拌の問題はあるにしても。
Disposeした方がもちろんお行儀がいいとして。
てか、gcnew って delete しなくていいためのものじゃなかったんかー!
ファイルはクローズしてるけど、他は全部放置してたわw
(なおVC++使い)

633:デフォルトの名無しさん
15/08/23 19:58:35.53 nxY8tWuM.net
このスレを読んだら初心者の私もウルトラスーパーハイパーミラクルアルティメットDispose名人になれました!

634:デフォルトの名無しさん
15/08/23 20:01:04.88 MIhiF6BJ.net
>>623
deleteしなくても良いであってるよ
自動化したのに手作業が必要なんて馬鹿みたいだろ

635:デフォルトの名無しさん
15/08/23 20:08:50.19 9aqT3FI6.net
でも、ファイナライザは論理アドレスが圧迫されてGCが発動しないと呼ばれないよ
メモリとシステムリソースは別物だから、
開放のトリガーを論理アドレスの枯渇に頼るのは良くない作法なのでは

636:デフォルトの名無しさん
15/08/23 20:09:16.04 hc4Y2Ev5.net
初心者の頃 Disposeし忘れて、ライブラリの書き直しが大変な事になったのでは GetEnumerator() で取ってきたIEnumerableのDisposeのし忘れかな
ファイルオブシェクトをこっそり握っていて、ファイルがロックされたままだったのを
色々システムを結合した後に気づいて、泣きそうになった
C++から移行した後、嵌ったのは
class A
{
 ~A() {}
}
class B
{
 A a;
 ~B() {}
}
var tmp = new B();
こういったケースかな、C++であれば必ず a のデストラクタが後だが C# だとどちらが先になるか分からなくなる
C++と違いデストラクタではメンバは迂闊に触れないという事実を思い知らされた

637:デフォルトの名無しさん
15/08/23 20:18:42.77 hc4Y2Ev5.net
おっと、GetEnumerator() で取って来れるのは IEnumerable ではなくて IEnumerator でした
Disposeがリソースと関係なく必要になるケースはC++と違いデストラクタがまともに使えないという事情から来ることも多々あります

638:デフォルトの名無しさん
15/08/23 20:20:23.58 ZkLCFLWu.net
まだやってやがる
死ねよマジで
それともあれか、手伝って欲しいのか?
殺してやるから住所教えろや

639:デフォルトの名無しさん
15/08/23 20:26:42.76 0gT6iToJ.net
>>629
おまえの住所先に書けやバカヤロウ

640:デフォルトの名無しさん
15/08/23 20:27:29.87 bbkyb+Wi.net
見なかったことにしてやるからさっさと執行してくれや

641:デフォルトの名無しさん
15/08/23 20:31:02.28 MIhiF6BJ.net
おうかかってこいやチキン野郎

642:デフォルトの名無しさん
15/08/23 20:50:07.75 JbH8lT1Q.net
>>625
コンセプトとしてはその通りだけど、ID:hc4Y2Ev5が言っているのもまた然りだと思うよ。
本来は、全部GCに任せた上で、理由がある場合のみ手動でDisposeという仕様を目指しているのだと思う。
現実的にはこれはほぼ完成しており、通常の範囲で問題になることはない。(少なくとも俺は命中していない)
ただ、MSDNで
> 基本クラスが IDisposable を実装する場合は、オブジェクトは基本クラスの Dispose メソッドも呼び出す必要があります。(611)
と言っている以上、Finalizerだけでは駄目なケースがあって、それに命中する可能性も残っているのだと思う。
とはいえ、普通に実装すればFinalizeはまずDisposeをコールするだろうから、
問題が発生�


643:キるとしたらタイミングだけのはずだけど。 確認してみたけど、C#のデストラクタは起動を予約してGCから起動するという仕様のように見える。 > http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_011/csharp_abc03.html 確かにこれだとFile等はClose/Disposeをしないといつロックを解除してくれるか分からない。 だから>>627-628の言うことはあっている。620の3つのケースもあり得ると思う。 理由は指摘の通り、C#ではデストラクタの起動順/タイミングが規定できないからだね。



644:デフォルトの名無しさん
15/08/23 20:50:20.22 1KB/gLgO.net
>>584
特定の方法でインスタンス作った時にだけ意味があるというのは割りとある
例えば、FormをShowした時とかは自動でDisposeされるから不要

645:デフォルトの名無しさん
15/08/23 21:31:38.21 hc4Y2Ev5.net
>確かにこれだとFile等はClose/Disposeをしないといつロックを解除してくれるか分からない。
ファイルオブジェクト的な物を使う側ではなく作る側で、実際にいろいろやってみて面倒な事になってるなと思ったのは
フィールド上に確保していたバッファがデストラクタ中のクローズ処理よりも先に解放されてしまうなどですかね
アンマネージの場合はこの辺は実にすっきり記述できるんですが、マネージでは厄介です
初心者の時
~Class() { Dispose(); }
なんて事をあまり深く考えずにやってました、そして謎の異常終了を発生させてましたね
Disposeが呼び出されずにデストラクタが呼び出されたら、できることはもはや安全停止だけです
まともな終了処理は最早できません

646:デフォルトの名無しさん
15/08/23 21:35:34.12 OpHxID+X.net
C++のノリでデストラクターを間違った使い方して
GCの洗礼を受けたのはわかった

647:デフォルトの名無しさん
15/08/23 21:37:58.50 aJXfAZiV.net
もうskypeで議論して最終的に友情をめばえさせたら?
C#である必要もないし

648: ◆QZaw55cn4c
15/08/23 21:38:38.49 GHcBJPT0.net
C++ でも delete this は普通やらない‥

649:デフォルトの名無しさん
15/08/23 21:40:51.66 hc4Y2Ev5.net
デストラクタ的な機能が欲しければC#ではDisposeしか手段が無いんです
ファイナライザは使えません、その処理はシステムに任せることはできないのです
それが分かっていないと安易にDispose不要という考えが出てしまいます

650:デフォルトの名無しさん
15/08/23 22:03:58.87 pgaNpm//.net
はいはいちごいねー
死ね

651:デフォルトの名無しさん
15/08/23 22:09:13.04 oScCmTRi.net
おい待てよ
Dispose不要派は
1.ファイナライザーでやればいいんだぜ
だけじゃなくて
2.解放など軟弱もののやること だってボクの環境で問題になったことないんだもん
の方が多数派だろ

652:デフォルトの名無しさん
15/08/23 22:11:48.27 rrCWAeC5.net
>>641
うるせえ喋んなカス死ね

653:デフォルトの名無しさん
15/08/23 22:13:14.66 nxY8tWuM.net
ここまで全部俺の自演

654:デフォルトの名無しさん
15/08/23 22:16:59.42 1KB/gLgO.net
>>633
IDisposableを実装している場合は、明らかに不要な場合以外は使い終わった後にすぐDisposeすべき
PenもBrushも中にGDIのハンドルを抱えてるわけで、アンマネージドのシステムリソースやメモリを必要以上に使ってしまう
ファイナライザは残っていると仕様上開放が先延ばしになって長時間メモリを占拠するから、想定よりコストは高い
>てか、gcnew って delete しなくていいためのものじゃなかったんかー!
WindowsがすべてGCの管理上で動くようになればな。GC管理外のデータはプログラマが責任を持たざるをえない

655:デフォルトの名無しさん
15/08/23 22:21:09.75 hc4Y2Ev5.net
コストに関しては、昨今はシビアなノーパソでもない限りは自分はあんまり気にしなくなってたりしますw
ロジック的にDisposeが必要不可欠な物の方を意識したいところです

656:デフォルトの名無しさん
15/08/23 22:24:17.01 prCrabVF.net
そういやVS2015から、IDisposable選択して右クリック→クイックアクションで、
Disposeのひな形吐き出してくれるんだよな。便利になったものだわ

657:デフォルトの名無しさん
15/08/23 22:29:32.06 MIhiF6BJ.net
最初から何度も言ってるがこれが正解な
1. Disposeしないと機能的にアウト→Disposeする
2. 機能的に問題ないがボトルネックになる→Disposeを許す
3. 機能的に問題ないうえに負荷も軽微→自動化しろ手で書くな
クライアントは殆どが3なんだわ
Disposeなんか要らないんだよ
これが今日のまとめね

658:デフォルトの名無しさん
15/08/23 22:33:20.72 hc4Y2Ev5.net
3. 機能的に問題ないうえに負荷も軽微→元クラスのIDisposeを除去せよ
これが正解です

659:デフォルトの名無しさん
15/08/23 22:37:13.05 YS/VElDC.net
1日かけて成果物3行って舐めてるのか貴様ら

660:デフォルトの名無しさん
15/08/23 22:37:24.13 JbH8lT1Q.net
>>639
仰るとおり、C++→C#へのポーティングではC#のデストラクタには期待できないから、
いちいち手動で順番も考慮してDispose()しかなさそうだ。
ただこれはだいぶ手間だから、何らかの上手い解決策が既にありそうだけどね。
仕様から言って、C#ではデストラクタの起動順を期待するコーディングをしてはいけない。
ただ、
> フィールド上に確保していたバッファがデストラクタ中のクローズ処理よりも先に解放されてしまうなどですかね (635)
これはよく分からない。(これが発生する可能性がシステム的にあることは分かる)
とはいえ、C#って多重継承できないし、アンマネージドとマネージドを混ぜてぐちゃぐちゃにしたりすることがなければ、
これって無いよね?
(逆に言えば、マネージドコードだけならこういったことは発生しない、と思っている。
そして本来はアンマネージドを大量に使うことこそが問題。ポーティングならある程度致し方ないにしても。)

661:デフォルトの名無しさん
15/08/23 22:37:59.91 hc4Y2Ev5.net
ここにはゲーム等、ハイパフォーマンスが必要になる人もいるでしょう
その時Disposeしなくても問題ないと開発元に確認できた、Disposeしない方が高速である事が確認された
そして、それをする事でソフトの商品価値が向上する、この条件でDisposeしないを選択するのが正しいと思う
それ以外は必ずやらなければ駄目です

662:デフォルトの名無しさん
15/08/23 22:38:00.89 HkRU0Alf.net
機能的に問題ないがDispose使わないとボトルネックになるなんて
どんな状況だよ

663:デフォルトの名無しさん
15/08/23 22:38:38.88 MIhiF6BJ.net
>>649
行数にこだわるのは老害の証
現代のプログラマは中身を見ないと

664:デフォルトの名無しさん
15/08/23 22:39:55.83 +kgkAxfw.net
>>647-648
「だから何」レベルのまとめはQiitaにでも書いといて
あと死ね

665:デフォルトの名無しさん
15/08/23 22:41:15.09 prCrabVF.net
なんかしらんが、このレベルの話題が一番盛り上がるよな
上でも下でもこうはならん

666:デフォルトの名無しさん
15/08/23 22:42:20.89 bbkyb+Wi.net
毛の壁を笑えんよこれは

667:デフォルトの名無しさん
15/08/23 22:45:56.71 hc4Y2Ev5.net
>>650
マークスイープでは順序を決めることができないんですよ
循環した参照がある場合どこから削除すべきかという判断材料がなくなる、ならば最初から順番は無視という判断なのだと思います
実際ガベコレ毎に順序は出鱈目です、気を付けてください
C++の場合、例えば循環参照があったらメモリーリークですが、プログラマのレベル高いから平気だよねってコンセプトではない訳です
それにしてもC++の芋ずる式デストラクタは気持ちいいです・・・

668:デフォルトの名無しさん
15/08/23 22:53:59.24 MIhiF6BJ.net
>>650
マネージドだけでも普通に発生する
バッファが回収可能になるのと所有者インスタンスがFRQにぶち込まれるタイミングはほぼ同時
どっちが先に処理されるかは誰にもわからない

669:デフォルトの名無しさん
15/08/23 22:58:36.70 MIhiF6BJ.net
というのは嘘だ

670:デフォルトの名無しさん
15/08/23 22:59:24.15 rRq+bYgY.net
>>659
そうかい
では死ね

671:デフォルトの名無しさん
15/08/23 23:01:02.88 MIhiF6BJ.net
>>660
しゃぶれよ

672:デフォルトの名無しさん
15/08/23 23:02:56.73 5fcokCbE.net
バカには難しかったかな
クラスAのオブジェクトaはクラスBのオブジェクトbを参照しているとする
A a = new A();
a = null;
ここでaとbが同時に解放対象になって、aとbの解放順序が非決定的

673:デフォルトの名無しさん
15/08/23 23:04:45.05 9aqT3FI6.net
何でそんなサンプルコードが必要だと思ったの?

674:デフォルトの名無しさん
15/08/23 23:06:20.29 JbH8lT1Q.net
>>657
見た目はマークスイープだけど、中身は参照カウント方式だったはず。(だからそれなりに順を追ってGCされる)
というのを中の人が書いたドキュメントがあったはずだが、検索しても今はでてこない。
ブクマによると多分以下なのだが、アーカイブになっていてどれなのか分かりませんorz
Microsoft .NET Framework の自動メモリ管理 Part I
URLリンク(msdn.microsoft.com)

675:デフォルトの名無しさん
15/08/23 23:07:02.82 hc4Y2Ev5.net
C++の人は、ここをミスしやすいと思うし、見ている印象結構C++からやってきた人多そうだから
悪くないサンプルだと思うのですが・・・

676:デフォルトの名無しさん
15/08/23 23:10:23.32 MIhiF6BJ.net
>>662
と思うじゃん?

677:デフォルトの名無しさん
15/08/24 00:08:47.57 genYk8wg.net
さてまとめるか。
「不必要にDisposeを量産するバカが多いため
usingを怠る悪習が蔓延した」

678:デフォルトの名無しさん
15/08/24 00:31:00.45 e5Jihg5N.net
IDisposeを持つオブジェクトを握るオブジェクトはIDisposeを持つしかない
不用意でなくても普通に増えるしかないよ
IDisposeを持つ物は Stream や Task があるがどれも基本的なクラスばかりで避けては通れない

679:デフォルトの名無しさん
15/08/24 00:35:53.34 4CFfNfbx.net
>>662
さすがにそのケースでのリークはないよね?
Array等の中身として参照を持っているだけなら、
そもそもデストラクタがどちらから呼ばれても問題ない。
継承関係なら自動でやってくれるはず。
自作クラスで継承以外で引っ張ってきている場合、必要ならデストラクタにその順通り書けばよく、
デストラクタがいつ呼ばれるかは問題ではない。
(自作クラスの一つのデストラクタだけで済むように構成する。
ただしリソース解放が必要ならDisposeを実装しないとタイミングが読めない。)
菱形継承で先に基底クラスが解放されたりするのは問題になるけど、C#にこれはない。
だから問題になるのは、一度しか呼ばれないアンマネージド側で
マネージドのデストラクタが呼び出し済みなのを期待している時で、多分これだけだよね?
マネージド側は放置しててもなんだかんだでいつかはGCされるはず。
それが嫌ならDisposeしろって事で。
だから、アンマネージドを先に全部解放するようにすれば、問題は発生しないと見た。

680:デフォルトの名無しさん
15/08/24 00:36:24.75 4CFfNfbx.net
なお、MSDNのデストラクターにまんま書いてある。
> デストラクターがいつ呼び出されるかはガベージ コレクターによって決定されるため、プログラマは制御できません。
> 一般に C# では、ガベージ コレクションを使用しない言語で開発する場合ほど、メモリ管理を必要としません。
> .NET Framework のガベージ コレクターが、オブジェクトに対するメモリの割り当てと解放を暗黙的に管理します。
> ただし、ウィンドウ、ファイル、ネットワーク接続などのアンマネージ リソースをアプリケーションでカプセル化するときは、
> デストラクターを使ってこれらのリソースを解放する必要があります。
> アプリケーションで貴重な外部リソースを使用している場合は、
> ガベージ コレクターがオブジェクトを解放する前にリソースを明示的に解放する手段を用意することをお勧めします。
> この処理を行うには、オブジェクトに対して必要なクリーンアップを実行する Dispose メソッドを IDisposable インターフェイスから実装します。
> これによって、アプリケーションのパフォーマンスを大幅に向上させることができます。
> このようにリソースを明示的に制御する場合でも、
> デストラクターは、Dispose メソッドの呼び出しが失敗したときにリソースをクリーンアップするための安全装置になります。
> URLリンク(msdn.microsoft.com)

681:デフォルトの名無しさん
15/08/24 00:42:37.88 e5Jihg5N.net
C#の場合デストラクタでやっていいことは、static関数の呼び出しくらいだろうな
class型フィールドの内容に触ることはできない、触ってよいのは int や enum といった値のフィールドだけ
それ以外の操作をしたければDisposeを使うしかない
順序良く呼び出されたとしてもこれでは何もできない

682:デフォルトの名無しさん
15/08/24 00:51:10.64 OjRQ25eS.net
ID:4CFfNfbx
この人は何言ってるかわからなくて、頭くらくらしますよね
そもそも話が通じてないし

683:デフォルトの名無しさん
15/08/24 01:04:15.56 e5Jihg5N.net
C++からのポーティングが引き返せないところまで来ているのかもw
笑っちゃいけないか、ご愁傷様かな(ナムナム

684:デフォルトの名無しさん
15/08/24 07:38:39.63 FEQDPFGC.net
なんか、マネージド/アンマネージドコードとマネージド/アンマネージドリソースがごっちゃになってる人がいるように見えるのは気のせいだろうか。

685:デフォルトの名無しさん
15/08/24 07:41:36.51 xNseMvgF.net
蒸し返すなゴミクズ

686:デフォルトの名無しさん
15/08/24 09:19:55.49 h+mHYijt.net
まだ続けるの?

687:デフォルトの名無しさん
15/08/24 09:50:06.14 xNseMvgF.net
もうウンザリ

688:デフォルトの名無しさん
15/08/24 10:58:39.56 /7MwCGkP.net
嫌なら見るな

689:デフォルトの名無しさん
15/08/24 11:48:38.94 Q0ZjIosN.net
いや、低レベルな話がしたいならふらっと行けよ
だからテメエは無脳なんだ

690:デフォルトの名無しさん
15/08/24 12:27:15.22 e5Jihg5N.net
一番低レベルなヤツ -> 679

691:デフォルトの名無しさん
15/08/24 13:03:00.83 kR1o4QUh.net
ここが隔離スレだ

692:デフォルトの名無しさん
15/08/24 15:21:00.93 /7MwCGkP.net
なんでいつも単発IDなんですかね

693:デフォルトの名無しさん
15/08/24 15:48:52.90 CmRZDEoS.net
単発が嫌なら見るなよ

694:デフォルトの名無しさん
15/08/24 15:52:52.92 mvfSohk+.net
>>682
IDがきちんと出るようにするだけの技術力がないから…

695:デフォルトの名無しさん
15/08/24 20:40:58.44 UIihvy++.net
C#って内部実装変えただけでも依存するアセンブリビルドしなきゃなの?

696:デフォルトの名無しさん
15/08/24 20:45:58.83 xp4qRvA3.net
必要なし

697:デフォルトの名無しさん
15/08/24 21:02:14.07 aDhIIP+g.net
ザマリン標準化まだ時間かかりそうですか

698:デフォルトの名無しさん
15/08/24 21:25:54.27 vU2SL/AS.net
Xamarinは目先の金儲けしか頭にないから期待しても無駄

699:デフォルトの名無しさん
15/08/24 21:46:54.78 8rH+FULH.net
>自作クラスで継承以外で引っ張ってきている場合、必要ならデストラクタにその順通り書けばよく、
これ正しいの?

700:デフォルトの名無しさん
15/08/24 22:31:14.60 vU2SL/AS.net
そのファイナライザ内だけで完結するんならそりゃそうだろ



701:AとBが両方ともアンマネージリソースを抱えている ・AがBを参照している ・ネイティブライブラリの仕様でBはAより先に解放しなければならないと決まっている こういう状況では当然単純にAとBのファイナライザに頼るわけにはいかない Bにはファイナライザを実装しないでAのファイナライザ内でBのリソースを解放し、 その後にAのリソースを解放するといった工夫が必要になる



702:デフォルトの名無しさん
15/08/24 23:17:12.96 4CFfNfbx.net
>>674
すまん、その通りだ。C#ではアンマネージドコードは禁止とは知らなかった。
解放しているのはunsafeで生ポインタだけか。
インラインアセンブラが出来るというのを見た覚えがあるのだが、気のせいだったようだ。
デストラクタも継承/オーバーロード禁止だから、>>671の言うとおり、staticにしか使えない。
C++からポーティングするなら、
デストラクタ内のは全部Disposeに移動し、そこで手動で親を呼んでおけばいい気がする。
これだとクラス内だけで留まる。
リソース解放タイミングを規定したいのなら手動でDisposeを呼ぶか、usingだね。
ただ、呼ばなくてもセグフォにはならないはず。
MSDNには
> C++ 経験者が C# で開発する場合
> デストラクタ : C# は、アンマネージ リソースを確定的に解放する場合の構文が異なります。
> デストラクタ
> using ステートメント (C# リファレンス)
> URLリンク(msdn.microsoft.com)(v=VS.90).aspx
だけだから、推奨はusingのようだ。
マネージドコードだけしか使えないのなら、本質的なリークはどうやっても発生しないように思える。
一時的なリソース枯渇はあり得るけど、例えばGDIなら描画しまくるアプリ(ゲーム等)でなければあまり気にしなくてもいいのでは。

703:デフォルトの名無しさん
15/08/24 23:21:14.35 agiYVVps.net
>リークはどうやっても発生しないように思える
こういう馬鹿がプログラミングの真似事をするとロクなことがない

704:デフォルトの名無しさん
15/08/24 23:23:09.51 163KCsEM.net
簡潔に一度だけ言うね
ID:4CFfNfbxはあと三年ROMってから
それからカキコしようね

705:デフォルトの名無しさん
15/08/24 23:26:49.44 OjRQ25eS.net
これさー
メモリ以外のリソース、たとえばウィンドウハンドルやGDIオブジェクトetcがさー
枯渇とまでいかなくても、使いすぎと感知したタイミングでGCが発動する仕組みが.Net側にあれば、
usingとか、ファイルなんかの特殊な事例以外では、要らなくなるのでは?
GC発動のトリガーがメモリだけに依存しているから、いろいろ心配になるわけで

706:デフォルトの名無しさん
15/08/24 23:27:45.15 vU2SL/AS.net
ファイナライザ内で別のオブジェクトにアクセスするのは基本的には問題ないぞ
その別のオブジェクトがファイナライザを持ってる場合には
既にファイナライザが呼び出されて無効になっている可能性があるからダメというだけ
ファイナライザを持ってるオブジェクトから参照で辿れるオブジェクトはどのみち全部一度復活して
GCを妨害してしまうから、アクセスすることが特にGCの妨げになるということもない
一番悪いのは「ファイナライザを実装すること」自体な

707:デフォルトの名無しさん
15/08/24 23:57:38.17 e5Jihg5N.net
ファイナライザに実装すべきなのは、安全装置だけだろう
例えばアンマネージドのハンドルを握っている場合
ハンドルはIntPtrだから、別のクラスに入れるといったことをせず直接フィールドに配置しているなら
アクセス可能だから、ここでリ参照カウンタをダウンすれば一応解放は可能
fopenみたいなものを相互運用している場合もハンドルとstatic関数をdllから呼び出せるなら
バッファのフラッシュは諦めるとしてもファイルを閉じることくらいはできる
いずれも最終手段レベルだね

708:デフォルトの名無しさん
15/08/25 00:04:34.64 uHUYRmLo.net
>>691
リーク問題については、あまり期待しないほうが良い
Excelの相互運用なんかをすると、当マイクロソフト製なのに結構厄介だし、洩れまくるし
自作でやってもなかなか糞な事になる

709:デフォルトの名無しさん
15/08/25 00:42:16.41 FzRJlm7d.net
すいません言い直します。
・C#では、正しく構成されたクラスを使用している限り、本質的なリークは発生しない。
(明示的にDisposeしなくてもいつか回収される《=Finalize時にDisposeが呼ばれる》)
じゃないかな?
もちろん.NET謹製のはリークしない。
自作クラスでアンマネージリソースを使う場合、MSDNによると、
・Disposeを実装し、SafeHandleでアンマネージリソースをラップする。←こっちがオススメ
・Finalizeを実装する。
のどちらかをやっておけばいいはず。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
だからリークしてるのであれば、自作クラスの構成がまずいのだと思うのだが。
もちろんクラスの構成はC++流(デストラクタ)ではなくC#流(上記)にしないといけない。

710:デフォルトの名無しさん
15/08/25 00:50:30.42 wg5Da8me.net
ListAとListBの中身を1つずつ比較して、ListBの内1つがListAに無かったらそのオブジェクトを追加し
同じものがあれば追加しないと言う機能を作りたいのですが、foreachだと例外が出て、
for文だと無限ループになってしまいどうやっても上手く実装できませんでした。
一体どうすればListの中身を1つずつ比較して問題なく追加する事が出来るのか教えていただけないでしょうか

711:デフォルトの名無しさん
15/08/25 00:57:16.45 bwlYR2I5.net
問題が起こる、最小のコードをアップしなさい

712:デフォルトの名無しさん
15/08/25 01:11:01.00 wg5Da8me.net
色々書き換え続けて最終的にコンパイルすら通らなくなったんですが多分こんな感じです。
if (ListA.Count == 0) foreach (var li in ListA.a) ListB.Add(li);
else for(int i=0; i < ListB.Count; i++){
  for (int x = 0; x < ListA.Count; x++){
if (ListA.a[x] != ListB.a[i]) ListB.Add(ListA.a[x]);
}}

713:デフォルトの名無しさん
15/08/25 02:03:56.13 bwlYR2I5.net
for( a: A )
for( b: B )
{

714:デフォルトの名無しさん
15/08/25 02:07:01.06 bwlYR2I5.net
擬似コードですが、これでどうでしょう
for( a: A )
{
  bool found = false;
  for( b: B )
  {
    if( a == b ){ found = true; break; }
  }
  if( !found ){ B.push_back( a ); }
}

715:デフォルトの名無しさん
15/08/25 02:56:24.98 wg5Da8me.net
よく考えてみたら1つずつ比較してる最中、違った瞬間に追加するってコードになってました。
それで調べたら配列の中を比較するIndexofという機能をついさっき知って実装したところ、上手く動きました。

716:デフォルトの名無しさん
15/08/25 04:17:23.94 ljTVrax0.net
ListB = ListB.Union(ListA).ToList();

717:デフォルトの名無しさん
15/08/25 07:28:11.84 uHUYRmLo.net
>>698
shared_ptr weak_ptr の使い分けのように仕組みを意識して使わないと
システム任せだと無理があるんだよ、SafeHandleを使えば万事解決という訳にはいかない
そろそろ諦めなはれ、アンマネージと相互運用したければ覚悟決めるしかねーですw

718:デフォルトの名無しさん
15/08/25 10:56:12.32 y1FTBoUo.net
アンマネージドとかどういう場面で使うんですか?
C言語とかの領域ですよね?
本見てもどういう場面で使うのか乗ってないんですが

719:デフォルトの名無しさん
15/08/25 11:03:08.95 aUx99M6r.net
アンセーフ?

720:デフォルトの名無しさん
15/08/25 11:33:21.01 Wpti2W5K.net
SafeHandleってサーバーで複数のドメインが1プロセスに同居するような特殊なシステムでない限り何の意味もないんだけどな
使いたがる連中のなかでそれを正しく理解してるのは少ない

721:デフォルトの名無しさん
15/08/25 11:43:43.66 lyj94kL0.net
まあ、C#は元々トロイからね、別に頑張って速くしたりするのは無駄だよね?(´・ω・`)

722:デフォルトの名無しさん
15/08/25 12:20:15.95 ya7qPQ7D.net
トロイ?ゆうちゃん?

723:デフォルトの名無しさん
15/08/25 12:57:13.30 UmUy/CWK.net
>>707
普段コンビニとか外食でメシを食ってるひとが
まな板と包丁買ってきて自分で魚をさばくような話
君はずっとグルメガイドを見てればいい

724:デフォルトの名無しさん
15/08/25 13:09:56.76 uHUYRmLo.net
Dispose不要なんて自分ルールを広めようとしてもそうはいかないから
早めにルールに従ってDisposeをキチット実行するよう修正しましょう
そうしないと後の修正で口から泡を吹く羽目になりますよって話ですw

725:デフォルトの名無しさん
15/08/25 13:33:31.83 yb6n8Wdy.net
死ね単芝

726:デフォルトの名無しさん
15/08/25 21:54:59.46 evM6WMfUm
>>710
要所要所をアンセーフにするとかngen使うとかすれば、かなり高速化出来る場合もある。
GCの問題があるから、本当に高速なリアルタイム処理は苦手だけど。

727:デフォルトの名無しさん
15/08/25 18:38:02.96 cRNFEmJ6.net
頭の中がVB6で止まっているのでしょう

728:デフォルトの名無しさん
15/08/25 18:40:19.98 cRNFEmJ6.net
VB6に対して失礼でした

729:デフォルトの名無しさん
15/08/25 21:16:04.98 11iB37Vu.net
>>698
FromHandleとか逆にハンドルを取得する系はIntPtrしか受け付けてくれないから、不要になった時にうまく解放しないといけないのが割と面倒
理解不足も含めて、メモリリークさせてるサンプルはよく見かける
あとは、メインフォームとか静的なイベントに参照にぎられてるとかもちゃんと意識しないと危険

730:デフォルトの名無しさん
15/08/25 22:00:39.66 FzRJlm7d.net
>>706,717
個人的にはDisposeを使う方がお行儀がいいのは認める。
ただ、C#の思想としては、「タイミングは規定できないが、解放はシステム側で保証するから、
面倒なことを考えずに具だけに集中しろ」ということなのだと思う。
だから、クラスをきっちり書けば出来そうな気もするし、それに向けて整備していっているはず。
とはいえ、俺はGUI(描画)に使っている程度で、そんなに本格的に使っていない。
だから命中していないだけで、言われているケースがありそうだというのはなんとなく感じる。

731:デフォルトの名無しさん
15/08/25 22:03:49.42 bwlYR2I5.net
>解放はシステム側で保証するから
メモリに関してだけはそのとおりですね

732:デフォルトの名無しさん
15/08/25 22:07:38.08 FzRJlm7d.net
>>707
アンセーフはこれ。見にくくなるが速くなる。
URLリンク(www.atmarkit.co.jp)
アンマネージドはVC++の機能で、SSEとかを使いたいときに使う。

733:デフォルトの名無しさん
15/08/25 22:13:15.62 Y9IbSqw2.net
>>720
バカはリソース解放の必要性が理解できないので説明するだけ無駄

734:デフォルトの名無しさん
15/08/25 22:17:53.09 JrnVqkd7.net
>アンマネージドはVC++の機能で、SSEとかを使いたいときに使う。
はぁ……
何言ってんのこいつ
C++から来てなんでも知ってるつもりのバカヤロウじゃん

735:デフォルトの名無しさん
15/08/25 22:41:07.48 bwlYR2I5.net
たぶん句読点の位置がおかしい
アンマネージドは、VC++でSEEとか使いたいときに、使う
が正解なのかしら
知らんが

736:デフォルトの名無しさん
15/08/25 22:41:34.05 bwlYR2I5.net
SEE → SSE
ごめんね

737:デフォルトの名無しさん
15/08/25 23:06:00.33 Wpti2W5K.net
>>721
これはアンマネージコードではなくアンセーフコード
アンセーフコードもマネージコードには違いない
ちなみにこのリンク先の例はunsafeだから速いのではなく、GetPixel/SetPixelのAPIがクソ遅いだけ
.NET2.0以降ならLockBitsがあるから一旦配列に丸ごとコピーして処理後に書き戻せばunsafeなんか使わなくても十分に速い

738:デフォルトの名無しさん
15/08/25 23:08:27.34 rPHzO56e.net
C++君って先月くらいからいるけど、いつ死ぬの?

739:デフォルトの名無しさん
15/08/25 23:29:15.56 uHUYRmLo.net
>>727 が死ねばいいんだよ、お前が一番屑だから
というかC++の上がり人はどう考えても一人じゃないだろ
見た感じ多くはゲーム系の人かな

740:デフォルトの名無しさん
15/08/25 23:35:33.69 uHUYRmLo.net
GetPixel/SetPixelが遅いというよりも、プロセス間通信が仕組み的に粒度が小さい処理に向いてないという感じかな

741:デフォルトの名無しさん
15/08/25 23:42:25.80 87HoKT0r.net
>>721
これはひでえな
LockBits使えば十分だろ

742:デフォルトの名無しさん
15/08/25 23:44:06.08 IDnYKic2.net
いつの時代の何を解説するためのサンプルかぐらい読めよ...

743:デフォルトの名無しさん
15/08/25 23:57:53.14 FzRJlm7d.net
これな。十分速いが、それでも倍違うけどね。
URLリンク(daisy64.blogspot.jp)
マネージドコードの例は不要だと思って省略した。
実際は#pragma unmanagedと#pragma managedでソース上で関数単位で切り替える。

744:デフォルトの名無しさん
15/08/26 00:16:40.27 LkVTB1JB.net
>>732
お前は何を言っているのか
そのリンク先の例はunsafeも含めて全部れっきとしたマネージコードだ
C++/CLIの#pragma unmanaged (これは本当にネイティブコードになる)とは全く違う

745:デフォルトの名無しさん
15/08/26 00:22:51.89 LkVTB1JB.net
>>732
よく見たらこのサンプル意味不明だな
r, g, bの値を使ってないから、最適化で消えてると思われる
実質的にはunsafe全く関係なくてMarshalCopyの時間を測ってるだけだね

746:731
15/08/26 02:05:24.84 N7Jdy9nG.net
731内、
× マネージドコード
○ アンマネージドコード
最適化がかかって全部抜けるのならGetPixelのコードが最速になる。
そうなってないんだから、抜けてはいない。

747:デフォルトの名無しさん
15/08/26 02:09:45.86 KP8nmGdk.net
メソッド呼び出しが、最適化で勝手に削除されるわけねーだろ
何の副作用が有るか、わかりゃしないのに

748:デフォルトの名無しさん
15/08/26 02:13:08.08 KP8nmGdk.net
分かっていると思うけど、
逆に言えば、メソッド呼び出しが無いのなら、
無駄な計算は最適化で削除されうるってことだぞ

749:デフォルトの名無しさん
15/08/26 08:04:18.96 0fCLXGvh.net
相変わらずレベルの低い話

750:デフォルトの名無しさん
15/08/26 08:27:19.17 pUWj3Ef8.net
ああ、思い出した
レベル連呼クンって前にもいたよね

751:デフォルトの名無しさん
15/08/26 08:29:29.18 gbsTgmpf.net
VB6スレと同じ人達が話してるのかい

752:デフォルトの名無しさん
15/08/26 08:59:00.05 DnnAf/8j.net
VB6スレなんてあったっけ

753:デフォルトの名無しさん
15/08/26 09:15:42.60 ElP7lUPJ.net
C#精神病院 Part88

754:デフォルトの名無しさん
15/08/26 11:18:16.79 dP9T8Aj9.net
>>719
そこまで崇高な理想を持って開発されてるとは思えないが
タイミングがわからないおかげで使用中のハンドルが開放される可能性への対策も必要になるし
あと、マネージリソースだけじゃなくて、固定したGCHandleを持ってればGCのパフォーマンスへの影響もでかい

755:デフォルトの名無しさん
15/08/26 17:11:34.36 qrjLQtVJ.net
DataGridViewでユーザーが列幅を変更する場合列の境界をドラッグ
しますが、横スクロールバーが表示される程列数や個々の幅がある
場合に最後の列幅が変更できません。
どのようにマウスで変更するのでしょうか。

756:デフォルトの名無しさん
15/08/26 20:08:44.10 N7Jdy9nG.net
>>736,736
メソッドの部分は必ず実行され、その後の部分は最適化されているかも、ということで了解した。
LockBits/unsafeの比較は当てにならないね。
異常に速度差があるし、メソッド以外は全部抜けているかも。

757:デフォルトの名無しさん
15/08/26 20:16:21.46 N7Jdy9nG.net
>>743
> GCHandle 構造体
> [SecurityPermission(SecurityAction.Demand, UnmanagedCode=true)]
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
なるほど、C#でもdllと接続するとUnmanagedCodeを意識しないと駄目なんだな。
> タイミングがわからないおかげで使用中のハンドルが開放される可能性への対策も必要になるし
GC.Collectで起動は出来るみたいだぞ。
GC.SuppressFinalizeというやばそうなものもあるが、GCを止めることは出来ないね。
上記GCHandle例のようにブロックスコープで囲える範囲なら、GC.KeepAliveの方が軽そうだ。
> URLリンク(msdn.microsoft.com)(v=vs.110).aspx
システムリソースと言っても所詮はメモリだし、
x64みたいにアドレス空間が広ければ、OSが動的確保すれば収まる話ではある。
だからいずれは気にしなくてよくなると思うよ。
(ただそのときでもDisposeしたほうがいいのは事実だが)

758:デフォルトの名無しさん
15/08/26 20:56:01.03 LkVTB1JB.net
>>746
ファイナライザでKeepAliveするのは意味がない
KeepAliveしたところで参照している他のオブジェクトのファイナライザが先に呼び出される可能性は防げないし、
ファイナライザの実行が終わる前にthisやその他参照しているオブジェクトがGCに回収されてしまうようなことは無いからね

759:デフォルトの名無しさん
15/08/26 21:39:21.41 pUWj3Ef8.net
>>746
もう来んなよ

760:デフォルトの名無しさん
15/08/27 08:03:55.06 Sd5tuK/H.net
お前が来るなよw

761:デフォルトの名無しさん
15/08/27 17:01:34.76 H9Zj5Bn1.net
internalなインターフェースでも、internalで実装出来ないのね。
なんでだろ。
明示的実装だとeventは自動実装してくれないのね。
ちょっと不便。

762:デフォルトの名無しさん
15/08/27 18:33:33.61 4ooez7+r.net
以下のようなことをしたいのですが、
メソッド名が重複するため上手くいきません。
ある変数のスーパークラスを上書くようなことはできないのでしょうか?
public abstract class A{
public abstract MyClass instance {get;}
}
public abstract class B<T> : A where T ; MyClass{
public T MyClass instance {get;}
}

763:デフォルトの名無しさん
15/08/27 18:40:58.45 3m4FcQPk.net
>>751
全部捨てろ
そんなことをしようとせずに済んだ世界を想像し
可能ならば来た道を戻って設計しなおすといい

764:デフォルトの名無しさん
15/08/27 18:44:49.92 CaKJnHAU.net
>>752だけ読むと凄くカッコイイ

765:デフォルトの名無しさん
15/08/27 18:45:04.56 0465F1pc.net
つーかMyClassとわかってるならTにする意味ないでしょ

766:デフォルトの名無しさん
15/08/27 19:34:06.84 M7ObSeqi.net
何がしたいんだかよくわからん
MyClass はなんだかの形で定義?
class B<T> は、もはや修正してエラーもなくせない
メソッド名が重複するという問題にたどり着けんw

767:デフォルトの名無しさん
15/08/27 21:05:28.92 4ooez7+r.net
TはMyClassの継承関係です。
AとかBじゃ分かりにくいですね。
public abstract class 田中{
public abstract 行動 instance {get;}
}
public abstract class 修行した田中<料理> : 田中 where T ; 行動 {
public 料理 instance {get;}
}
はじめからTつければいいじゃんとか思うかもしんないけど、
ジェネリックの共変性とかの問題があったりしてこんな実装になってます。

768:デフォルトの名無しさん
15/08/27 21:16:20.73 dljCNrWS.net
まず用語とやりたいことと質問を整理してくれる?
お前の示したコードにメソッドも変数もないし、空想上の文法を示して以下のようなこと、で伝わると思うの?

769:デフォルトの名無しさん
15/08/27 21:19:19.33 crZaWZ5K.net
いや…これはシンプルに無視案件だろ
こいつに関わってもなんの実りも無い

770:デフォルトの名無しさん
15/08/27 21:27:08.41 hme97lr4.net
>>756
public interface I田中{
行動 instance {get;}
}
public abstract class 修行した田中<料理> : I田中 where 料理 ; 行動 {
override 行動 I田中.instance { get { return this.instance; } }
public 料理 instance {get;}
}
何がしたいのかさっぱり分からんがこういうことか?

771:デフォルトの名無しさん
15/08/27 21:35:49.89 lF/OrL4X.net
山田かもしれん

772:デフォルトの名無しさん
15/08/27 21:46:52.77 4ooez7+r.net
public abstract 行動 strategy {get;} を
public override 料理 strategy {get;} に上書きしたいです。
まとめるとこうです。
1.オブジェクトの行動を戦略ポリモーフィズムで実現したい
2.継承クラスから戦略をジェネリックに呼び出したい
3.基底クラスの戦略呼び出しは継承クラスの戦略を呼び出す(abstract)
4.ジェネリックの共変性(.net3.5を利用)の問題で3を基底<T>およびメンバTとするのは、
  その他のオブジェクトでキャストが膨大に発生するため、ジェネリックを持たない基底クラスを用意した 

773:デフォルトの名無しさん
15/08/27 21:56:46.79 4ooez7+r.net
>>759
そういうことです!
たぶんできました!ありがとうございます

774:デフォルトの名無しさん
15/08/27 22:22:03.15 pO3unHFi.net
エスパー乙

775:デフォルトの名無しさん
15/08/27 23:39:03.06 sO/8ZJev.net
ようわからんから寝るわ
明日は定時にあがって彼女とデートだ

776:デフォルトの名無しさん
15/08/28 00:22:50.64 DVJpBS2x.net
ここ数年定時で上がった事無いや。
せめて残業30時間未満希望。

777:デフォルトの名無しさん
15/08/28 06:40:20.71 Sz74PPpb.net
とりあえず "料理 ; " の ';' は何だよって感じの所の修正をして欲しかったな
エラーが「メソッド名が重複」になるようなコードにしてから、問い合わせろよって感じ
わけわかんねーよw

778:デフォルトの名無しさん
15/08/28 06:55:57.02 Sz74PPpb.net
>>761
どうしてもそのようにしたければ、二段階に分けてやればいいんじゃねかな
インターフェイスが正解だが
public class 行動 { }
public abstract class A
{
 public abstract 行動 instance { get; }
}
public abstract class BBase<T> : A where T : 行動
{
 public override 行動 instance { get; }
}
public abstract class B<T> : BBase<T> where T : 行動
{
 public new T instance { get; }
}
public class 料理 : 行動 { }
public class 所望の利用方法 : B<料理>
{
}
リフレクション関係の.Net Frameworkのソースを読んでいたらこういうのに出会ったよ
以前のバージョンで公開してしまったが、互換性を維持しつつ改めて中身隠して継承したいという感じの部分で

779:デフォルトの名無しさん
15/08/28 10:09:33.73 bO0aCwDR.net
>>767
それだと基底クラスにキャストされているときに呼ばれると基底のメソッドが呼ばれてしまうので今回の要件ではまずいです。

780:デフォルトの名無しさん
15/08/28 11:43:18.34 Sz74PPpb.net
>>768
基底クラスの変更はBBaseの方でやるの、二段階に分けるという事

781:デフォルトの名無しさん
15/08/28 15:45:12.11 O/DjZ5xn.net
BBase<T>からその上位のBのinstanceを呼べないのでまずいです。

782:デフォルトの名無しさん
15/08/28 15:48:24.22 Sz74PPpb.net
なんでそこが問題やねんwww
まぁ、互換性がうんぬんとかクリティアルな問題がある訳じゃなさそうだし interface 版でいいと思う
それでやれば良かろう

783:デフォルトの名無しさん
15/08/28 17:04:25.71 bO0aCwDR.net
>>771


784: そこがクリティカルだと何度も申し上げていますが。 解決したのでもういいです。



785:デフォルトの名無しさん
15/08/28 17:05:03.05 ZmO5l3R/.net
へーすごいじゃん

786:デフォルトの名無しさん
15/08/28 19:26:06.38 jkdHSky5.net
式木が全然わかんねぇ
動的に検索条件変えるのにつかいたいが

787:デフォルトの名無しさん
15/08/28 19:27:16.67 GiTthi+A.net
bbaseってのはババアのSE(システンエンジニア)のことですよね?

788:デフォルトの名無しさん
15/08/28 19:58:34.57 Lygpatgh.net
リソースの解放順序をコントロールするクラスを1回作ってしまえばDisposeの明示的呼び出しは完全に不要になるね

789:デフォルトの名無しさん
15/08/28 20:01:28.39 LXLt4eax.net
またDispose君か
フランスパン目に突き刺して死ね

790:デフォルトの名無しさん
15/08/28 20:05:55.57 CjkSJ7ex.net
>>774
アホなことは考えるな
普通にクエリビルダ使え

791:デフォルトの名無しさん
15/08/28 20:49:33.85 Sz74PPpb.net
>>776
いや、そこは普通にDispose使えよ、得体のしれないことするなw

792:デフォルトの名無しさん
15/08/28 20:55:43.87 ls1PRuKg.net
アンマネージドなリソースをIDisposableなオブジェクトでラップするのは基本だろ
え?
>756はそういうことを言いたいんじゃないの?

793:デフォルトの名無しさん
15/08/28 21:38:47.88 8lfDGDPP.net
Disposeを明示的に呼びだしている時点でおかしい

794:デフォルトの名無しさん
15/08/28 21:38:51.18 cLOGe/lp.net
>>776
意味がわからない
FormのDisposeはどうやったら不要になるの?

795:デフォルトの名無しさん
15/08/28 21:43:04.20 Lygpatgh.net
リソース全部にいちいちDispose呼ぶ派って最近C言語からC#に移ってきた人?

796:デフォルトの名無しさん
15/08/28 21:53:36.50 IPCW/fdR.net
using使ってもDisposeは呼びたくなる

797:デフォルトの名無しさん
15/08/28 21:55:20.42 ls1PRuKg.net
ツマンネ

798:デフォルトの名無しさん
15/08/28 22:19:38.38 jMAaefta.net
むしろc#やり込んで分かって来てからの方がIDispose使う頻度上がったけどな。
Disposeパターンちゃんと分かって無さそうだし、GC.SuppressFinalize()も使ったことないんだろうな。

799:デフォルトの名無しさん
15/08/28 22:21:47.32 La0rg2tq.net
Dispose漫談

800:デフォルトの名無しさん
15/08/28 22:36:10.25 k07is2fO.net
IDisposableを継承したオブジェクトを、
自分のクラスにコンポジションすると、
自分自身もIDisposableを実装する必要が出てきます
このように、どんどんと、IDisposableは伝染していきます
IDisposableの要らないクラスは、
メモリ以外のリソースを全く含まない、クラスだけです
終いには、IDisposableだらけになります
インテリジェントなクラスほど、IDisposableになります
これがGCの現実です

801:デフォルトの名無しさん
15/08/28 22:38:35.26 ls1PRuKg.net
それで?

802:デフォルトの名無しさん
15/08/28 22:41:22.64 La0rg2tq.net
へーすごいじゃん

803:デフォルトの名無しさん
15/09/02 11:45:01.96 QWgZ6B7l.net
荒れてる時に失礼します
2ヶ月くらいの初心者ですが
URLリンク(lab.tricorn.co.jp)
ここにStateとStrategyの違いが書いてますが、構造上の違いは無いため
見分けるにはクラス名で見分けるしかないと書かれていますが、そうなのですか?
別にこの記事を批判してるわけじゃなく、私自身StateとStrategyの違いが
イマイチよく分からないだけです

804:デフォルトの名無しさん
15/09/02 15:37:43.17 MYIvkVg2.net
以下を実装しようと思っていますがフォーム外の
マウスの座標をどうすれば補足し、メインフォーム上にレンダリングすれば
良いかわかりません。どの様に実装すればよいでしょうか?
1.フォームを起動する。
2.[座標調査]ボタンをクリック
3.マウスをフォームの外に移動したら
「1.」の中央に配置されたラベルにX座標・Y座標を表示する。

805:デフォルトの名無しさん
15/09/02 15:43:14.58 rdkBQaJ6.net
Cursor.Positionでスクリーン座標でのマウスカーソル位置が取れる。
タイマで定期的に取るようにすればいいんじゃない?

806:デフォルトの名無しさん
15/09/02 16:16:36.49 MYIvkVg2.net
>>793
サンキュー

807:デフォルトの名無しさん
15/09/02 21:43:47.52 +Iu6xlmH.net
Stateは離散的な状態によって、振る舞いを大きく変えるオブジェクトを実装するためのパターン
Strategyは動的に処理を切り替える為のパターンで、ぶっちゃけただの多態性の事だ
Strategyは基本的すぎてパターンと呼ぶほどのものではない
他の殆どのパターンでも漏れなくStrategyを使っている

808:デフォルトの名無しさん
15/09/02 22:24:38.83 2IVkMjjH.net
stateなんてstrategyを外か内のどっちから差し替えるぐらいの違いしかないし、デザインパターンとか偉そうに呼ぶもんでもない。
むしろ、switchで済むもんをstateパターン!とかドヤ顔でやるやつを生み出すクソパターンのひとつだわな。

809:デフォルトの名無しさん
15/09/02 23:16:57.02 OPX/Zhtw.net
デザパタって、
○○パターンで行こう、みたいなときもあれば
書いたあとに、あれ?これ△△パターンだな……みたいなこともあるし
参考程度でいいんでないかい?

810:デフォルトの名無しさん
15/09/02 23:21:25.69 ZlVQUP4Q.net
デザパタってのは本読んで賢くなったと勘違いしたバカが
ことあるごとにパターン名連呼するだけのもの

811:デフォルトの名無しさん
15/09/02 23:22:34.56 AIAHCYFs.net
>>798
2ch脳全開だなw
よくそういう被害妄想を恥ずかしげもなく開陳できるよなw

812:デフォルトの名無しさん
15/09/02 23:32:33.81 nxxrL6I9.net
しかし、>>798の解釈のほうが少しだけ健全
デザパタを知ったように語る連中にくらべての話なw

813:デフォルトの名無しさん
15/09/03 09:12:04.06 BI1c3JMp.net
デザインパターンは共通言語みたいなもんだろ。

814:デフォルトの名無しさん
15/09/03 09:31:49.44 j51sLT8G.net
俺の周りのやつにはデザインパターンが通じない

815:デフォルトの名無しさん
15/09/03 10:45:14.16 AQrjy02M.net
>>798
デザパタってそういうもんじゃないの
~パターンって言うだけでああ、あれねってなるから
いちいち詳細説明の手間(タイムコスト)が省ける

816:デフォルトの名無しさん
15/09/03 12:50:32.25 UAzBQfVm.net
まず、手間(タイムコスト)とか言い直す無駄な手間かけるのやめろよ

817:デフォルトの名無しさん
15/09/03 12:54:06.21 Z05hlE1P.net
>>804
小学生か。
俺は802じゃないけど、そういうのは無駄でも言い直しでもない。
曖昧さを減らすためのテクニックだ。
ヴァカじゃないのか

818:デフォルトの名無しさん
15/09/03 13:00:22.16 Mtr7VddV.net
そこまでのもんかよw

819:デフォルトの名無しさん
15/09/03 13:02:50.82 NQZSp0fr.net
命令口調君って馬鹿だな

820:デフォルトの名無しさん
15/09/03 13:03:00.42 bflO1psv.net
(言い争いも無駄なのでは?)

821:デフォルトの名無しさん
15/09/03 13:18:47.27 6M6obrOu.net
>>804
クスッときたw
なぜなら俺も同じ感想を抱いていたからw

822:デフォルトの名無しさん
15/09/03 15:37:10.76 dGS6eFW0.net
>>796
逆だろ
むしろ、stateパターンで書けるもんをswitchとかドヤ顔でやるやつを生み出さないためのパターンのひとつ。

823:デフォルトの名無しさん
15/09/03 15:43:23.59 eSbMz5iN.net
stateはあまり使うべきではないパターンの一つだろ
オブジェクトに変化する状態を持たせるのはなるべく避け、どうしても必要なところはなるべく明示的に、ってのが今風

824:デフォルトの名無しさん
15/09/03 16:18:18.81 Z05hlE1P.net
まあどっちにしろ馬鹿の一つ覚えの乱用は良くないね。
ケースバイケースで判断するしかない

825:デフォルトの名無しさん
15/09/03 20:51:50.87 AjZjPQkB.net
質問させてください。
フォームを透明にするとデスクトップが見えると思います。
さらにラベルを半透明にすればデスクトップが透けて見えると思います。
ですが、ラベルを半透明にしてもフォームの透過色になってしまいます。
これの解決策はないでしょうか。

826:デフォルトの名無しさん
15/09/03 20:53:39.88 50OgoD3Z.net
ステートはゲームとパーサー以外に使い道はないね

827:デフォルトの名無しさん
15/09/03 21:26:51.16 4OSMUinY.net
>>814
お前の狭い井戸の中の話はチラシの裏にでも書いとけ

828:デフォルトの名無しさん
15/09/03 21:30:09.14 Mtr7VddV.net
>>813
ふらっと行け

829:デフォルトの名無しさん
15/09/03 21:36:44.84 t0UOlUCH.net
とかくカタログ化のメリットをうたわれるが
それは理想でしかない
デザパタの理解の時点で不備が残るから
パターン名を出して語り合ってもチグハグなまま
断片的な理解で語って延々すれ違うのが関の山

830:デフォルトの名無しさん
15/09/03 21:37:48.99 AjZjPQkB.net
>>816
すみません、初心者なのですが、フラットとはなんでしょうか

831:デフォルトの名無しさん
15/09/03 21:59:03.17 AjZjPQkB.net
>>818 >>816
フラットがなにか分かりました、聴いてきます、ありがとうございます

832:デフォルトの名無しさん
15/09/03 22:30:08.90 oJAsYsjQ.net
>>811
これどういうこと?
むしろifとかswitch推奨ってこと?

833:デフォルトの名無しさん
15/09/03 22:35:31.33 4OSMUinY.net
>>820
まともなソフト組んだことのない奴の戯れ言なのでスルーでいい

834:デフォルトの名無しさん
15/09/03 22:59:38.02 UAzBQfVm.net
10個のケースで処理は単純と
2個のケースで処理が複雑の場合どちらもクラス化するとは限らないし、switchでも関数でもオブジェクトでも見通しがいいのを選べばいい。
なぜなら、テストがあれば容易に修正が可能だからだ。

835:デフォルトの名無しさん
15/09/03 23:07:40.59 8yoLLFnu.net
>>820
最近は関数型からの流れで、クラスはイミュターブルにするべきだという流派が勢いを増しつつある
その考えに従うなら、stateパターンだろうがifだろうが自分自身のstateを勝手に変更するようなクラスは好ましくなくて、
差し替えやすくするにしてもコンストラクタでStrategyを渡しなさい、となるわけ
それからStrategyに比べてStateはその親が持ってる内部情報に強く依存することが多いので、
差し替えのメリットはあまりなくてコードが読みにくくなるだけの場合が多かったりする

836:デフォルトの名無しさん
15/09/04 01:05:37.68 lzz57wGL.net
スイッチけ消せ派の二割ぐらいがコードの見やすさ以外のメリットを挙げられない日本のアイテー産業界の実情

837:デフォルトの名無しさん
15/09/04 09:18:55.15 nWrrDgsE.net
>822
テストは製品の品質を担保するためのものだろ
修正の容易さとは関係ない

838:デフォルトの名無しさん
15/09/04 12:00:23.91 UHAkjTxW.net
>>825
マジで言ってんのか?

839:デフォルトの名無しさん
15/09/04 12:21:37.40 jQreaVPT.net
通りすがりの俺も>>826と同じセリフを吐きたい

840:デフォルトの名無しさん
15/09/04 12:24:18.11 uljmVnmx.net
>>825
リファクタリングは名著だから一回くらい目を通しておいたほうがいいぞ

841:デフォルトの名無しさん
15/09/04 12:26:25.43 /OouKiwm.net
まあ低レベルなジャパニーズドカタとって自動テストを継続的に維持するのは不可能だからね
後々の修正以前に、新規開発を最期までグリーンを維持しながら完遂することすら奇跡

842:デフォルトの名無しさん
15/09/04 12:28:22.50 wAnp+SYa.net
旧石器時代レベルのマだな

843:デフォルトの名無しさん
15/09/04 12:29:33.09 wAnp+SYa.net
テストを検収通すためのエビデンスとしか捉えてないっていうね

844:デフォルトの名無しさん
15/09/05 00:34:41.72 AEZT9dHU.net
テストはあくまで修正の確認だろ
テストがあれば結果が保証される=安全な修正の場が提供される=修正がしやすい場が提供される
けれど、修正元のコードが容易に修正しやすいものかとは別問題でしょ
何だか、根本的に履き違えているみたいだな、俺が
勉強し直してきます。
顔真っ赤なんです。分かってください。
場違いなんでこれで最後にします

845:デフォルトの名無しさん
15/09/05 00:37:38.28 FwcsIAPo.net
>>832
動いてるものを弄ることの恐ろしさを知らないだろ
修正なんて結果の保証ができるかが全てと言っても過言ではない

846:デフォルトの名無しさん
15/09/05 00:45:48.20 AEZT9dHU.net
>833
そういってるんだけど
噛みつき方がおかしい

847:デフォルトの名無しさん
15/09/05 01:21:45.82 +/wEUIWT.net
テストケースが用意してあって、いくら修正しても結果が合わないコードとか遭遇してみたいわ

848:デフォルトの名無しさん
15/09/05 06:31:10.03 Jq+GEKLJ.net
>>803
タイムコスト削減どころか患者扱いされるパターンが一般的
スレリンク(tech板:133-142番)

849:デフォルトの名無しさん
15/09/05 07:44:13.00 FwcsIAPo.net
>>834
修正作業≒影響範囲と結果の確認作業
ということだよ
ソースコードの修正そのものは大した問題ではない

850:デフォルトの名無しさん
15/09/05 10:07:42.28 McuB2/kQ.net
>>832
修正って一言で言うからおかしくなる
1. 修正する箇所の決定
2. コードの修正
3. 修正箇所のテスト
4. リグレッションテスト
1. ~ 2. を修正って言えば >>825
1. ~ 4. なら >>822
が正しい

851:デフォルトの名無しさん
15/09/05 10:29:22.47 yNAOhLZf.net
そんな必死扱いて話続けるなよ
ショックだったのか?

852:デフォルトの名無しさん
15/09/05 11:28:54.82 McuB2/kQ.net
>>839
>>839
粘着してるのはお前だけ

853:デフォルトの名無しさん
15/09/05 11:40:46.30 nF0Xae6t.net
ITドカタには3,4が存在しないから同じ
問題なのは
5.リリース後に修正ミスが見つかるリスク

854:デフォルトの名無しさん
15/09/05 11:43:57.82 yNAOhLZf.net
そうかい
これ以上続けるならDisposeと同じように連投自演で荒らしてやる
分かったらおとなしくしてろ

855:デフォルトの名無しさん
15/09/05 11:49:32.74 yNAOhLZf.net
あるいはC#に関係があって、ふらっとでやるような話でない話をしろ
雑談がしたければ雑談スレかマ板に行け

856:デフォルトの名無しさん
15/09/05 12:04:12.51 d+nPX/+M.net
命令口調指摘厨


857:デフォルトの名無しさん
15/09/05 12:05:53.42 9PP8hJsT.net
┃↑
┗┛
荒らしは去れ
はよ仕事さがせよ

858:デフォルトの名無しさん
15/09/05 12:14:46.00 ZNHlex0/.net
「命令口調君って馬鹿だな」さんは、そろそろこのスレ10年近い大ベテランだぞ。
昨日今日現れたようなぽっと出の若造と一緒にしていい存在ではない。

859:デフォルトの名無しさん
15/09/05 12:41:58.24 d+nPX/+M.net
んじゃ質問おねしゃっす
静的クラスと普通のクラスをstaticに持つのと、
どう使い分けしたらいいでしょうか。
べつにシングルトンにする必要はないオブジェクトですが、
プロセスではひとつしかインスタンス化しません。

860:デフォルトの名無しさん
15/09/05 12:47:44.60 +EPImSa2.net
質問をお願いします、だと?!

861:デフォルトの名無しさん
15/09/05 12:48:22.79 pfZ6OLhC.net
>>847
>普通のクラスをstaticに持つ
ってどういう意味?

862:デフォルトの名無しさん
15/09/05 12:49:23.73 dHzp+WDi.net
一般的には、アプリケーションのルートで普通にnewし、それを必要とするクラスにその都度渡すのが適切
全体で共有するからといってstaticでグローバル変数にしてしまうのは良くない
テストしにくくなるからね

863:デフォルトの名無しさん
15/09/05 13:35:50.94 d+nPX/+M.net
ご説ごもっとも
でも今回はstaticにします。
static class Hoge{}
or
class Hoget{}
...
public static Hoge hoge = new Hoge();

下の方が拡張性があるとかないですか

864:デフォルトの名無しさん
15/09/05 13:41:33.34 5uKQXugM.net
俺にはそれらが比較する物に見えない

865:デフォルトの名無しさん
15/09/05 14:08:16.36 trE2W9oi.net
>>851
毎回直接hogeにアクセスするなら拡張性はない
拡張性をもたせるなら、Hogeにインターフェイスを実装して、他のクラスはそのインターフェイスを通して利用するようにする
実際のHogeのインスタンスは外から渡す

866:デフォルトの名無しさん
15/09/05 15:14:06.63 OLenB+FK.net
849みたいな馬鹿はどうしようもない
クラスの持つ概念が何かを考えずに、
コンパイル通るかしか考えないんだろう

867:デフォルトの名無しさん
15/09/05 15:29:17.88 ygimYbNM.net
でもSingletonがあるとテストしにくいのは事実だよね
まぁきちんとインターフェースを切り出してモック作りゃいいだけなんだけどな

868:デフォルトの名無しさん
15/09/05 15:42:26.30 +/wEUIWT.net
static classの必要性を感じない。
コンストラクタをプライベートにすればいいだけだし。

869:デフォルトの名無しさん
15/09/05 15:53:29.93 MzCBpk1s.net
Javaのstaticクラスとごっちゃになりそう

870:デフォルトの名無しさん
15/09/05 17:53:50.96 trE2W9oi.net
>>854
849だけど、毎回newしろと言ってるんじゃないよ
Applicationオブジェクト(と寿命が一致するオブジェクト)のフィールドとして持つということ

871:デフォルトの名無しさん
15/09/05 18:10:54.10 5uKQXugM.net
DI!DI!
.NETのDIライブラリって何がデファクトなの

872:デフォルトの名無しさん
15/09/05 18:38:14.83 uKtK2YVi.net
拡張メソッドや小物の汎用メソッドはスタティックだな

873:デフォルトの名無しさん
15/09/05 19:12:43.32 LfnRuzOf.net
いまだにVS2010使ってるが何か問題ありますか?

874:デフォルトの名無しさん
15/09/05 19:36:56.63 Ozz2pk1l.net
それで困ってないなら問題ないんじゃ

875:デフォルトの名無しさん
15/09/05 19:40:50.40 unwmwqiG.net
>>861
.NET Framework 4.5使わないならいいんじゃね

876:デフォルトの名無しさん
15/09/06 09:57:58.21 4IVIRjvm.net
expressじゃなきゃいいんじゃない

877:デフォルトの名無しさん
15/09/07 18:59:07.66 8RjKVv09.net
URLリンク(dobon.net)
でフォントの一覧は取得出来たのですが、この中から等幅フォントだけを
取り出す方法を探しているのですが分かりません。
知っている人教えてください。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch