19/04/28 18:46:32.36 Cfig35XD0.net
>>569
MSがデストラクタからDispose呼んでるんだがw
// Free any unmanaged objects here.
で例外が発生するケースをどう扱うのか具体的に添削してやってくれ
URLリンク(docs.microsoft.com)
581:デフォルトの名無しさん
19/04/28 18:47:40.42 vQlivpSSa.net
>>566
>>537の考え方が正解
そういう時はファクトリーを使うという考え方が世界標準
582:デフォルトの名無しさん
19/04/28 18:56:32.95 lUhOqb6wd.net
>>572
どう扱うも何もアプリ終了させろってだけだが?
ハンドリングすべきではないものをどうこうしよとしないで
583:デフォルトの名無しさん
19/04/28 19:02:39.46 kMBz0MBMa.net
>>566
上にも書いたけど、あえてコンストラクタではなくstaticなTryCreateHogeみたいなのだけ提供して
注意喚起する方法もあると思うよ
>>567
デストラクタの存在理由はClose/Disposeを忘れた場合のフェイルセーフなんで
アンマネージドな共有リソースを占有するオブジェクトの場合はほぼ必須だし、
例外を投げるかどうかはともかく、デストラクタの中で例外的な事態が
発生することも普通にありえるとは思う。(例えばデバイスのクローズに失敗)
584:デフォルトの名無しさん
19/04/28 19:02:50.34 lUhOqb6wd.net
どんなに丁寧に処理したって完全に例外を対応するなんてことは不可能
599の最後でちゃんとやれば良いokみたいに書いちゃったのが良くなかった
ちゃんとやったって無理なことはある
585:デフォルトの名無しさん
19/04/28 19:06:45.39 KKCCRPTWa.net
>>575
その使い方はダメだと思うけど…
586:デフォルトの名無しさん
19/04/28 19:09:47.55 lUhOqb6wd.net
>>576
599じゃなくて559でした
587:デフォルトの名無しさん
19/04/28 19:10:36.56 kMBz0MBMa.net
>>577
何がダメ?
フェイルセーフって意味分かりますか?
588:デフォルトの名無しさん
19/04/28 19:17:31.79 KKCCRPTWa.net
無関係だけど一応答えるよ
フェイルセーフって言うのは失敗しても安全な状態に落ち着くこと
例えば信号が壊れても青信号になるんじゃなくて赤信号になるような設計
ファイルクローズは別にフェイルセーフの概念と関係ない
tryのfinallyはフェイルセーフじゃないよ
589:デフォルトの名無しさん
19/04/28 19:20:35.61 Cfig35XD0.net
>>574
ああ、お前じゃ無理だったな、すまんw
> アプリ終了されて困るなら正しくクラス設計すればいい
とほざいてた>>559、出てこいやー
590:デフォルトの名無しさん
19/04/28 19:22:21.81 fIrxxOza0.net
>>572
よく読め
591:デフォルトの名無しさん
19/04/28 19:22:22.23 JJw12cyBa.net
リソースのライフタイムの管理とリソースを使用して何かする責務を別の責務として分離したほうがいい
リソースの取得だけを分離する場合はファクトリーパターンが使われる
ただしこの場合はリソースを閉じる責務とリソースを使用する責務が同じクラスに混在してしまう
結果としてデストラクタでの例外といった問題が連鎖して発生する
これに対応するためにはファクトリーアイソレーションパターンを使う
このパターンならリソースのライフタイム管理とリソースの使用を完全に分離できる
コンストラクタでもデストラクタでもリソースの開閉に由来する例外は発生しなくなる
592:デフォルトの名無しさん
19/04/28 19:23:12.72 KKCCRPTWa.net
デストラクタでたとえば解放忘れの大きなメモリを開放するとしても
その前に他で大きなメモリを確保しようとすると死ぬ
デストラクタでファイルのクローズ忘れをクローズしようとしても
その前に他でファイルを開こうとするとエラーになる
デストラクタでいろいろ開放しても何も助けてない
役に立ったとしても偶然であって実質はバグを握りつぶしてるだけ
593:デフォルトの名無しさん
19/04/28 19:25:35.89 KKCCRPTWa.net
今までアンカー売ってないけど>>579向け
デストラクタで何か開放してもバグの温床になるだけ
594:デフォルトの名無しさん
19/04/28 19:26:43.51 kMBz0MBMa.net
>>580
関係あるからw
同じことをくどくど書くのは嫌いだが、デストラクタの存在理由は
コードの利用者がClose/Disposeを呼び忘れる、というヒューマンエラーに対するフェイルセーフ。
これは議論の余地はないよ
595:デフォルトの名無しさん
19/04/28 19:26:58.59 KKCCRPTWa.net
みんなフェイルセーフって言葉を使うけど大体意味間違ってる
596:デフォルトの名無しさん
19/04/28 19:28:16.75 uWFo9H7Wa.net
ああ、Dispose呼び出し忘れ対策のデストラクタか
それなら、自分の場合は
・デストラクタには「Dispose(false)」以外書かない(trycatchもしない)
・Dispose()側が例外を投げるかどうかは解放するリソース次第
・デストラクタの中に延々とリソース解放処理なりtry-catchが必要な処理なりを書いてるのだとすれば
そのソースコードは根本的におかしい
597:デフォルトの名無しさん
19/04/28 19:30:31.27 kMBz0MBMa.net
>>585
だから、デストラクタ「で」積極的にClose処理をするんじゃないの。
Close処理は普通にDispose/Closeに書くに決まっているわけだが、
使用者がそれを呼び忘れても最悪GCのお片付けのタイミングで
Close処理が行われるようにするための仕組みがデストラクタ
598:デフォルトの名無しさん
19/04/28 19:32:19.82 uWFo9H7Wa.net
ごめんもいっこ
・IDisposableなオブジェクトをDisposeせず使用している時点で実装不備とみなしてよい
(フィールド変数だったらポカミスで解放し忘れはあるかもしれないけど、
少なくともローカル変数ならusingを意図的に使ってない時点でコーダーが悪意を持ってると判断する)
599:デフォルトの名無しさん
19/04/28 19:32:33.80 KKCCRPTWa.net
>>586
いつまで勘違いしてるのか?
フールプルーフとフェイルセーフは別物だからwww
600:デフォルトの名無しさん
19/04/28 19:35:22.92 JJw12cyBa.net
>>590
DIに管理させるからusingもDisposeもしないという構成は非常に多い
601:デフォルトの名無しさん
19/04/28 19:35:29.40 KKCCRPTWa.net
自分の使ってるコードで完結してるのにデストラクタでアンマネージなどのリソースを
開放するのは間違った使い方
いくら自信たっぷりに書いてるのか知らないけど間違ってる
602:デフォルトの名無しさん
19/04/28 19:44:53.23 JJw12cyBa.net
>>593
知らない他人が何年後かに使うかもしれない
だとしたら誤った使われ方でも最低限の安全性を確保できるように作るべき
デストラクタでリソースを解放するのはアリ
603:デフォルトの名無しさん
19/04/28 19:47:01.57 Cfig35XD0.net
>>582
そんなレスしかできないなら黙ってろよw
604:デフォルトの名無しさん
19/04/28 19:50:07.37 KKCCRPTWa.net
>>594
IDisposable無視して放置する人を野放しにしないためにもデストラクタは不要だと思うわ
デストラクタが呼ばれたか呼ばれないかで意図しないタイミングで不具合が出たりでなかったりするだけだろ
そんなの余計に邪魔だろ
605:デフォルトの名無しさん
19/04/28 19:50:40.18 uWFo9H7Wa.net
さすがに自前で生成してない(解放しなくていい)オブジェクトはわざわざ解放しないよ
んーと、デストラクタを書かないといけないような処理があるならDispose(false)だけ書く、んだけど
なにか間違ったこと言ったかな
606:デフォルトの名無しさん
19/04/28 19:53:00.38 Cfig35XD0.net
>>590
> コーダーが悪意を持ってると判断する)
お前の判断なんてどうでもいい
MSはそんな判断してないからデストラクタからDispose呼んでるんだろうし
607:デフォルトの名無しさん
19/04/28 19:54:05.58 uWFo9H7Wa.net
書く必要がないデストラクタなら書かずに済ませるというのは同意
というか普段アンマネージドリソースなんて滅多にさわらないし
まともにデストラクタを書いたのはいったい何年前だろう
608:デフォルトの名無しさん
19/04/28 20:00:46.55 KKCCRPTWa.net
どうしてもデストラクタ使うなら解放忘れを解放するんじゃなくて
デバッグ中に解放忘れてるぞコラということを伝える仕組みを作るほうがまともじゃないかな?
自分の考えは>>584がほぼすべて
609:デフォルトの名無しさん
19/04/28 20:04:36.28 PHvM++pOM.net
>>566
ファクトリーメソッドを作って
その中でInitすれば良かろう
610:デフォルトの名無しさん
19/04/28 20:21:04.08 JJw12cyBa.net
解放忘れを本気で潰そうと思ったらさっき書いたようにファクトリーアイソレーションパターンを使う
Task ExecuteAsync(Func<ISomeResource, Task> job) {
using (var resource = new SomeResource()) {
await resource.OpenAsync();
await job?.Invoke(resource);
await resource.CloseAsync();
}
}
サービス利用者には生成も解放もインターフェースを提供しない
ExecuteAsyncを通さないとリソースにアクセスできないようにすれば解放忘れを完全に予防できる
611:デフォルトの名無しさん
19/04/28 20:28:37.93 kMBz0MBMa.net
>>591
フールプルーフ(ばかちょん)は何をやっても致命的にならない、
というニュアンスの方が強い。
この場合はどっちでもいいと思うけどね
612:デフォルトの名無しさん
19/04/28 20:33:15.98 3t4t6vYZM.net
>>603
ばかちょんじゃなくてバカヨケだぞ
適当なこと書くなよ
613:デフォルトの名無しさん
19/04/28 20:37:42.11 kMBz0MBMa.net
>>604
それは直訳で、日本語では昔からばかちょんと言うんだよ
昔からというか昔はかもしれん。
俺もおじいさん先生からしか聞いたことない言葉だし
まあポリコレの時代だしね
614:デフォルトの名無しさん
19/04/28 20:39:59.68 3t4t6vYZM.net
バカチョンは意味が違う
615:デフォルトの名無しさん
19/04/28 20:42:39.60 3t4t6vYZM.net
バカヨケ 失敗しないような仕組み
バカチョン 誰でも使える
616:デフォルトの名無しさん
19/04/28 21:44:36.92 nV7r0mI50.net
>>592
コンテナdisposeしたら、ついでに中身も自動でやってほしいよな・・・
617:デフォルトの名無しさん
19/04/29 12:55:34.62 pjV/Nimc0.net
横からすまんがさあ
DIにMicrosoft.Extensions.DependencyInjection使ってるんだけど、これってコンテナから生成されたオブジェクトって永遠と生き続けるの?
どうやって開放するん?
618:デフォルトの名無しさん
19/04/29 13:05:11.30 ehYnqzb50.net
>>609
Scopeでググれ
619:デフォルトの名無しさん
19/04/29 13:39:51.85 NUp+Ex1Ma.net
基本的に生成元になったスコープをDisposeするとスコープ管理下のオブジェクトがまとめて消える
スコープはCreateScopeで再帰的に生成できる
BuildServiceProviderで作ったプロバイダーはルートのスコープに生えてるプロバイダーと考えればいい
アッドシングルトンで登録したやつは親子関係にある全てのスコープで1つしか作れずルートスコープと寿命が同期
アッドスコープドで登録したやつは各スコープ内で1つしか作れず作ったスコープと寿命が同期
アッドトランジエントで登録したやつはスコープ内で何個でも作れて作ったスコープと寿命が同期
ASP.NET Coreでは暗黙的に1つのリクエストに1つのスコープを割り当てる
訂正あったらヨロ
620:デフォルトの名無しさん
19/04/29 13:43:03.33 pjV/Nimc0.net
Scope = Asp.net用みたいな気になっていて全然知らなかったよ、ありがとう
ただDIなしの場合にusing句で書けるようなのはDIありでも簡単にかけそうだけど、オブジェクトを扱う箇所が数箇所に分かれてるときは難しそう・・・・
ScopeをDIコンテナに突っ込んだら突っ込んだでまた問題が増えるのかな・・・・
621:デフォルトの名無しさん
19/04/30 20:23:22.69 IHLGrYrL0.net
System.Globalization.JapaneseCalendarでeraを取得しているんだけど
Rが入ってこない・・・
Windows10でWindowsUpdateも最新なんだけど、何で入ってこないんでしょう
622:デフォルトの名無しさん
19/04/30 20:28:08.43 w+F7NKD3a.net
>>613
URLリンク(docs.microsoft.com)
> To test that your application works with the new era, you must advance your computer's clock to May 1, 2019 or later.
PCの時刻設定を2019/05/01以降にする必要があるらしい
623:デフォルトの名無しさん
19/04/30 20:38:50.44 LbZ9KfXX0.net
まずまだアップデートはオプション段階だが、KB4493443入れてる?
正式なWindowsアップデートは5月以降だよ
624:デフォルトの名無しさん
19/04/30 20:45:03.73 YvhWBPAF0.net
KB4493443って、Windows8.1用だったような。
ちなみに、Windows10, version1809用は「近日公開予定」だそうで。
URLリンク(support.microsoft.com)
625:デフォルトの名無しさん
19/04/30 21:35:51.80 u6t/T7mma.net
もう元号とかやめて欲しいよねほんとw
いい加減役所も西暦に一本化しろよ
626:デフォルトの名無しさん
19/04/30 21:36:53.61 TyGEr2d8a.net
統一したら雑務が減っちゃうだろ
627:デフォルトの名無しさん
19/04/30 22:02:27.50 LbZ9KfXX0.net
>>616
訂正ありがと 手元にあるのが8.1で全部おんなじかと
628:デフォルトの名無しさん
19/05/01 06:30:43.85 +0nnIASf0.net
皆さんレスどうもです
まだ対応待ちってことですね・・・
とりあえずいまはテスト用にレジストリいじれるしかなさそうですね
629:デフォルトの名無しさん
19/05/01 14:39:10.04 NTU1YIA40.net
インデクサーってpublic T this[int I]{}みたいに定義するらしいけどさあ
ここに出てくるthisの部分って、this以外も入りうる余地ってあるの?
630:デフォルトの名無しさん
19/05/01 14:49:13.86 lxO04VNX0.net
>>621
無いよ
this以外にするとインデックス付きプロパティって意味になると思うけど、c#には無い
631:デフォルトの名無しさん
19/05/01 14:51:52.86 U25K78xGa.net
>>621
URLリンク(docs.microsoft.com)
> indexer_declarator
> : type 'this' '[' formal_parameter_list ']'
> | type interface_type '.' 'this' '[' formal_parameter_list ']'
> ;
入るのはthisだけで、this以外が入る余地はない
632:デフォルトの名無しさん
19/05/01 15:04:58.50 NTU1YIA40.net
ありがとう
無いものについてパッとわかるとか驚くぜ
633:デフォルトの名無しさん
19/05/02 05:11:25.37 fWQ7EMkU0.net
メモ
URLリンク(www.enterprisedb.com)
URLリンク(www.devart.com)
URLリンク(visualstudio.microsoft.com)
URLリンク(www.nuget.org)
URLリンク(www.nuget.org)
URLリンク(www.nuget.org)
URLリンク(www.nuget.org)
URLリンク(www.pgadmin.org)
URLリンク(dev.mysql.com)
634:デフォルトの名無しさん
19/05/02 06:26:48.77 qeQLZJi00.net
そういうのはQiitaでやれ(Qiita警察激怒)
635:デフォルトの名無しさん
19/05/02 12:04:50.67 ir+Ne9RR0.net
メモ系ツールなんて山ほどあるのにわざわざこんなところに書くのか
俺こんなの調べてんだぜすごいだろ?みたいな承認欲求なのかね?
636:デフォルトの名無しさん
19/05/02 19:31:55.56 Plm8DXbx0.net
初心者ですが、乱数系列の初期化(Randomクラスのオブジェクトの生成)は
どこに書くのが正解なんでしょうか?
関数の中に書くと、関数が呼び出されるたびに初期化されるんじゃ?と思えるのでちょっと拙い
関数の外側にプログラムの初めの辺に書いておけばいいのかなあ?とも思うのですが、それもカッコ悪い
637:デフォルトの名無しさん
19/05/02 19:36:11.39 rtZHUO2Da.net
>>628
依存性として注入するのが定石
638:デフォルトの名無しさん
19/05/02 20:19:04.27 Plm8DXbx0.net
依存性 注入で検索したらいろいろ出てきたので調べてみます
639:デフォルトの名無しさん
19/05/03 03:27:08.36 eVcW5sZJ0.net
>>628
最近のは年月日時分秒を整数にして種にしてるっぽいから、
毎回初期化の方がランダム性が高まるんじゃないかと思ってる。
640:デフォルトの名無しさん
19/05/03 03:31:56.40 t597qxt20.net
>>628
仕様次第
乱数の仕様を設計書に明記する必要がある
641:デフォルトの名無しさん
19/05/03 12:41:41.06 Xwdpydd1a.net
>>628
訳分からん解答が続いてるけど、素直に
インスタンス固有である必要があるならコンストラクタに
staticでよいなら静的コンストラクタに
書けばいいだけ。かっこ悪いとか、くだらないことに悩むのは時間の無駄。
この場合は不要だと思うけど、静的コンストラクタが実行されるのはそのクラスの
静的メンバーに初めてアクセスされたタイミングだと思ったので、その点は場合によっては注意
642:デフォルトの名無しさん
19/05/03 12:51:40.57 JARezKaea.net
>>633
嘘を教えるな
そんな馬鹿な使い方をしたらテストできなくなるだろ
643:デフォルトの名無しさん
19/05/03 13:16:48.56 JqDPcuspM.net
private staticなら単体テストには支障ないだろ
厳密な再現性を求めるなら本来はシードを固定するべきだが
644:デフォルトの名無しさん
19/05/03 13:23:25.74 Xwdpydd1a.net
どっからテストとか出てくるんだw
意味が分からん
645:デフォルトの名無しさん
19/05/03 13:28:31.30 5Dkgrzu1M.net
>>633
そもそも因果関係が逆だよな
キモメンが書いたコードがダサい
646:デフォルトの名無しさん
19/05/03 13:39:56.17 ffSbfxo8M.net
>>636
staticだとコンストラクタで実装を差し替えられないから単体テストの邪魔になりやすいというのは一般論としてはある
Randomを差し替える必要があるケースは極めて稀だが、上で述べたように厳密な再現性が求められるケースならありえなくもない
647:デフォルトの名無しさん
19/05/03 13:45:36.92 JARezKaea.net
>>635
直近のN回が特定の数列の場合のテストとかしにくいだろちったあかんがえろ
>>636
テストしねーのかてめー?終わっとるな
648:デフォルトの名無しさん
19/05/03 13:57:48.60 Zy40eisO0.net
>>639
横からすまんが、そのテストしにくい例ってのをコードで見せてくれんかな
学習のためにどうか頼むわ
649:デフォルトの名無しさん
19/05/03 14:05:21.52 N/aYDMHoM.net
>>640
例えばガチャを作ってるとして、0-999の乱数で0-9が出たらSSRを排出する仕様なら、
0と9と10くらいを決め打ちでテストしたくなるだろ?
まあそのために乱数生成器をモックしなきゃいけないような設計には再考の余地があると思うが、状況としては普通にありえるだろう
650:デフォルトの名無しさん
19/05/03 14:07:16.80 roEz64M2M.net
あなるあなる肛門肛門
651:デフォルトの名無しさん
19/05/03 14:07:36.88 roEz64M2M.net
すまん誤爆でした!!!
652:デフォルトの名無しさん
19/05/03 14:09:46.15 Xwdpydd1a.net
だから質問者はそんなこと聞いてないって...
どんだけ独りよがりの妄想展開するんだよ
653:デフォルトの名無しさん
19/05/03 14:11:43.11 roEz64M2M.net
>>644
うるせーばか子ね
654:デフォルトの名無しさん
19/05/03 14:16:40.44 JARezKaea.net
現在時刻とか乱数みたいな制御しにくい値はインジェクションする
これ常識な
勉強になったねきみたち
655:デフォルトの名無しさん
19/05/03 14:47:40.00 3MJf1YjB0.net
>>644
カッコイイか悪いかだから
って問題があってカコワルイ
ってつければ質問者の望む回答
656:デフォルトの名無しさん
19/05/03 15:12:05.72 uS7vqCXY0.net
>>639
本末転倒だろう。
作るべき物の要件に合わせて乱数生成の挙動を定義して設計するのが優先すべき事項で、その実装をテストするためのコードは必要に応じて用意すればいいだろう。
657:デフォルトの名無しさん
19/05/03 15:31:58.12 JARezKaea.net
>>648
それはアマチュアの考え方
658:デフォルトの名無しさん
19/05/03 15:33:51.16 wCLW0/2P0.net
>>649
スレタイ読め
659:デフォルトの名無しさん
19/05/03 15:38:42.54 q0Uiy+aiA.net
どーでもええわ
660:デフォルトの名無しさん
19/05/03 15:58:52.41 Ue5NRrHW0.net
教えてください。
以下のコードで、x の定義は問題ないのに y の定義だけコンパイルエラーになってしまいます。
==
const Exception e = null;
const bool x = e == null; // エラーなし、true が設定される。
const Type t = null;
const bool y = t == null; // CS0133 y' に割り当てられた式は定数でなければなりません。
==
何が原因でこのような違いがでるのでしょうか。
また、y を定数のままエラーが出ないように修正することは可能でしょうか。
よろしくお願いいたします。
661:デフォルトの名無しさん
19/05/03 16:01:49.32 3MJf1YjB0.net
>>652
結果によってtrueやfalseになるようなんは定数と呼ばん
662:デフォルトの名無しさん
19/05/03 17:46:27.38 Xwdpydd1a.net
>>652
例外はTypeで==演算子が再定義されてるからみたいなので、
const bool y = t == (object)null;
一応これで文句言われないみたい
663:デフォルトの名無しさん
19/05/03 17:53:37.68 Xwdpydd1a.net
あ、なんか例外とか意味不明なこと書いてるけど突っ込まないでねw
664:デフォルトの名無しさん
19/05/03 18:53:11.77 78NC+NUs0.net
>>654
え?
それ通るの?
怖い
665:デフォルトの名無しさん
19/05/03 19:21:25.35 Xwdpydd1a.net
言語仕様の「定数式」の項を見れば別に不思議はないんだけど、
他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」
と思っちゃうね。
666:デフォルトの名無しさん
19/05/03 20:24:56.25 Ue5NRrHW0.net
>>653
レスありがとうございます。
定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、
表現が不適切だったかもしれません。失礼いたしました。
>>654
ありがとうございます!うまくいきました。
ちなみにいろいろ試してみると、
string は == が定義されているもののエラーが出ないようです。
さすがに string は特別ということのようですね。
(ただ、typeof(string).IsPrimitive は false にだったりして
いまいちしっくりきませんが。。。)
==
const string s = null;
const bool z = s == null; // エラーなし、true が設定される。
==
何にせよ、問題はすっきり解消いたしました。
適切なアドバイスどうもありがとうございました。
667:デフォルトの名無しさん
19/05/03 20:25:45.58 Ue5NRrHW0.net
>>657
実際に const を使いたかったわけではなく、
問題の切り分けを行った結果として >>652 のように質問させていただいたのですが、
言われてみれば確かに何がしたいのかわからない・・・。
もう少し元の問題に近いコードを提示するなら、以下のような感じです。
==
const Type t = null;
if (t == null) Console.WriteLine("t is null.");
else Console.WriteLine("t is not null."); // 警告なし
const Exception e = null;
if (e == null) Console.WriteLine("e is null.");
else Console.WriteLine("e is not null."); // CS0162 到達できないコードが検出されました
==
668:デフォルトの名無しさん
19/05/03 20:54:20.72 mscz+0vpa.net
>>659
いやいやいや、俺はおたくにケチつけたわけじゃないよw
const bool y = t == (object)null;
こういうのはぱっと見て意図が分からないと言っただけ。
むしろ「マジックナンバー」を避けるのは良い習慣ですよ
669:デフォルトの名無しさん
19/05/03 20:57:46.12 mscz+0vpa.net
>>658
>string は == が定義されているもののエラーが出ないようです。
上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。
VSのインストールフォルダに入ってる
670:デフォルトの名無しさん
2
671:019/05/03(金) 21:13:39.41 ID:rGk2iQn5a.net
672:デフォルトの名無しさん
19/05/03 22:02:39.62 Ue5NRrHW0.net
>>660
> const bool y = t == (object)null;
> こういうのはぱっと見て意図が分からない
そうですねw
式の意味を考えるなら t == (object)null は
ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど
const うんぬんの話の中でこれはダメですし。
ちなみに今ふと思いついて試してみたんですが、
t is null も == の定義には依存しないものの定数扱いにはならないようです。
>>661
ありがとうございます。
言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような
気がしてきたので、これを機会に勉強してみようと思います。
673:デフォルトの名無しさん
19/05/03 22:03:15.73 Ue5NRrHW0.net
>>662
質問させていただいたのは、
>>659 のコードみたいに CS0162 の警告が出てほしいのに
出てくれない場面があったからです。
でもたしかに readonly なローカル変数はあってもいいですよね。
あと、引数のみに依存して副作用もないメソッドについて
↓みたいな書き方が許されたらいいのに~とか妄想しましたw
==
static class MathEx
{
public const double Square(double x) => x * x;
}
static class MyConstants
{
public const double SquarePI = MathEx.(Math.PI);
}
==
674:デフォルトの名無しさん
19/05/03 22:05:09.07 Ue5NRrHW0.net
何度もすみません。。。上の妄想コードは間違いです。
正しくはこちら。
==
static class MathEx
{
public const double Square(double x) => x * x;
}
static class MyConstants
{
public const double SquarePI = MathEx.Square(Math.PI);
}
==
675:デフォルトの名無しさん
19/05/03 22:55:31.79 1vSUmwo4M.net
実質的に定数ならJITコンパイル時に定数に置き換わるからそんなものは要らん
676:デフォルトの名無しさん
19/05/03 23:53:26.41 BZD1sthA0.net
decimalの定数は内部的にアレだけどな
677:デフォルトの名無しさん
19/05/04 07:03:09.32 Y3LpLEUoM.net
>>667
詳しく
678:デフォルトの名無しさん
19/05/04 13:03:57.01 3sktWiiHa.net
>>668
横からだけど URLリンク(ufcpp.net) のことだと思う
679:デフォルトの名無しさん
19/05/04 14:32:15.09 IHSUUilV0.net
List.Addって、複数のスレッドから同時に呼び出したらデータが壊れる可能性ってあるの?
680:デフォルトの名無しさん
19/05/04 15:00:48.03 NSx1pb1m0.net
>>670
スレッドセーフじゃないからlock制御を自前で持つか、System.Collections.Concurrentのコレクション使うべき
681:デフォルトの名無しさん
19/05/04 15:23:49.46 H40F3Pfj0.net
Queueの出し入れもlock必要だし、マルチスレッドはめんどいよな。
なんでConcurrentDictionaryはあるのにListは無いのか
682:デフォルトの名無しさん
19/05/04 15:37:29.51 uz0VN5nda.net
>>672
使い道がない
683:デフォルトの名無しさん
19/05/04 15:38:02.55 vy21Hr2ZM.net
個人的にはスレッド自体に特定のスレッドからのデータを受け取る処理がある方が好き
684:デフォルトの名無しさん
19/05/04 15:57:05.65 qIB0qWQDM.net
別々のスレッドから生成された値を集めたいなら、
各スレッドで別のバッファ(List)に値を書き込んでから最後に単一スレッドでマージするのが定番
685:デフォルトの名無しさん
19/05/04 17:20:59.03 pMssk1qR0.net
スレッドセーフって実はどういう動作するのかよく知らないぜ
686:デフォルトの名無しさん
19/05/04 17:27:01.27 0zm1CIpf0.net
>>676
わかる
エラーがでなかったらそれがスレッドセーフ!!
687:デフォルトの名無しさん
19/05/04 20:18:11.93 pMssk1qR0.net
APIのマニュアルにおいて「スレッドセーフ」という言葉が用いられる場合、たいていは「複数のスレッドからアクセスされても例外を出さない、プログラムがクラッシュしない」というような意味です。
しかしプログラムの目的によっては、例外が出ないだけでは不適切です。
例えば対象が、100個のデータを管理する変数だとします。
その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。
この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。
ってググって出たサイトで拾った
688:デフォルトの名無しさん
19/05/04 20:25:20.65 pMssk1qR0.net
つまり
for(int i=0;i<lst.count;i++)
{
unk un=lst[i];
略
}
みたいなプログラムを組んだとき
どっかでいきなり要素をゼロにされて死ぬってことは
スレッドセーフだろうがどうだろうが可能性はあるってことだよね
ってことを考えるとスレッドセーフである意味ってあんまりなくて
排他処理は絶対実装しないと駄目だよね?ってこと?
誰か違うと言ってくれ
689:デフォルトの名無しさん
19/05/04 20:59:32.71 Ui9BQ5TxM.net
スレッドセーフはメソッド内などで一貫性を保てる作り
排他制御が必要な場面でやってないなど作り手のロジックミスには対応出来るわけがない
690:デフォルトの名無しさん
19/05/04 21:06:21.08 Ui9BQ5TxM.net
スレッドセーフである意味
あるオブジェクトがプロパティAを持っててメソッド内で
b=aaa(A)+bbb(A);
を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ
最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない
スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ
691:デフォルトの名無しさん
19/05/04 21:07:23.59 3sktWiiHa.net
>>679
その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る
System.Collections.Concurrent系のコレクションは、
例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ)
どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽
692:デフォルトの名無しさん
19/05/04 21:27:48.58 qIB0qWQDM.net
>>679
厳密に他のスレッドとの同期を取らなきゃいけないなら>>682の言うようにBlockingCollection使うか毎回ロックだろうし、
ループ中は他のスレッドによるlstの変更を反映しなくていいならループに入る直前だけロックしてコピーしておけば済む
ケースバイケースだよ
一つ一般的なアドバイスをしておくと、並列処理のコツはデリケートな前提をなるべく設けずに極力ロバストな設計をすることだ
要件が許す限りにおいて、少々処理の順番が入れ替わったり処理間の同期が取れてなかったりしても問題にならないつくりにするのが理想
693:デフォルトの名無しさん
19/05/04 22:09:10.98 56LrGuhB0.net
非同期処理は複数のスレッドが同じデータを弄ろうとすることによる不整合は起きないけど
コールスタックは複数になるから
同じデータに触ると訳ワカメになる事があった
694:デフォルトの名無しさん
19/05/04 23:16:04.81 pMssk1qR0.net
(||゚Д゚)ヒィィィ!(゚Д゚||)
じゃあ>>679みてーな処理を書いたら
スレッドセーフなんて関係なく
バグるんだね
こぇえええええ
じゃなくて終わったわ
今まで組んだもんでテキトーにやった箇所全部終わってる気がする
695:デフォルトの名無しさん
19/05/04 23:28:33.99 J15hVQV0a.net
まあ複数スレッドで同時並行処理するときにはそのへん慎重を期さないと
再現困難なバグを埋め込んじゃうからねえ
同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ
696:デフォルトの名無しさん
19/05/05 05:07:07.08 tvdtPjB+0.net
マルチスレッドの恐ろしさは、たまにしかバグらない事。
ほとんどは正常に動くから、質が悪い。
必ず、バグらないだろ
それで喧嘩になる事も多い。
マルチスレッドは、ベテランでもバグるからやめろと言っても、
ほら、バグらないでしょ? と、突っかかってくる
その時には、バグらないと言うと、
千回実行しても、バグらないでしょ? と、突っかかってくる。
でも、その時にはバグらない
バグる立証をするのが難しい
だから、Ruby をやった人は、関数型言語のElixir をやる。
他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い
1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。
何回バグらないで実行すれば、正しいと認めるのか、と問われても困る
697:デフォルトの名無しさん
19/05/05 06:10:17.07 BzgWdCy40.net
アクマノショウメイ
698:デフォルトの名無しさん
19/05/05 08:46:40.02 TKrOuc6uM.net
>>687
喧嘩になるのはマルチスレッドのバグのせいではなくお前の頭がバグってるから
699:デフォルトの名無しさん
19/05/05 08:57:36.80 Vqy33e5r0.net
エビデンスとれてりゃ突きつけるだけなのに
700:デフォルトの名無しさん
19/05/05 10:34:54.98 RPhfdkos0.net
>>687
マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。
あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。
701:デフォルトの名無しさん
19/05/05 10:45:50.32 bYgaGqRgM.net
>>687
なんでバグが起こってるのか原因特定出来てなくてワロタ
702:デフォルトの名無しさん
19/05/05 10:48:34.16 uudMW5nw0.net
スレッドセーフは単発のメソッドが競合しないだけで
一連の処理についての動作保証をするものではないと
マルチスレッドはやらなくていいならそれに越したことはないけど
絶対に駄目というわけではなく
排他処理を組まないことが害悪
703:デフォルトの名無しさん
19/05/05 11:21:06.67 IBoHsNppa.net
排他制御をしなくても安全に並列処理できるように設計することが大事
まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい
大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき
704:デフォルトの名無しさん
19/05/05 11:29:03.77 Q2loWuJOM.net
シネ
705:デフォルトの名無しさん
19/05/05 12:22:10.03 6g/cxz/+M.net
ぱられるふぉーってのを使えば良いんじゃね?
知らんけど
706:デフォルトの名無しさん
19/05/05 12:32:51.31 uudMW5nw0.net
>>694
うーん、でも>>679みたいなこと
やった時点で終わりってまともじゃねぇよ
コードで一瞬でもすきを見せたら終了みたいになっちゃうじゃん
お前の理想はなんかあるんだろうけど
他人が叫ぶスレッドセーフに頼っちゃ駄目だよ
アプリの仕様として排他処理を盛り込むべき
707:デフォルトの名無しさん
19/05/05 13:01:26.26 EeTrV1LT0.net
>>697
だからさ、>>679みたいなforループ自体をスレッドセーフにする一番簡易な表記方法がlockなんだよ
これ以上簡単に書くことはライブラリをどんだけ上手く作っても無理
708:デフォルトの名無しさん
19/05/05 13:15:03.75 l159r3xkM.net
>>698
それって記述が簡単ってだけでしょ?
ロック中にアクセスしたらどういう動作するの?
次回に回すの?
待機して待つの?
そういうのってスレッド毎にステータスを持たせて
マトリックスで管理しないと制御できてると俺は認めない
ジジイだから
709:デフォルトの名無しさん
19/05/05 13:34:55.82 1Pm7tIcB0.net
VisualBasic大先生を怒らせてしまったようだな
710:デフォルトの名無しさん
19/05/05 13:41:27.68 IBoHsNppa.net
>>698
だからさ
そんな不安定なロジックを書かなくても良いようにちゃんと設計するのが並列処理の王道なんだよ
lockブロックは最初の一回を書くときは楽かもしれんがだんだん難しくなるぞ
そのコレクションを使う全てのプログラマが並列性を意識して正確に排他制御をコーディングしなければならない
これは実用的なシステムの規模になるとかなり大きな負担になる
711:デフォルトの名無しさん
19/05/05 14:02:39.93 IBoHsNppa.net
そもそもロックって論外なんだわ
世の中の並列処理の目的ってのはほぼ2種類に分類されるんだよ
①インフラストラクチャ処理中にCPUを待たせたくない
②消費コア数を増やして暇なCPUを働かせたい
よーするにCPUを無駄にしたくないわけ
でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう
ロックすると並列処理をする目的そのものに反してしまう
なのでロックは基本使わず最後の手段ってわけ
この辺りは(やや古い本だが)Microsoft Pressのプログラミング.NET Franework第4版やEffectiveシリーズでも解説されてることだね
どちらも良書なので脱初心者を目指しているだろう君達は是非とも読むべきだ
712:デフォルトの名無しさん
19/05/05 14:08:00.64 kZz1htUnM.net
その通り
極端な話、並列処理なんてそれぞれ別のサーバーで実行させりゃいいんだよ
それがレイテンシやコストなどの問題で無理なら代わりにプロセスを分ければいい
そもダメならリクエストやワーカー単位でスレッドを分け、といった具合に、共有するリソースを最小限にすることを優先する
713:デフォルトの名無しさん
19/05/05 17:40:50.25 Q2loWuJOM.net
ジジイだから能力低いだけだろ
714:デフォルトの名無しさん
19/05/05 18:00:00.04 1Pm7tIcB0.net
非同期処理全盛の時代にこれじゃ、世の中やばいコード(or非同期処理のつもりが同期処理されてるコード)だらけだろうな
Qiitaとか見ててもやばい奴だらけだ
715:デフォルトの名無しさん
19/05/05 18:04:40.39 IBoHsNppa.net
>>705
今時lockだもんな、笑えない深刻さ
お前のコード、めちゃくちゃブロックされてんだけど、って同僚の誰かが教えてやればいいのに見て見ぬ振りは可哀想だ
716:デフォルトの名無しさん
19/05/05 18:09:44.07 1Pm7tIcB0.net
そもそも、世のサンプルプログラムの多くが欠陥品なのが諸悪の根幹なのかもな
劣化コピーしちゃうQiita屋とかコピペプログラマが全部危険なコードを書いてしまう
717:デフォルトの名無しさん
19/05/05 18:19:48.84 Q2loWuJOM.net
一番パフォーマンスの良いMutexを使ってる人がどれだけいるやら
718:デフォルトの名無しさん
19/05/05 18:23:53.97 IBoHsNppa.net
>>708
よくねえよw
OSリソース消費する処理に速度を期待するな
719:デフォルトの名無しさん
19/05/05 18:27:02.59 Q2loWuJOM.net
他人に迷惑をかける基地外はシネ
720:デフォルトの名無しさん
19/05/05 18:33:04.85 Q2loWuJOM.net
webサーバでスレッド一個で処理を完結するようにはなっていないだろ
721:デフォルトの名無しさん
19/05/05 18:33:17.95 IBoHsNppa.net
Mutexは相変わらずスレッドをブロックするうえにMonitorよりも消費リソースが大きい
その代わりプロセスを超えて待機処理を実装できるというものだ
よーするにlockよりもっと遅いんだよ
722:デフォルトの名無しさん
19/05/05 18:34:49.31 Q2loWuJOM.net
>>712
実務で使ったことないんだろ
黙っとけや
自分だけの小さなアプリしか作ったことないんだろ
723:デフォルトの名無しさん
19/05/05 18:37:30.50 IBoHsNppa.net
>>713
もう無理だよ笑わせないでw
もっともパフォーマンスの良いミューテックスwwwwwww
実務で使ったことないだろwww
学生さんですかwwww
724:デフォルトの名無しさん
19/05/05 18:38:33.24 Q2loWuJOM.net
5分で確認できることをできない老害
725:デフォルトの名無しさん
19/05/05 18:41:05.51 1Pm7tIcB0.net
Mutexはロックがいらないスレッド同士でもロックしちゃうのが使いづらいな
回避できるのかはしらんが
726:デフォルトの名無しさん
19/05/05 18:41:10.65 Q2loWuJOM.net
そもそもスレッドがとまると言ってるけどCPUのスレッドと.netのスレッド混同してそう
727:デフォルトの名無しさん
19/05/05 18:41:50.97 Q2loWuJOM.net
> でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう
これ笑う所?
728:デフォルトの名無しさん
19/05/05 18:45:15.15 Q2loWuJOM.net
ロックしちゃうと問答無用でCPUが何もせずに止まっちゃうわけないだろw
729:デフォルトの名無しさん
19/05/05 18:47:01.12 uudMW5nw0.net
え?lock中にアクセスしようとしたらどうなるの?
730:デフォルトの名無しさん
19/05/05 18:48:17.37 1Pm7tIcB0.net
ロックが取得できないだけ
731:デフォルトの名無しさん
19/05/05 18:48:31.54 Q2loWuJOM.net
お前のPCは8スレッドぐらい動かしたら止まるの?
732:デフォルトの名無しさん
19/05/05 18:51:01.09 IBoHsNppa.net
>>719
うるせーなスマホで長文書くとミスるんだよ
スレッドが
733:ブロックされるってことだ
734:デフォルトの名無しさん
19/05/05 18:51:41.98 Q2loWuJOM.net
>>723
ググってきたのかよ低能さん
735:デフォルトの名無しさん
19/05/05 18:52:07.51 uudMW5nw0.net
>>721
そんときのコードってどう書くの?
736:デフォルトの名無しさん
19/05/05 18:53:42.23 IBoHsNppa.net
>>724
調子のんなよ重箱の隅つつきマン
737:デフォルトの名無しさん
19/05/05 18:55:47.24 Q2loWuJOM.net
>>726
lockとMutexのパフォーマンスのベンチ比較して
結果を出せよ
それまで書き込みするな
738:デフォルトの名無しさん
19/05/05 19:00:35.89 IBoHsNppa.net
>>727
はぁ?
言い出しっぺのてめーがパフォーマンス一番良いミューテックスのベンチ出せや
一番ってんならロックと比較なんてケチくせえこと言わんで他の排他制御機構とも比較しろよ?
739:デフォルトの名無しさん
19/05/05 19:00:46.75 Q2loWuJOM.net
どう見ても間違っている内容で煽られると人はどう思うのか
どう考えても仕組み上Mutexのほうが遅い
740:デフォルトの名無しさん
19/05/05 19:07:06.98 1Pm7tIcB0.net
>>725
普通に取得できるのを待ってるな
まあ、ロックが取得できるまで制御を戻したりはしておらんわ
741:デフォルトの名無しさん
19/05/05 19:12:25.48 uudMW5nw0.net
>>730
だよね
ちょっと調べてるけど
普通の排他処理組んでおきたくて
lock
ReaderWriterLockSlim
UpgradeableReadLock
なんか普通の排他処理したいだけなのに
たくさん出てきちゃったぞ
これ全部使っても
ん?排他処理できてんのか?
って疑問が晴れない
この言語非同期処理の対応手薄なんだよねまだ
時期尚早として触らんことにしたw
742:デフォルトの名無しさん
19/05/05 19:21:47.99 1Pm7tIcB0.net
LockやMutexは初心者本の範囲内だからしらんのはまずいよ
743:デフォルトの名無しさん
19/05/05 19:45:53.31 VmrJwxHQM.net
非同期のチートシートないの?
744:デフォルトの名無しさん
19/05/05 19:57:32.38 LYwUBfu90.net
URLリンク(qiita.com)
測った人によると
nterlocked > lock > SemaphoreSlim > Semaphore > Mutexだってさ
745:デフォルトの名無しさん
19/05/06 02:20:35.00 wkmj+bF20.net
並列処理なら.netなんだからF#でSTM使え。
何で関数型言語が注目されたんだよ。
並列処理に有利だからだろ。
746:デフォルトの名無しさん
19/05/06 04:59:30.75 wr9bFPpT0.net
マルチスレッドなんか無理!
だから、Ruby の人は、Elixir を使う
作るのに何百年も掛かる、人類の成果、Erlang VM + Ruby = Elixir。
ErlangVMを、Rubyでラップしたもの
Elixirの小プロセスなら、10万プロセスも余裕!
パイプラインと同じ
関数型だから状態を持たない。
ただ、データを変換していく関数をつなげていくだけ!
747:デフォルトの名無しさん
19/05/06 07:40:48.06 WDjCowqB0.net
>>736
Rubyにマルチスレッドは、無理!
RubyはいわゆるGILといって、同時に複数のスレッドが走らないような排他制御がVMレベルでかかっている
これはVM自体がスレッドセーフでないクソ実装であることに起因する制約である
もちろんC#にはそんなものはないし、ベンチマークだとErlangより速い
748:デフォルトの名無しさん
19/05/06 12:19:36.88 zGa1jTsu0.net
Windows8.1/10の令和対応アップデートでWinFormsの画面レイアウトが崩れるらしいね
749:デフォルトの名無しさん
19/05/06 12:48:42.80 w2Z6VwVJ0.net
お前んとこのWinformsいつもレイアウト崩れてんな
750:デフォルトの名無しさん
19/05/06 12:59:34.99 rtkPFZMSd.net
>>738
俺のとこも昨日発生した
AutoScaleModeをNoneにして対応できたから令和のせいではないと思う
751:デフォルトの名無しさん
19/05/06 13:02:49.51 4h7Vjk7HM.net
>>739
は?崩れてねーし
OKボタンが画面外にいって押せないだ
752:けだ
753:デフォルトの名無しさん
19/05/06 21:06:24.34 Gi+4ls7q0.net
画面レイアウトがクソみたいに崩れたぞ死ねや
754:デフォルトの名無しさん
19/05/06 21:19:39.33 Gi+4ls7q0.net
>>740
どうやってやるのそれ?
visual studio開いた時点ですでに崩れてて手動で戻すしかなさそうなんだが。
【警鐘】[改元][Windows][.NET] 「令和」対応パッチで画面が横に伸びる、文字が見切れる ― Windows Update 手動更新はちょっと待った方がいい
URLリンク(qiita.com)
755:デフォルトの名無しさん
19/05/06 21:32:21.57 lj/6a9HB0.net
>>743
デザイナ表示壊れてんのなら.Designer.csの中身書き換えるしかないんじゃね
AutoScaleMode.FontをAutoScaleMode.Noneに全部置換したらいい
756:デフォルトの名無しさん
19/05/06 21:39:51.78 Gi+4ls7q0.net
>>744
ありがとう
form1.csのデザインのAutoScaleModeをNoneにしたけど何も起こらなかったからあきらめてたけど、そっちを修正したら解決したわ。
757:デフォルトの名無しさん
19/05/07 00:11:46.09 HkLoI6gC0.net
>>740
令和を1文字で表すやつのために、フォントをいじったんだが、そのときに既存の文字の幅が変わったらしい
なのでまあ、令和対応のせいだと言えばそうなんじゃね
つか明日からどれだけ影響出てるか考えると鬱だわ
758:デフォルトの名無しさん
19/05/07 01:24:56.82 A2KlUElc0.net
納期直前でGW返上してる最中にこの不具合対応しなきゃいけなくなってかなりイラッとした
759:デフォルトの名無しさん
19/05/07 08:16:44.51 h85TWq9Qa.net
URLリンク(devblogs.microsoft.com)
.NET Framework 終了のお知らせ
Coreへ移行できないドカタは永遠に4.xに取り残されることが決定したようだ
760:デフォルトの名無しさん
19/05/07 08:55:31.55 H2EGG+st0.net
>>748
すげーな。20年以降毎年バージョン上がる予定か
2020 .net5
2021 .net6
2022 .net7
2023 .net8
.net4で停滞した10年とは一体
761:デフォルトの名無しさん
19/05/07 08:58:10.52 Q8AOfbVkd.net
Java interoperabilityって何なんだよ…
762:デフォルトの名無しさん
19/05/07 09:30:59.37 n4vre8LhM.net
>>748
出来損ないは過去に葬った方が世の中のためだぁ
763:デフォルトの名無しさん
19/05/07 10:21:58.95 vw5zJnlq0.net
バージョンを頻繁に上げるのは、
成熟していないってことでは?
764:デフォルトの名無しさん
19/05/07 11:33:46.06 4Mlb2ms50.net
FrameworkからCoreに移行できないのはどういう場合ですか?
765:デフォルトの名無しさん
19/05/07 11:59:10.66 25JpTCOf0.net
え、winformはどうなるの??
766:デフォルトの名無しさん
19/05/07 12:06:04.60 b+Ix+FO0a.net
最近のmicrosoftかなり攻めてるな
767:デフォルトの名無しさん
19/05/07 13:10:26.59 eYh/lhy30.net
.net frameworkからcoreなんてどこかちょろっといじったらいいだけじゃないの?
VB6からVB.netほどの変化はないんだろ?
768:デフォルトの名無しさん
19/05/07 13:37:50.62 9iRY6hHtM.net
>>753
そんなワケのわからんもん使こて何かあったらどないすんねん!責任取れるんかい!
わりとこれ
769:デフォルトの名無しさん
19/05/07 13:46:35.16 9CwYXDcE0.net
別に移行しなくてもいいですけど保守には特別料金いただきまっせ
770:デフォルトの名無しさん
19/05/07 13:47:55.21 Q8AOfbVkd.net
>>756
Web FormsはほぼUI作り直し
771:デフォルトの名無しさん
19/05/07 13:50:03.67 9iRY6hHtM.net
あと技術的な最大の障害はWebFormsだろう
WebFormsは.NET Coreではサポートされてないし、される気配もない
既存資産の移行もさることながら、.NETドカタはWebForms頼りで標準的なWeb開発のスキルを持たない奴も多い
彼らはWebアプリケーションの開発が不可能になり、路頭に迷うことになる
772:デフォルトの名無しさん
19/05/07 17:00:19.52 1tK/VkfG0.net
すまんが、Stream型って前の方だけメモリを解放するとか器用なことは出来ないの?
773:デフォルトの名無しさん
19/05/07 19:17:09.01 9iRY6hHtM.net
>>761
意味不明
お前の考えはどうでもいいから具体的に何が問題になっているのか、もしくは何が気になっているのか書け
774:デフォルトの名無しさん
19/05/07 19:23:08.04 VnMa5nf90.net
Stream型ってなんか確保してんの?
775:デフォルトの名無しさん
19/05/07 19:29:05.20 n4vre8LhM.net
Streamの実装によるだろ
776:デフォルトの名無しさん
19/05/07 21:03:30.48 FJj2rymy0.net
>>761
Streamクラスは抽象クラスだけど、MemoryStreamクラスを想定してるのかな。
何となくMemoryMappedFileクラスが要望に合ってるような気がする。
777:デフォルトの名無しさん
19/05/08 21:27:25.44 4kxgmlsqa.net
C#でwindowsPCのマイク音量設定を設けたアプリを作りたいんですが情報がいまいち出てきません
今現在どのような方法が推奨として使われているのでしょうか
778:デフォルトの名無しさん
19/05/08 21:33:29.28 UPhx/0uCM.net
おとなしくNAudioと言うのを使いなさい
779:デフォルトの名無しさん
19/05/09 20:00:37.76 25KQckNoa.net
>>767
ありがとうございます
調べてみます!
780:デフォルトの名無しさん
19/05/10 07:09:33.41 8h0VP8xa0.net
RPgエディタみたいなタイルマップを配置する機能を作る場合、画像を配置するフォームは何が適切でしょうか?
前にも聞いた気がするんですが、レスを忘れてしまって、、、
781:デフォルトの名無しさん
19/05/10 07:45:25.60 guXEw79XM.net
モデリングソフトに決まってんじゃん
2Dでもプラグインあるからプロならモデリングソフト
個人製作ならエクセルで代用しとけ
ってスレ違うやん
782:デフォルトの名無しさん
19/05/10 07:46:35.31 guXEw79XM.net
いや、すまん、質問内容取り違えてたw
ピクチャーボックスで
783:デフォルトの名無しさん
19/05/10 08:14:45.00 uov0WiW1d.net
>>769
Panelを継承したカスタムコントロールのOnPaint内で描画する事だな
784:デフォルトの名無しさん
19/05/10 12:26:08.70 8h0VP8xa0.net
>>771
ピクチャボックスですね
毎回忘れちゃうです
785:デフォルトの名無しさん
19/05/10 17:41:55.34 ZtjlRqB/0.net
質問するだけで自分でやらないから忘れるんだよ
>>772
継承させる意味が分からないしOnPaintならPanelでなくてもいい
786:デフォルトの名無しさん
19/05/10 18:53:28.94 8h0VP8xa0.net
visual studioのhddへのアクセスは制限できますか?
激重です
SSDにしろって話ですけどね
787:デフォルトの名無しさん
19/05/10 19:04:05.18 8h0VP8xa0.net
>>774
picturebox自体を何個も並べるんですか?
picturebox1つの中に複数の画像を並べるですか?
788:デフォルトの名無しさん
19/05/10 19:28:03.03 tfYAY6pzM.net
>>776
どっちでもいいよ
どのみち今の君のレベルで作ってもまともに使い物になるようなものにはならないから、うだうだ考えるより手の届く範囲で経験値を積んだ方がいい
行き詰まる頃にはだいぶレベルが上がってるはずだから、また作り直す
三周目くらいになればまともに作れるようになってるよ
789:デフォルトの名無しさん
19/05/10 19:30:30.41 uRQk/IXU0.net
3週でいけるのだろうか?
790:デフォルトの名無しさん
19/05/11 12:14:17.95 kDrnBD/r0.net
低レベルな質問で申し訳ないのですが、循環バッファって凄い便利だから
全ての配列は循環バッファで実装すればいいと思うのですが、デメリットはあるんでしょうか?
Delete
Insert
Add
が全てO(1)で出来るって凄くないですか?
791:デフォルトの名無しさん
19/05/11 12:25:39.14 E3skkYkSM.net
>>779
俺は必要になったことないよ
どんなときにいいの?
792:デフォルトの名無しさん
19/05/11 12:30:42.30 qR2J3ArJM.net
下手の考えなんとかつってなー
高レベルになってから言ってくれ
793:デフォルトの名無しさん
19/05/11 12:39:31.51 td9YBJ3L0.net
>>779
>***全ての配列は***循環バッファで実装
配列のままの方が良い場合もあるが
そうしたいならそうすればいい
ただし配列以外の構造が必要になるケースでは使えないぞ
794:デフォルトの名無しさん
19/05/11 12:56:33.31 4CcYolMU0.net
>>779
トークンリングとイーサネットの
違いを理解してから再度質問を
795:デフォルトの名無しさん
19/05/11 12:59:31.48 aDjFJI/sa.net
>>779
Addは、reallocationを考慮しても償却定数時間で出来そうだが
Delete, InsertがO(1)だというソースをくれ、「末尾」という指定がない以上任意位置だよな?
途中要素をDelete,Insertしたら要素の詰め直しが必要でO(N)になると思うんだが
O(N)になるならList<T>で十分という話になる
796:デフォルトの名無しさん
19/05/11 13:05:46.01 DR+jkhoz0.net
続きはこちらでどうぞ
【O(n)】計算量の評価方法について【O(log n)】
スレリンク(tech板)
797:デフォルトの名無しさん
19/05/11 13:06:24.02 aDjFJI/sa.net
考え直したらQueueやStackのことを言っている気がしてきた
それらのデータ構造がもうあるんだからそれ使えば良いんじゃね
798:デフォルトの名無しさん
19/05/11 15:39:49.17 8cYUuN//0.net
すべての配列は~というのが考え方が
そもそも乱暴で
目的に合わせてデータ構造を選ぶものじゃ
799:デフォルトの名無しさん
19/05/11 16:14:40.10 MBpEq5nf0.net
Visual C#で電卓を作ってます。
ある数字ボタンをクリックしたとき、(Button)sender).TextでTextran欄の文字を取得できますが
クリックではなく、キーボード入力で同様にしたいのですが、どうすればできますか?
800:デフォルトの名無しさん
19/05/11 16:26:29.83 VR7g318H0.net
>>788
KeyPressやKeyDownなどのイベント
ただし該当するコントロールにFocusされてないと反応しないのでフォームで全部受けるようにするとはかどる
URLリンク(dobon.net)
801:デフォルトの名無しさん
19/05/11 17:24:06.36 qy13k0f30.net
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\Users\◎◎\Desktop\volly.gif");
this.pictureBox1.Image = bmp;
パスについてなのですが、相対パスは使えないということがあるんでしょうか。相対パスだとパラメータが違うというエラーが出ます。
フォームアプリケーションなので、form1.csにコードを書いています
form1.cs
img(フォルダ)
└volly.gif
という構造になっています
しかし、img\volly.gif
だとエラーになります
何が悪いでしょうか。
802:デフォルトの名無しさん
19/05/11 17:26:35.03 Q2bK8ZXg0.net
>>790
.\img\volly.gifじゃね?
803:デフォルトの名無しさん
19/05/11 17:31:33.00 vfaLavs00.net
実行時のカレントフォルダーが合ってないと思う
804:デフォルトの名無しさん
19/05/11 17:56:52.10 lpN0Lm9o0.net
デバッガでブレイクしてイミディエイトウィンドウとかで
Environment.CurrentDirectory確認すると良いよ
805:デフォルトの名無しさん
19/05/11 18:25:33.06 dxU2Wm5sa.net
>>790
相対パスとかの以前の問題
実際の環境にimgフォルダが作られているか?
*.exeと言った実行ファイルのある場所を見てみたらいい
多分作られてないしその�
806:�にgifファイルも作られてない
807:デフォルトの名無しさん
19/05/11 18:56:38.28 VR7g318H0.net
>>790
>>794を参考にするべきだけどパスの位置を確認したいのなら読み込む前のところで
MessageBox.Show(System.IO.Path.GetFullPath(@"img\volly.gif"));//指定しようとしているパスを入れる
とでも入れとけばその相対パスがどこを指しているのか絶対パスが表示される
相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる
808:デフォルトの名無しさん
19/05/11 19:09:02.07 vfaLavs00.net
>>795
> 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる
これは正しくないよ。その時のカレントフォルダが基準。
何もしていなければ多くの場合は実行ファイルの場所と一致するから、結果としてそうなることが多いけど。
809:デフォルトの名無しさん
19/05/11 19:52:49.57 VR7g318H0.net
>>796
それならexeと同じディレクトリのところから使うには
System.IO.Path.GetDirectoryName(Application.ExecutablePath)とか使って必ず絶対パスに直さないと危ないってことか
810:デフォルトの名無しさん
19/05/12 10:29:51.59 zQc98Y8H0.net
Console.WriteLine(System.Environment.CurrentDirectory);
としても出力には何も出てこないのですか?
出てこないです
作業フォルダっていうのはform1.csとは別のファイルのことなんですね
811:デフォルトの名無しさん
19/05/12 10:48:00.86 NzWVi3Qm0.net
console覗くか
traceあたりに出力しないとでは
812:デフォルトの名無しさん
19/05/12 10:52:27.58 zQc98Y8H0.net
おっ いけました
'2d_engine.exe' (CLR v4.0.30319: 2d_engine.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
これで正しいのかわからないですが、なんで実行ファイルがこんな場所にあるんでしょうか。プロジェクト内にあるのかと思ってましたが
813:デフォルトの名無しさん
19/05/12 10:53:02.25 M17KJIhd0.net
>>798
WinFormsアプリはそのままではConsoleを使用できない
Consoleを自分で準備すれば使えるが、通常は使わないかな
フォルダ(≒ディレクトリ)とファイルは違うぞ
814:デフォルトの名無しさん
19/05/12 11:02:52.23 NzWVi3Qm0.net
謎は解けた
815:デフォルトの名無しさん
19/05/12 11:03:02.94 PIRDu/CH0.net
>>800
その絶対パスは実行ファイルじゃない
その表示されているところにConsole.WriteLineで書き込んだ内容出てくるはず
816:デフォルトの名無しさん
19/05/12 11:04:19.53 JwWGS0EoM.net
空のコンソールアプリ作ってそこで実行して
817:デフォルトの名無しさん
19/05/12 11:06:21.31 JwWGS0EoM.net
そのgifファイルは実行ファイルが作られた場所に自動でコピーされてないので
コピーされるようにgifファイルの設定帰るしかない
818:デフォルトの名無しさん
19/05/12 11:08:55.17 M17KJIhd0.net
>>800
勘違いしてる。Console使わず、
MessageBox.Show( System.Environment.CurrentDirectory );
ってやってみてよ。
819:デフォルトの名無しさん
19/05/12 11:35:01.56 1UlYWsgm0.net
>>800
カレントディレクトリはexeのあるディレクトリとは別物だからです
System.AppDomain.CurrentDomain.BaseDirectory
を使ってください
820:デフォルトの名無しさん
19/05/12 11:42:27.50 Zs5BDDrj0.net
AllocConsole() してみなされ
821:デフォルトの名無しさん
19/05/12 11:46:33.54 7nn+3/Jt0.net
>>800
プログラムの実行ファイルがある場所とは別に、プログラムの実行時に「どのフォルダでプログラムを実行するか」という概念があるのは分かる?
822:デフォルトの名無しさん
19/05/12 11:49:29.62 PIRDu/CH0.net
先生多すぎて混乱してそうw
823:デフォルトの名無しさん
19/05/12 13:55:38.46 zQc98Y8H0.net
混乱してるんで一度整理します
824:デフォルトの名無しさん
19/05/12 14:13:47.11 PIRDu/CH0.net
そもそもカレントディレクトリを表示させる必要があるのか?
画像をPictureBoxに表示するのが目的じゃなかったのか
825:デフォルトの名無しさん
19/05/12 15:18:28.27 zQc98Y8H0.net
そうなんですが、そのために相対パスを設定したいんです
絶対パスでも別に不自由しないですが、ソフトを作るときは相対パスも使う�
826:ニ思うので
827:デフォルトの名無しさん
19/05/12 15:40:46.00 Q+XtJRAz0.net
>>790
VisualStudioでF5実行やデバッグをすると(何も設定を変えてなければ)ビルド出力先がカレントディレクトリになる
相対パスでエラーになる原因はビルド出力先にimg\volly.gifが存在しないから
なのでimg\volly.gifをビルド出力先にコピーしてやれば相対パスで読み込めるようになる
プロジェクトエクスプローラーでimg\volly.gifを右クリックしてプロパティを開いて
「ビルド時のアクション」を「なし」に変更
「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更
これでビルドすると出力先フォルダにimg\volly.gifがコピーされるようになる
828:デフォルトの名無しさん
19/05/12 15:41:40.00 CayLEbz10.net
>>813
実は業務ではカレントディレクトリをあてにした動作はさせない
なぜなら制御できないから
なので相対パスをプログラムで取得したら
自分が基準とするディレクトリパスと自力で連結させて絶対パスにして使う
829:デフォルトの名無しさん
19/05/12 15:43:12.88 Q+XtJRAz0.net
画像ファイルがたくさんあって1こ1こ設定するのがめんどくさい場合は
imgフォルダを右クリックして同じようにコピーの設定をする
そうすれば1つの設定でフォルダごとまるごとコピーしてくれる
830:デフォルトの名無しさん
19/05/12 15:54:06.76 0iYfvooEa.net
まあ、そもそも特に理由がなければ画像ファイルはリソースに突っ込むべきだね。
どうしても生の画像ファイルを使いたいならソリューションエクスプローラーからプロジェクトに追加して
プロパティウィンドウの「出力ディレクトリにコピー」の値を「常にコピーする」にすれば
ビルトすると自動的に実行ファイルと同じディレクトリにコピーされるようになる。
ディレクトリの階層を作りたいならソリューションエクスプローラ上で階層を作れば
それがそのまま反映されてコピーされる。
実行ファイルのディレクトリはこれで
URLリンク(docs.microsoft.com)
831:デフォルトの名無しさん
19/05/12 16:00:55.91 xH15WcK+a.net
OpenFileDialogなどを使うだけでカレントディレクトリは変わるし
EXEのショートカット経由で起動する場合は任意のカレントディレクトリ位置に出来るし
他プロセスからWorkingDirectory設定無しで起動される場合も考えたりすると
プログラム中で内部的に相対パスを保持するのは構わないけど
IO系APIを呼び出す時は、AppDomain.BaseDirectoryなどと結合して絶対パスにしてから渡したほうがいい
832:デフォルトの名無しさん
19/05/12 16:17:07.77 zQc98Y8H0.net
なるほど
自分で絶対パスを1つ決めて、そこを起点にすると
833:デフォルトの名無しさん
19/05/12 17:07:03.34 zQc98Y8H0.net
関係ないんですけど、コードってどこに保存してますか?
普通にテキストエディタに保存してますけど
834:デフォルトの名無しさん
19/05/12 17:15:13.31 Zs5BDDrj0.net
大事な物は心の中に
835:デフォルトの名無しさん
19/05/12 17:22:08.37 O1RPDIWFM.net
>>820
一般的にはGitを使ってGitHubで管理する
だけど今の君のレベルではそんなのは必要ない
今の君のレベルで書いたコードなんて一ヶ月後にはゴミであり、大切に保存する価値などない
一ヶ月後のレベルの上がった君から見ればゴミだという意味であり、決して悪い意味じゃないから勘違いするなよ
836:デフォルトの名無しさん
19/05/12 17:25:13.38 zQc98Y8H0.net
自分の環境の場合、プロジェクトフォルダ\bin\debug\hoge.exe
という場所に実行ファイルが作られるようです
Cフォルダの直下あたりに作られるという説明がされちえますが、何か間違ってますかね
//カレントディレクトリの取得
MessageBox.Show(System.IO.Directory.GetCurrentDirectory());
場所ってのは自動的に決まる感じですか
837:デフォルトの名無しさん
19/05/12 18:06:37.88 hmzYcUWua.net
>>823
日本語で
何を言ってるのかさっぱり分からんよマジで
838:デフォルトの名無しさん
19/05/12 18:42:19.48 Mxa5Iz6jd.net
>>822
gitサーバーはいろいろ使われてるのにGitHubが一般的は言いすぎだろw
839:デフォルトの名無しさん
19/05/12 18:49:55.29 JwWGS0EoM.net
この人はソースをテキストエディタに保存していると言ってるから
iOS使いなんだろうなと思う
840:デフォルトの名無しさん
19/05/12 19:28:54.08 eC5ErjVyd.net
壮大な計画立てて時間だけがかかって何も完成させられない典型的な例
841:デフォルトの名無しさん
19/05/12 19:36:30.99 zQc98Y8H0.net
すみません
がんばります
842:デフォルトの名無しさん
19/05/12 22:05:40.63 TmkC4DiT0.net
LINQ勉強しててよくわかんないんですけど範囲変数ってあれ事前に宣言しなくていいんですか?
マイクロソフトのサンプルとか見ても例えばselect score in scoresとか出てきてscoreどこから出てきたってなるんですけど
全体的な印象ですけど、SQLはちょろっとかじったので列名無いのにSQLっぽく書いてるLINQってなんかしっくりこないんですよね……
843:デフォルトの名無しさん
19/05/12 22:31:12.34 RcOwQ/d80.net
>>829
Linqはクエリ式よりメソッド構文の方がとっつきやすい。
クエリ式はSQLに似てるけど、C#の文法に照らすと異質だしな
scores.Select(score => ・・・);
scoreはどこから出てきたの?ってことならまずはラムダ式からじゃないかな
844:デフォルトの名無しさん
19/05/12 22:31:33.06 5S2KiOuR0.net
まずLINQとクエリ構文は別物だぞ
> select score in scores
select句はクエリ構文の最後に抽出するものを指定するんだからこんなのはあり得ない
select句じゃなくてfrom句だろう
scoreはそのクエリ構文内で使うローカル変数的なものなんだからクエリ構文内で出てくるのが当たり前
列名が無いってのは単に数値の配列とか相手にしてるからじゃね
SQLは二次元相手にしか使わないがLINQ/クエリ構文は1次元相手にも使えるからな
scoresがclass Score { public string Name; public int Value; }の配列とかなら
from score in scores
select score.Value
みたいに「列名」が出てくる
あと重要なことだが、クエリ構文は使いどころがあんまり無い
基本的にLINQには拡張メソッドを使う
845:デフォルトの名無しさん
19/05/12 22:32:12.36 tDx5/mlf0.net
>>829
メソッド式使えよ
846:デフォルトの名無しさん
19/05/12 22:33:30.63 tDx5/mlf0.net
SQLでもテーブルの別名使ったりするやろ
847:入門者
19/05/13 07:59:49.56 W1wujo120.net
URLリンク(ideone.com)
独習C#のコードなんですが170行目のshapes[i].Nameは何故実行出来てるのでしょうか?
Nameプロパティには何も記述がないのですが・・
848:デフォルトの名無しさん
19/05/13 08:25:11.57 mnyzhKg9a.net
>>834
URLリンク(docs.microsoft.com)
849:デフォルトの名無しさん
19/05/13 08:29:59.30 V/EVdZRD0.net
>>834
それを学ぶのがその章の目的じゃないの?
Nameプロパティの定義は71行目
163行目のshapes[0].Nameは引数で指定された"right"がセットされる。
164行目のshapes[1].Nameは省略時引数により139行目のコンストラクタを経由して"rectangle"がセットされる。
165行目のshapes[2].Nameは省略時引数により134行目のコンストラクタを経由して"rectangle"がセットされる。
166行目のshapes[3].Nameは省略時引数により106行目のコンストラクタを経由して"trizngle"がセットされる。
850:入門者
19/05/13 08:34:33.58 W1wujo120.net
>>836
そうなのですが
でもvalueで代入してないのに何故Nameプロパティが機能してるのか分からなくて…
setとgetの中身を記述しなくてもプロパティは機能するのですか?
851:デフォルトの名無しさん
19/05/13 08:52:41.32 VAfV6Qs50.net
public string Hoge { get; set; }
は
private string _Hoge;
public string Hoge { get { return this._Hoge; } set { this._Hoge = value; } }
の省略構文みたいな感じになる
(実際にはこの_HogeはC#からアクセスできない名前にコンパイルされる)
852:デフォルトの名無しさん
19/05/13 08:57:28.04 WhpQbL/L0.net
>>837
string Hoge { get; set; } は自動実装プロパティと呼ばれるもので、
内容は>>838の通り。
853:デフォルトの名無しさん
19/05/13 10:05:53.21 yzhNtOt8H.net
ありがとうございました
>>831
URLリンク(docs.microsoft.com)
そうですねfromの間違いでした失礼しました
「scoreはそのクエリ構文内で使うローカル変数的なもの」ってのは割としっくり来ました
「LINQ/クエリ構文は1次元相手にも使える」SQLとは全くの別物と考えて頭からっぽにして勉強しなおしたほうがよさそうですね
854:デフォルトの名無しさん
19/05/13 15:49:43.81 d2gOVbtC0.net
vsを軽くするセッティングはないでしょうか?
重くなる原因はhddへのアクセスが100になってしまうからです
SSDはないです
855:デフォルトの名無しさん
19/05/13 16:02:30.23 UKQBojaO0.net
object 型の変数 x に int 型にキャストできる型(short 型や byte 型など)の値が代入されているときに
その値を int 型にキャストしたいのですが、(int)x とすると InvalidCastException が投げられてしまいます。
x に代入されている値が例えば short 型だと分かっているなら (int)(short)x でうまくいくのですが、
この方法だといちいち値の型を調べる必要があるのでもっとスマートな方法があれば教えていただきたいです。
一応自分でも考えてみたところ int.Parse(x.ToString()) なら x の型によらずうまくいったのですが、
値の変換をするだけなのに文字列を経由するのはすごく無駄なことをしているような気がします。
よろしくお願いいたします。
856:デフォルトの名無しさん
19/05/13 16:05:08.31 d2gOVbtC0.net
private void Form1_Load(object sender, EventArgs e)
{
var but = new System.Windows.Forms.Button();
but.Name = "button1";
but.Text = "押せ";
but.Location = new Point(0, 0);
but.Size = new System.Drawing.Size(80, 20);
Controls.Add(but);
}
コードでコントロールを追加したいのですが、ボタンは追加されませんでした
エラーでも出てくれればいいんですが、エラーは出ません
エラーは出ないけど、思い通りに動かない場合、何をヒントにしたらいいでしょうか
857:デフォルトの名無しさん
19/05/13 16:07:12.88 XGLfyuuud.net
ググりゃいくらでも記事出てくるやんけ
そいつらは試したの?
自身の環境も書かない、何を試したかも書かない、知識不足なのに勝手に要因を決めつける
初めて質問するならまだしも散々してきといてそれ?
858:デフォルトの名無しさん
19/05/13 16:08:41.09 XGLfyuuud.net
>>844
841に対して
859:デフォルトの名無しさん
19/05/13 16:14:20.97 d2gOVbtC0.net
出てきました
場所が悪かったようです
ごめんなさい
860:デフォルトの名無しさん
19/05/13 16:14:45.92 UKQBojaO0.net
>>843
そのコードをコピペして試してみたら私の方では問題なく表示されました。
そちらでうまくいかない原因は
・Form1_Load が呼び出されていない
・追加したボタンの上に別のコントロールが重なってしまっている
あたりではないでしょうか。
とりあえず Form1_Load が呼び出されているかどうかを確認するために
Form1_Load の最後に
MessageBox.Show("呼び出されてるよ"); を追加してみて、
メッセージボックスが表示されるかどうかを確認されてみてはいかがでしょうか。
861:デフォルトの名無しさん
19/05/13 16:15:55.94 d2gOVbtC0.net
>>844
問題はhddへのアクセスです
これは公式のサイトでは、SSDへの交換を推奨しています
それ以外の手段はないかなと思って質問しました
862:デフォルトの名無しさん
19/05/13 16:16:41.14 d2gOVbtC0.net
>>847
ありがとうございます
位置が0 0だと左側に隠れてしまうようでした
863:デフォルトの名無しさん
19/05/13 16:23:36.93 UKQBojaO0.net
>>849
解決したようでよかったです。
私も勉強中の身なのでお互い頑張りましょう。
864:デフォルトの名無しさん
19/05/13 16:31:17.78 fb9Hu3lu0.net
ついでに聞きたいんだけど、このボタンの描画ってUIスレッドで実行されることは保証されてるの?
865:デフォルトの名無しさん
19/05/13 16:34:35.11 VAfV6Qs50.net
>>842
Convert.ToInt32
>>851
それがUIスレッドの仕事なんだけど、何を心配してるの?
866:デフォルトの名無しさん
19/05/13 16:51:55.46 UKQBojaO0.net
>>852
まさに探していたものです!
最悪の場合、型ごとに場合分けしてキャストするメソッドでも
作ろうかと思っていたのですが、実にスッキリ解決できました。
どうもありがとうございました。
867:デフォルトの名無しさん
19/05/13 17:46:32.42 W1wujo120.net
>>838-839
詳しくありがとうございます。
前の章にも書いてありました。自分の勉強不足でした…
868:デフォルトの名無しさん
19/05/13 18:45:40.09 cAHvDA7yF.net
PCからのサウンド出力をイヤホンが刺さっている刺さっていないに関わらず、内部スピーカーかイヤホンか選択して出すにはどうしたらいいでしょう
NAudioを使っていろいろ試してるんですがうまくいきません
OS Windows10
サウンドデバイスがSpeakers/Headphones Realtek
だとサウンドデバイスがスピーカーとヘッドホンに分かれていませんが、これだと無理なのでしょうか
869:デフォルトの名無しさん
19/05/13 19:00:08.34 rRpVq2UzM.net
それは間違った機能だから出来たとしても実装するな
イヤホンが刺さってたら絶対イヤホンで出せ
870:デフォルトの名無しさん
19/05/13 20:12:51.62 d2gOVbtC0.net
public Form1()
{
MessageBox.Show("form1");
}
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("form2");
}
フォームアプリについてなんですが、この2つ関数の違いはなんですか?
タイミング的にはform1関数が先なんですが、どう使い分けるんでしょうか?
871:デフォルトの名無しさん
19/05/13 20:22:07.84 zDycstDZa.net
>>857
先に言語の入門本やサイトなどを読むべき
そうすればクラス名と同一名のメソッドには特別な意味があることが分かるし
そのキーワードと一緒にイベント名で検索すれば関連する話題も出てくる
872:デフォルトの名無しさん
19/05/13 20:29:22.69 XGLfyuuud.net
何度も何度も基礎からやれって言われてもずっとやらんのだからもう無理だと思う
こういうのが才能とかセンスみたいなもんなのかね
873:デフォルトの名無しさん
19/05/13 20:29:39.44 d2gOVbtC0.net
調べた限りでは
フォームが作られるときと、作られて読み込まれたとき
という差でしょうか
874:デフォルトの名無しさん
19/05/13 20:38:07.48 jADcqpCya.net
>>855
普通は物理的に切り替えている(ジャックにプラグを差し込むとSP出力が物理的に切断される)から無理でしょうww
恐らくソフトウェアでそれをやってるマシンはないと思うよ
875:デフォルトの名無しさん
19/05/13 20:47:37.18 XlJDR9UI0.net
>>855
その機器のドライバにAPIでも無ければ少なくともC#では無理
ハードウェアの方から調べることでここで質問して答えられるようなものではないと思う
>>860
URLリンク(bbs.wankuma.com)
コンストラクタはクラスで必ずはじめに実行されるもの
イベントメソッドと分けて考えないと
876:デフォルトの名無しさん
19/05/13 21:05:00.08 0/Wah16u0.net
>>857
だから入門用の本を読めと何度も言ってんだろうが
877:デフォルトの名無しさん
19/05/13 21:38:52.34 ZJ4TG7EAa.net
>>856>>861>>862
ありがとうございます
無理ですか。。
Audio Switcherなるものがあるのでソフトウェアからの制御もなんとか出来るかと思ったのですが
878:デフォルトの名無しさん
19/05/13 22:32:05.56 jADcqpCya.net
>>864
ハードウェア的にスプリッターを使ってライン出力かヘッドフォン出力を
二股で取り出せるようにする方が賢明でしょうね
100均で売ってるよ
879:デフォルトの名無しさん
19/05/13 22:38:16.41 lwKqLD9e0.net
>>864
いや昔やったこと有るからできるんだが、昔過ぎてやり方思い出せんわ
Vistaからマスターオーディオの制御ができるAPIがWindows標準になっていて
当時見たソースの跡地だけ発見したわ
URLリンク(www.codeproject.com)
880:デフォルトの名無しさん
19/05/13 22:41:01.01 lwKqLD9e0.net
>>864
ググったらそれらしきもの在ったから、あとは自分で頑張ってくれ
URLリンク(mikeo410.minim.ne.jp)
881:デフォルトの名無しさん
19/05/13 23:02:15.55 jADcqpCya.net
いやいやいやw
URLリンク(ja.wikipedia.org)
↑に説明付きの画像が出てるけど、要するにプラグが差し込まれると物理的にSP出力がオープンになる
構造に普通はなってるんで無理ですw
その辺テレビとかと何も違わないよ
882:デフォルトの名無しさん
19/05/13 23:05:51.31 0pB96hJZ0.net
プラグが刺されるとオープンになるジャック使ってるのは、プラグが刺されたらスピーカーから音が鳴らなくて良いものだけだろ。
テレビでも最近のはそんなジャック使ってないわw
ジャックにプラグ刺されてるか判定してるだけ。
お前はどんなラジカセで書き込みしてるんだ?
883:デフォルトの名無しさん
19/05/13 23:08:05.97 jADcqpCya.net
>>869
確認してから書いた方がいいよ。
特殊な業務用とかフィリップスみたいなところが作ってる超高級品は知らんけど、
大概のTVはそんなもったいぶったことしてないの。する意味がないでしょ