C#, C♯, C#相談室 Part88at TECH
C#, C♯, C#相談室 Part88 - 暇つぶし2ch355:デフォルトの名無しさん
15/08/08 06:39:05.83 2mT64iaQ.net
.netのソースみたら大文字const結構あるね
private static readonlyも大文字がある

356:デフォルトの名無しさん
15/08/08 07:27:18.92 ja+NNaTJ.net
どういう事?
定数を大文字で書いたらダメなの?
C言語では大文字で書いてたからC#にもそのルール引き継いでるんだけどマズい?

357:デフォルトの名無しさん
15/08/08 08:00:56.43 xp2orv6h.net
>>351
URLリンク(msdn.microsoft.com)(v=vs.110).aspx

358:デフォルトの名無しさん
15/08/08 08:08:07.80 2mT64iaQ.net
何回も既出な話題だけど
規約、好み、MSのガイドライン とあって
規約があるなら従うほかないよね?
規約がなければ常識の範囲で好きにしろよ
あんまりMSのガイドラインから外れると他の人が読みにくくなるかもね
他人が絶対読まないんなら(略

359:デフォルトの名無しさん
15/08/08 08:20:44.45 cYx2D4V+.net
>>349
どの規約がいいかどうかの話だろ
規約を守りましょうとかの小学校レベルの話ではないよ

360:デフォルトの名無しさん
15/08/08 08:25:11.96 qm4uwrZi.net
規約は当然守られなければならない。
だが規約の意味を知らなかったり規約の適用範囲も認識しないバカは多い。
354みたいなものバカのことな

361:デフォルトの名無しさん
15/08/08 08:30:42.48 xp2orv6h.net
>>352はクラスライブラリ向けのガイドライン、つまり
互いにお約束の通じないチーム同士の間でも従うべき最低限のルール
チーム内部なら好きにすればいいという考え方もあるが、
一般的には.NET開発における絶対的なルールと考えるべき
実際VSの上位エディションだと問答無用で警告出るし

362:デフォルトの名無しさん
15/08/08 08:45:41.17 cYx2D4V+.net
>>355
> だが規約の意味を知らなかったり規約の適用範囲も認識しないバカは多い。
自己紹介? w
いきなり関係ないことで騒ぐのは授業が理解できない小学生によくある行動

363:デフォルトの名無しさん
15/08/08 08:52:39.89 rDuvbo6u.net
アスペのレスはやたらと「べき」を多用するよな
最低限()、絶対的()

364:デフォルトの名無しさん
15/08/08 09:41:18.59 Mi72fTNR.net
javaから入ったからconst大文字で書いてた。
あとNetBeansなら
if(true){
}
だけどVSだと
if(true)
{
}
になって戸惑った。

365:デフォルトの名無しさん
15/08/08 09:44:10.32 gs2aQZWx.net
細かく設定変えられるけど

366:デフォルトの名無しさん
15/08/08 09:52:45.16 Fe3rcXOX.net
コーディング規約守らせるテクニックとかないの
ラクダケースじゃなかったらビルドエラー出すとか

367:デフォルトの名無しさん
15/08/08 11:20:02.19 uyIUSJEf.net
const int NUM X
const int Num O
こういう事か?

368:デフォルトの名無しさん
15/08/08 12:20:01.30 ja+NNaTJ.net
マジかよ全部書き直しじゃねーかクソが

369:デフォルトの名無しさん
15/08/08 13:53:13.30 QwAfSdLt.net
今時、全置換機能くらいテキストエディタでもあるじゃろ
モダンなIDEならリファクタリング機能とか言うのかのう…

370:デフォルトの名無しさん
15/08/08 14:04:02.19 Mi72fTNR.net
>>363
VSなら変数名変更したら下に矢印出てくるだろ

371:デフォルトの名無しさん
15/08/08 14:08:52.14 ja+NNaTJ.net
>>365
使った事ないんだけどこれって信用できるの?

372:デフォルトの名無しさん
15/08/08 14:12:34.10 Mi72fTNR.net
>>366
メモ帳の置換えと違ってその変数のみが置き換えられる。
例えばフィールドのxとローカルのxがあったとしてフィールドのxをxxにしたらローカルは書き換えられない。

373:デフォルトの名無しさん
15/08/08 14:15:11.18 cYx2D4V+.net
>>366
やってみて差分とって確認してみれば?

374:デフォルトの名無しさん
15/08/08 14:24:41.94 ja+NNaTJ.net
>>367
ありがとう使ってみる

375:デフォルトの名無しさん
15/08/08 16:08:26.01 8yeleZKw.net
>>366
dynamicとプリプロセッサ使っていないなら、ほぼ信用できる感じ
使ってあっても変更したい対象には無関係という事は多いのでかなり使える
マイクロソフトが標準的に使っている規約から外れた規約を社内ルールで使っている場合
全員を説得して回ってマイクロソフト標準に合わせたほうがいいだろうね
IDEがバージョンアップする毎に面倒が増えるから、規約がコスト増の原因になる
規約の目的は面倒事やコストを減らす為なので

376:デフォルトの名無しさん
15/08/08 16:12:24.30 h9o0NTln.net
リネーム使ったことないプログラマってガチでいるのかw
大げさでなく信じられないw

377:デフォルトの名無しさん
15/08/08 16:19:06.87 8yeleZKw.net
>>371
他言語から来た人は知らない人もいるのでは?
ウエブ系の人にこれを見せたら、おったまげた人も結構いたよ

378:デフォルトの名無しさん
15/08/08 16:26:59.15 z+a/XH7F.net
かなりお世話になっているけど、リファクタリングって名前で俺かんけーねえしって人居るのかね
リファクタリング (C#)
URLリンク(msdn.microsoft.com)

379:デフォルトの名無しさん
15/08/08 16:45:24.01 x+KPzjiu.net
リファクタリング便利よね。
nameof演算子が最初からあれば良かったのに。

380:デフォルトの名無しさん
15/08/08 17:20:04.30 8yeleZKw.net
>>374
あとジェネリックスも最初から欲しかったかな
一旦object型に変換されると、そこですべてが切れてしまうので
ジェネリックスができてから typedef が後から実装できない仕組みだったのも痛かった
当時のtypedef嫌悪は大失敗だったね

381:デフォルトの名無しさん
15/08/08 17:43:22.51 AWBqCflR.net
今日も偉い低レベルな話に花を咲かせてんな
9月までこの調子なの?
ちょっと絶望するな

382:デフォルトの名無しさん
15/08/08 18:29:59.35 bub58w7+.net
ひ、ひぇぇ
高レベルな376様がいらっしゃたぞー
これから高レベルな話してくださるから
傾聴せよー傾聴せよー

383:デフォルトの名無しさん
15/08/08 19:08:49.81 GOE31OJa.net
リファクタリングの名前変更はASP.NET MVCには使えないから糞

384:デフォルトの名無しさん
15/08/08 19:41:42.79 6EY1XTBT.net
2015になって名前変更が全然別物になってるよね
前の方が良かった

385:デフォルトの名無しさん
15/08/08 20:37:26.94 8yeleZKw.net
376がオナニーできなくて悶えてるのかw

386:デフォルトの名無しさん
15/08/08 23:10:42.87 Ijf29GRs.net
意識高い人きてんね
こういう人は面白くないので人が寄ってこなくて
仲間だと思ってた連中の初詣とかに誘われなくてあれってなるんじゃね

387:デフォルトの名無しさん
15/08/08 23:23:23.15 m5zrYZQl.net
意識高いってのとはちょっと違うと思う
何か見下したい病?

388:デフォルトの名無しさん
15/08/08 23:52:44.97 3Z/4sEUi.net
そう言う人を皮肉って言ってるだけじゃ。

389:デフォルトの名無しさん
15/08/09 00:12:32.28 7R1hSeQZ.net
まあ、「意識高い」って言葉が使われる時、ほとんどの場合は「意識高い」って表現を使う側のルサンチマンなんだけどねw

390:デフォルトの名無しさん
15/08/09 00:31:14.85 Bf9QBgBr.net
お、c#スレ復活した

391:デフォルトの名無しさん
15/08/09 03:04:04.03 lFKFU4FJ.net
会社で相手にされなくて、寂しくて、こんな所にやってきてるんだよ
で、俺はできるんだから話を聞けぇってトコロなんだろうよ
多分リアルは自殺物レベルで悲惨なんだろうなw

392:デフォルトの名無しさん
15/08/09 09:55:43.54 /6/RtruA.net
友達も女も居ないけど猫が居るから寂しくないよ

393:デフォルトの名無しさん
15/08/09 20:02:02.17 fUCYV9NU.net
友達と女がいるとうれしさは猫の数倍だよ
知らないということは幸せかな

394:デフォルトの名無しさん
15/08/09 20:10:11.88 /6/RtruA.net
うるせぇ
なら猫を追加するだけ
幸せバイバインだ

395:デフォルトの名無しさん
15/08/09 21:09:12.82 4N/Y7Sm0.net
猫クラスを追加する事による負荷は問題ないのだろうか
友達の女クラスよりは軽いだろうけど

396:デフォルトの名無しさん
15/08/09 21:12:10.14 SGsZr1tS.net
かくしてIT土方の貴重な休日が無駄になっていくのである
おわり

397:デフォルトの名無しさん
15/08/09 22:57:53.03 I/IAYU21.net
別に友達いない=コミュ力なしってわけではないとは思うとか言ってみる。
いや、自分がそうなんだけどな。

398:デフォルトの名無しさん
15/08/09 23:31:19.08 fUCYV9NU.net
コミュ力 = 人と仲良くなる能力と思うとか言ってみる
仲良くなったら友達だろ

399:デフォルトの名無しさん
15/08/10 00:00:32.58 XP2wx0li.net
むしろ必ずしも仲が良くない人とでも意志疎通を行う能力なんだろうけどね本当は。
俺もそうだけど日本人って総じてこれが下手だから下らない飲み会とかやって
「みんな仲間」を演出してないと職場がうまく回らないんだよね

400:デフォルトの名無しさん
15/08/10 00:05:19.00 tkIOp5x+.net
コミュ力という言葉でくくれるほどコミュ力って狭い意味じゃないだろ
飲み会でウェーイもプレゼンも営業トークもコミュ力ないと出来ないが、これらが全部同じ能力とは思えない
自然言語的なコミュ力が高いやつもいれば、UMLみたいな言語のコミュ力が高いやつもいる
アーティスティックな表現力は抜群でも、喋るとバカっぽい人も居る
コミュ力は主にウェーイできる力の事であり、その意味でのコミュ力がないとコミュ障として、不当に扱われる事が多いってのは問題だよな

401:デフォルトの名無しさん
15/08/10 00:25:39.24 eozgHhmi.net
それは違うと思うな
ウェーイできる奴は全部に通ず
すなわち全部同じ能力
対人関係に柔軟さを持っている人間はコミュれる人でありウェーイでもある
ウェーイすらできないならすなわちこれ全てダメであり完全なるコミュ障
そして次に考えることは
コミュ力が不完全な状態でどう立ち回るかということ
コミュ力の不完全さをほかで補うことを考えること
多くの人間はこれを考えるべきなのに考えない
あるいはやはりウェーイ道を極めて修めるか

402:デフォルトの名無しさん
15/08/10 01:03:38.69 PN28vv9M.net
既にこの時点でコミュが成立してない気がするのは。。。

403:デフォルトの名無しさん
15/08/10 03:01:22.19 WsIPX/2a.net
初心者ですみません
上で定数をC言語のように全て大文字で書くのはまずいってありますが
それって↓の理由のためですか?
URLリンク(ryo021021.hatenablog.com)
unityがメインなんですが、プリプロセッサって全部大文字で書く事なんてあるんですか?

404:デフォルトの名無しさん
15/08/10 03:14:03.52 PX+3VVfn.net
>>398
>>352に書かれているわけだが読まずに質問とは
C#の初心者じゃなくて日本語の初心者ですかチョンですか?

405:デフォルトの名無しさん
15/08/10 04:25:04.74 RHMENy6h.net
書き込み見る端から攻撃しまくるキチガイには居なくなって欲しいですな

406:デフォルトの名無しさん
15/08/10 04:54:29.74 e3IdXlk7.net
リソースファイルとしてtest.exeに「hoge.dat(バイナリ化)」を
組み込みました。そしてリソースファイル名を「resource_hoge_1」と
名付けました。

リソースファイルの内容をC#から読み込む為にこの様に記述しました。
byte[] byte_data = Properties.Resources.resource_hoge_1;

ここまでは書けたのですが、 byte_data からどうすれば「hoge.dat」
をC#のプログラム中で復元する事が出来ます?


hoge.datはhoge.txt(中身は、"aiueo"だけです。)をバイナリ化したものです。

407:デフォルトの名無しさん
15/08/10 05:00:02.57 RHMENy6h.net
System.IO.MemoryStream あたりを使うのが一番てっとり早いかと

408:デフォルトの名無しさん
15/08/10 05:03:18.94 e3IdXlk7.net
>>402
早速ありがとうございます!
試してみます!

409:デフォルトの名無しさん
15/08/10 05:26:39.23 e3IdXlk7.net
>>402
出来ました。ありがとうございます!

410:デフォルトの名無しさん
15/08/10 07:21:22.75 C7dCXIlE.net
相手の承認欲求の満足と引き換えに情報もらう場で、
暗黙的な合意と正反対の行動しておいてコミュ力ってw
もちろん情報も出さずに煽ってるのは論外だけどさ、
そんなコミュ力()で主張続けてたら、人居なくなるよ?

411:デフォルトの名無しさん
15/08/11 02:29:03.29 t7UpLVsu.net
継承してあるプロパティを封印とかしたいんですができないでしょうか?
当然、キャストすると矛盾が生じるので、似てるけど継承関係がない扱いをしたいのですが。

412:デフォルトの名無しさん
15/08/11 05:50:36.72 USJNgyLH.net
>>406
AからBを派生させるんじゃなくて、AとBの基底クラスとしてCを作ってからA,Bを派生させるほうが理にかなうと思うが

413:デフォルトの名無しさん
15/08/11 08:18:55.99 t7UpLVsu.net
>>407
いわゆるテンプレートみたいなものなので、継承関係はありません

414:デフォルトの名無しさん
15/08/11 08:22:26.01 RnBcDQFJ.net
共通部分を別のクラスに括り出して移譲

415:デフォルトの名無しさん
15/08/11 09:29:28.39 C3iuhTEx.net
is aじゃなくてhas aにする

416:デフォルトの名無しさん
15/08/11 12:54:53.39 t7UpLVsu.net
>>410
そうします。
でも、いちいちプロパティとかラップするのめんどいですよね。
なんとかなりませんか。

417:デフォルトの名無しさん
15/08/11 13:07:55.82 MDlGrES8.net
>>411
だから>>407が言ってるようにすればいい。
何を言ってるんだ。

418:デフォルトの名無しさん
15/08/11 13:47:10.32 +IVNtZk/.net
>>412
>>407に対して>>408みたいに返す応用力のなさじゃ
手取り足取り説明しないとw

419:デフォルトの名無しさん
15/08/11 14:53:21.55 t7UpLVsu.net
>>412
キャストできたらまずいってーの、継承について勉強しろ

420:デフォルトの名無しさん
15/08/11 14:57:28.66 3SX2sjwF.net
多態性を利用する気がないのならhas aでいいんじゃね?
用もないのに、なんでもかんでも継承するのは良くない
時々そういう人いるけど、コード読みにくくてしょうがない

421:デフォルトの名無しさん
15/08/11 15:12:00.25 AH2YHVn8.net
そして>>411に戻る

422:デフォルトの名無しさん
15/08/11 16:13:22.92 g1gPnYXA.net
>>414
兄弟同士はキャストなんかできない。
何を言ってるんだ。
こんな馬鹿に限って勉強しろとかほざくんだから笑える。
そもそも論を言えば、明らかに互換性があるのにあえてキャストできないようにする意味がそもそも分からない。

423:デフォルトの名無しさん
15/08/11 16:22:07.65 3SX2sjwF.net
分からないのは >>417 が無能だからだよw

424:デフォルトの名無しさん
15/08/11 16:24:59.39 2YkwfTs1.net
と、ろくにコードも読めない無能が言ってますw

425:デフォルトの名無しさん
15/08/11 16:52:11.16 t7UpLVsu.net
>>417
エンジンとコンポーネントで考えましょう。
基本的なことですよ。

426:デフォルトの名無しさん
15/08/11 17:31:46.86 C3iuhTEx.net
自分の言いたいことが理解されないからといって、すぐ相手を馬鹿よばわりしたらあかんよ。
馬鹿って言われたからっいって、すぐ無能とか煽ったらあかんよ。

427:デフォルトの名無しさん
15/08/11 18:29:29.41 AWvgSxoB.net
>>417
そもそも
>継承関係がない扱いをしたい
のだから、互換性が無いのかもしれんぞ
継承関係がないのに、継承してクラス定義する意味がわからんが

428:デフォルトの名無しさん
15/08/11 19:06:04.27 3SX2sjwF.net
多態性使いたいなら、こういうケースでは素直にinterface使えば良いかと
本人見ての通り用は無いとしているみたいだし、それでいいと言われているのに食いつくのを見ていると
ふらっとスレのアレだな
>俺の考えをきけぇ、おまえらの事情なんかどうでもいいし、そんな事聞かれてもいないが俺の考えをきけぇ
て感じだね、例のアイツなんだろうが頭おかしい

429:デフォルトの名無しさん
15/08/11 19:36:37.74 DdSX6XRN.net
>>423
言っちゃ悪いけどあんたが一番頭おかしいように見えるよ。
例のアイツってもう典型的な2ch脳患者の症状じゃん。
って2ch脳の人に言っても無駄っていうか手遅れだろうけどさ。

430:デフォルトの名無しさん
15/08/11 20:44:37.23 BYbKL/Wt.net
もう少しハッピーな話をしろ
お前くらいのエリートなら8/7~8/18くらいは夏休みのはずだろ

431:デフォルトの名無しさん
15/08/11 20:47:38.90 RhCa6Veg.net
僕は7月18日から

432:デフォルトの名無しさん
15/08/11 20:51:01.02 flESq3


433:IS.net



434:デフォルトの名無しさん
15/08/11 21:55:13.91 pRf5qE0j.net
継承先でプロパティ封印してどんなメリットが…

435:デフォルトの名無しさん
15/08/11 23:34:01.58 HeaM7jtr.net
BCLでもNotSupportedExceptionを投げたりするのがあるけど、まあ仕方がないんだろうけど
あんまり美しくないよなああいうの。

436:デフォルトの名無しさん
15/08/12 02:18:44.84 6ZXtaURL.net
基底クラス作るとか、制限する意味ないとか
ここの人たちの話は良くわからないぞ…
前者は非現実的すぎるし、後者は公開用と実装で分けるとか結構ある話かと
面倒ってのがEclipse的な委譲の生成がないかって意味なら
Reshaper(有料)使うか、諦めて無心に手書きするといいよ

437:デフォルトの名無しさん
15/08/12 02:33:12.62 6ZXtaURL.net
あ、でもこの場合、1クラスの委譲のようだから、
制限インターフェース作って、欲しいクラスを継承+制限IFを実装、
そして制限IFにキャストして返すって手順でいいんでは?

438:デフォルトの名無しさん
15/08/12 02:40:22.65 XD0FvRJl.net
難しい事言うとまた質問者に勉強しろと言われちゃうよーん

439:デフォルトの名無しさん
15/08/12 03:14:27.59 6lFy7xXj.net
元の質問者はたぶん、型の弱い言語しか使ってないんだろ
ダイナミック使えば良いと思うんだ

440:デフォルトの名無しさん
15/08/12 03:14:47.82 4GoNFhR4.net
どんだけ俺の考えをきけぇ!!!!!なんだよ
寂しすぎだろw

441:デフォルトの名無しさん
15/08/12 07:59:58.15 jWJqOcxH.net
>>430
後者は公開用と実装で分ける
internalで十分じゃね?

442:デフォルトの名無しさん
15/08/12 08:09:14.50 6ZXtaURL.net
>>435
十分じゃないですよ
2者を分離できませんし、継承関係が欲しい訳じゃないですから

443:デフォルトの名無しさん
15/08/13 10:26:42.13 yl8Mdqy/.net
MVVMでダイアログとかポップアップメニューとか画面遷移ってどう扱うんだ?
VMにMessageBox.Showとか書きたくないよな

444:デフォルトの名無しさん
15/08/13 10:36:01.01 JHO9AiGv.net
>>437
画面遷移サービスみたいなのを用意してインスタンスをアプリケーション全体で共有
ただしシングルトンはやめろ
そういうサービスはVMからはインターフェースを通して扱うようにして、
VMには参照をプロパティやコンストラクタなどで渡す。DIを使ってもいい。
メッセージを使ってビュー経由でやる方法もあるがどこで何やってんのかわけわからなくなりやすいのでお勧めしない。

445:デフォルトの名無しさん
15/08/13 14:53:07.65 ZQmwk96y.net
>>437
prismにTriggerActionって仕組みがあって、ビヘイビアのようなクラスを定義すればメッセージボックスをVMから操作できます
メッセージボックスを開く程度をやるには可也面倒なんだけどね

446:デフォルトの名無しさん
15/08/13 20:47:02.81 uEvY/8an.net
List<T>.Sort()ってなんで安定じゃないんですかね
安定なの作っといてくれりゃいいのに

447:デフォルトの名無しさん
15/08/13 20:52:06.72 r6k8TIQq.net
>>440
LINQのOrderByは安定ソートだよ

448:デフォルトの名無しさん
15/08/13 21:42:16.81 uEvY/8an.net
>>441
なるほど……こんなん書いてみたけど、これってありですか?
それとも自前の安定なソートメソッドを書きますか?
public static void StableSort<T>( this IList<T> list )
{
 var temp = list.OrderBy( t => t ).ToList();  // 既定の比較でソート
 for( int i = 0; i < list.Count; i++ )
 {
  list[i] = temp[i];
 }
}
その前はこんなん書いてみたてたけどw
public static void StableSort<T>( this IList<T> list )
{
 var wrapper = list.Select( ( t, i ) => new KeyValuePair<int, T>( i, t ) ).ToList();
 wrapper.Sort( ( p1, p2 ) =>
 {
  var result = Comparer<T>.Default.Compare( p1.Value, p2.Value );
  if( result == 0 )
  {
  result = p1.Key.CompareTo( p2.Key );
  }
  return result;
 } );
 for( int i = 0; i < list.Count; i++ )
 {
  list[i] = wrapper[i].Value;
 }
}

449:デフォルトの名無しさん
15/08/14 01:10:47.58 u9bN4Lw8.net
>>442
ToListせずにforeachしたほうがいい

450:デフォルトの名無しさん
15/08/14 15:19:13.92 Iycxx57M.net
>>442
馬鹿な俺には何がしたいんかわからん
list.OrderBy( t => t ).ToList();
だけでええやん

451:デフォルトの名無しさん
15/08/14 15:21:03.68 PBffULch.net
破壊的ソートだろ

452:デフォルトの名無しさん
15/08/14 22:12:21.62 2p3m0KlY.net
>>444
ソートされた新しいインスタンスがほしい場合もあれば
元のインスタンスをソートしてほしいときもあるやん?

453:デフォルトの名無しさん
15/08/15 01:24:13.06 xV4UISpz.net
>>442
これってプリミティブ以外の型でちゃんとソートされるの?

454:デフォルトの名無しさん
15/08/15 02:26:49.44 j4iBQT2t.net
>ソートされた新しいインスタンスがほしい場合もあれば
>元のインスタンスをソートしてほしいときもあるやん?
list = temp;

455:デフォルトの名無しさん
15/08/15 03:53:43.45 QiO6I5ga.net
>>446
var listOrg = new List<int>(new int[] { 10, 23, 13, 4 });
var listTmp = listOrg.OrderBy((t) => t).ToArray();
listOrg.Clear();
listOrg.AddRange(listTmp);
遅いけど少し短いかも

456:デフォルトの名無しさん
15/08/15 07:25:58.35 /RqnGk0/.net
>>447
TがIComparableを実装してないとソートできないけど、それは普通のSort()メソッドも同じじゃね?
>>448
インスタンスを置き換えて返すつもり?
元のリストの参照もってたらソートされないままだろが……

457:デフォルトの名無しさん
15/08/15 13:11:59.71 z64TKpL6.net
初心者です。インターフェースの実装として抽象クラスを定義するコードを見かけたのですが、あえてそうするメリットって何かありますか?自分としとはインターフェース不要じゃないかと思ったのですが。

458:デフォルトの名無しさん
15/08/15 13:19:08.64 dPBreRmq.net
Effective Java 18章 抽象クラスよりインタフェースを選ぶ
を読んで、骨格実装について学んでください
この項目はC#でも同じです

459:デフォルトの名無しさん
15/08/15 13:54:48.31 gGc5tBdo.net
出来る限り疎結合にするというのが大切だから外部との窓口をインターフェースにする。
それより内側の具体的な実装は、内部実装としての作りやすさからたまたま抽象クラスで行っているだけかと。

460:デフォルトの名無しさん
15/08/15 14:38:20.40 OY/B/Wmp.net
抽象クラスって使った事ないわ
使い道あるのかこれ

461:デフォルトの名無しさん
15/08/15 15:08:58.69 2z51GaS1.net
初心者なのでインターフェイスがあれば抽象クラスは別段いらないじゃないか
って正直いつも思ってます・・・
抽象クラスの使い方が分かってないからでしょうけど

462:デフォルトの名無しさん
15/08/15 15:14:23.51 3TmrRaVz.net
vsの簡単フォームツール?のコンボボックスでSelectedIndexが見つかりません。
どこにありますか?

463:デフォルトの名無しさん
15/08/15 15:47:22.93 HxCw3c0C.net
>>455
インターフェースに雛形となる実装がついてるだけだよ。
インターフェースにテンプレートの実装持たせておければいいのに。

464:デフォルトの名無しさん
15/08/15 15:50:11.19 2z51GaS1.net
>>457
よく分からないのですが、そもそも仕様と実装を分離して疎結合するためのもの
だという認識なんですが、それに実装を持たせると分離の意味がなくなるんじゃないのかな
と不思議に思ってます

465:デフォルトの名無しさん
15/08/15 15:58:03.56 XFeAKEd8.net
仕様と実装を分離して疎結合するためのもの=インターフェイス
仕様の中で規定の実装が部分的に定まっているもの=抽象

466:デフォルトの名無しさん
15/08/15 15:


467:59:17.62 ID:HxCw3c0C.net



468:デフォルトの名無しさん
15/08/15 16:04:26.73 HxCw3c0C.net
abstractにインターフェースつけると、インターフェースのデフォルト実装が適用されるとかよさそう

469:456
15/08/15 16:11:48.76 3TmrRaVz.net
編集不可コンボボックスだと初期値でTextプロパティが使えないのでindexで指定するように書いてあったのですができません・・・

470:デフォルトの名無しさん
15/08/15 16:50:16.42 hcwFHcJB.net
基底クラスが1つしか選べないのが抽象クラスと相性悪いと思う
インターフェースに基底の実装を用意してもインターフェースを2つ実装しようとしただけでダメになる

471:デフォルトの名無しさん
15/08/15 17:19:23.51 2z51GaS1.net
>>459-460
あーなるほど、なんとなく分かりました
共通した仕様だけでなく実装の一部までもが共通して決まっているなら
そこまで定義しても問題ないし保証できるというわけですね
ありがとうございました

472:451
15/08/15 17:57:59.98 9FDdWcaw.net
>>452
ありがとうございます。読んでみます。
個人的には、少し冗長で読みにくい印象があったのでした。勉強してみます。

473:デフォルトの名無しさん
15/08/15 17:58:54.53 /RqnGk0/.net
>>462
ふらっと行ったら?

474:デフォルトの名無しさん
15/08/15 20:49:36.11 7Ge9P+Ci.net
普通インターフェースを継承すると、全てのメソッドやプロバティーなどを実装しないといけないが
抽象クラスならば全て実装しなくて良くて、実際に使う派生クラスまでの何処かで実装すればいい
抽象クラスなのは派生クラスでインターフェースの一部機能を実装するからかもしれん

475:デフォルトの名無しさん
15/08/15 21:07:44.19 3TmrRaVz.net
>>466
分かりました

476:デフォルトの名無しさん
15/08/16 22:37:33.66 nZvb2qTm.net
TableLayoutPanelで20行準備してサイズを5%にすると最後の行だけ大きくなるんだけど・・・

477:デフォルトの名無しさん
15/08/17 07:33:43.50 KTnE4+Ew.net
高さが行の数で割り切れないと最後で調整する仕様みたいだね
高さ%行数==行数-1 のとき最後の行が最大になる模様w

478:デフォルトの名無しさん
15/08/17 10:57:45.12 RAwbDv5U.net
TableLayoutPanelみたいなものが必要ならWPF使えよ
WinForms使うなら古臭いWinFormsの流儀から外れてはいけない

479:デフォルトの名無しさん
15/08/17 11:34:00.62 /53UNtSq.net
何だよそのクソ仕様。全体で少しずつ調整しろよ・・・

480:デフォルトの名無しさん
15/08/17 11:38:02.93 /53UNtSq.net
本当だ。割り切れるサイズにしたら直ったw

481:デフォルトの名無しさん
15/08/17 14:13:40.06 D7LX3aiM.net
WPFは使いたくないよな、何が嫌かっていうとそのうち廃れそうな空気が充満している所

482:デフォルトの名無しさん
15/08/17 15:51:23.84 eAn+98gr.net
WinFormsも時代に取り残される一方でしょ
未来があるのはASP.NET MVCだけだよ
デスクトップアプリがいいならMSもVS Code作るのに使ってるelectronがいいんじゃないかな

483:デフォルトの名無しさん
15/08/17 15:57:53.02 Fj/4E2oI.net
Win32APIお勧め

484:デフォルトの名無しさん
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
分かっていると思うけど、
逆に言えば、メソッド呼び出しが無いのなら、
無駄な計算は最適化で削除されうるってことだぞ


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