X



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

レス数が1000を超えています。これ以上書き込みはできません。
0001名無C ◆jPpg5.obl6 (ワッチョイ 762c-FuHz)
垢版 |
2019/03/07(木) 06:35:41.12ID:6L3KEJfe0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part93
http://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part141
http://mevius.5ch.net/test/read.cgi/tech/1544839627/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0002デフォルトの名無しさん (ワッチョイ c67c-AP8G)
垢版 |
2019/03/07(木) 10:59:48.33ID:MaxgRiSY0
O2
0007デフォルトの名無しさん (ワッチョイ deef-OG2p)
垢版 |
2019/03/13(水) 04:58:13.27ID:Z4mQGBB00
c#でノードエディターみたいなものはつくれますか
0009デフォルトの名無しさん (オッペケ Src7-EzoF)
垢版 |
2019/03/13(水) 11:26:25.42ID:82TbnNcir
ノードエディタって各ノードのプロパティを接続するけど、GUIはともかく「接続する」というビジュアルスクリプディングの中の動作ってどういう感じになるんだ?

コードを動的に生成してc#で実行する感じかね
0011デフォルトの名無しさん (アウアウウー Sac3-Om/J)
垢版 |
2019/03/13(水) 12:13:36.73ID:9kZ0LY+Wa
この人は自分で調べようとせずに一から十まで人に聞いて
結局何も作れない人だから答えても意味がないぞ
> listviewの使い方について、超初心者向けに解説してるサイトを教えてください
> ファイラを作成しているのですが、ツリービューでPC内のフォルダを検出する方法について、
> ソフト上でファイルにアクセスして、フォルダの中身などを表示したいのですが、まず何のフォームを使えばいいんでしょうか?
> c#でスクリーンショット撮影するソフトは不可能ですか?
> 個々のサンプル通りにゲームを作成中なのですが、paintイベントハンドラってなんでしょうか
> c#のフォームで、タイルマップエディタのようなものを作りたいのですが、どのような情報を調べたらいいでしょうか
前スレから適当に拾ってきたけどこんな有様で何一つ出来ちゃいない
0014デフォルトの名無しさん (ワッチョイ cb7b-o5IL)
垢版 |
2019/03/13(水) 13:58:05.51ID:Jw+SxIpH0
>>12
罵倒レスはやめてくださいってテンプレ読めないんですか?
>>10
C#で「イベントを設定して、処理を設定」は動的にも追加できる
もしくは「つないである(フラグがある)場所に対してだけ処理をする」でもできる
回答してくれた>>13にケンカ売ったんだからけじめ付けてくださいね
0017デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 16:15:05.71ID:zOgp3uDK0
GUI ToolKit(?) だけでも、少なくとも、
WinForm, WPF, Xamarine
があり、それに加えて .Net Core, .Net Standard などなどがある。
めちゃくちゃ分かりにくい。結局どれ使えばいいのか。
0019デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 16:20:48.07ID:zOgp3uDK0
Javaの場合、native コードより遅くなっても、Swingを使っていれば、
本当にほとんど全てのPlatformで動いた。ブラウザの中ですらも。一方、
C#は、起動も起動してからも遅いし、文法やライブラリもVBと似たように
ごちゃごちゃして上に、Multiplatformですらもないようだ。
0021デフォルトの名無しさん (ワッチョイ 730c-B/CD)
垢版 |
2019/03/16(土) 17:24:58.69ID:V0FrEy2e0
>>17-18
AWT、Swing、JavaFX
がありそれに加えてOracleJDK、OpenJDK(Adopt/Zulu/Corretto etc.)、などなどがある。
めちゃくちゃ分かりにくい。結局どれ使えばいいのか。

ををー。SwingじゃAndroidアプリは作れないかい!!?
0022デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 17:40:58.81ID:zOgp3uDK0
>>21
それは、Swing 一択で決まり。美しいし速度面も十分で、完全Multiplatform
で特に欠点が無い。それに、新しい仕様が出てくる速度もゆっくりだし。

それに比べて、C#は全く違う。どんどん仕様が出てくるのに、どれもこれも
汚くて欠点を含む。新しいのが出てきたら、とんでもない欠点を含む。
問題ばかり。
0024デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 19:02:41.34ID:zOgp3uDK0
>>23
でも、C#の方が混乱が大きいように感じる。
.Net 1つにしても、多種類あり、すぐに方針が変わって、誰もよく理解できてない。
ToolKit に関しては、Java だと Swing 一択で問題ないのに、C#は、誰も1つに
絞り込めないでいる。しかも、C#ではMultiplatFormは現実的には無理。
Javaは、ずっと前からMultiplatformだったのと対照的。
0028デフォルトの名無しさん (ワッチョイ 730c-B/CD)
垢版 |
2019/03/16(土) 20:07:13.34ID:V0FrEy2e0
>>24
> .Net 1つにしても、多種類あり、すぐに方針が変わって、誰もよく理解できてない。
最近もOracle JDKの有償化に伴い派生の多い代替の選択に混乱している言語があるようですね

> Java だと Swing 一択で問題ないのに
私がここでWinforms一択で問題ないと宣言することと何も変わりませんね

Sun時代はSwingへの投資をトーンダウンさせるほどJavaFX推しの流れも一時期ありましたが
Oracleに移りJavaFX ScriptからFXMLへの移行などWPFなんぞよりよほど混沌とした変遷を経ています

そしてOracle JDKから分離され公式に格落ちになったかと思われたJavaFXですが
しかし上記にある選択肢の一部で同梱は継続され何よりOpenJFXはまだまだヤル気です
0029デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 20:13:04.84ID:zOgp3uDK0
>>28
そういう問題じゃないんだよ。Javaの場合、Swingなんかは、IDEなしでも
コードから簡単に記述できる設計になっていたのに対し、C#のはそうなって
ないだろ。IDEと共に使う設計になっていて。
だから、初心者はどれを使っていいか分からず迷惑極まりない状態になって
いる。複雑でプログラムをする前に挫折してしまう人もいるだろう。
MSは元々そういう設計をする会社だったけど。
0032デフォルトの名無しさん (ドコグロ MMdf-Cp6o)
垢版 |
2019/03/16(土) 20:38:43.16ID:YxxaJZkyM
まあ従来のIDEについては最近はMS界隈でも否定論が主流になりつつあるけどね
IDEはコーディングとデバッグのためだけのツールでよい、
IDEにコードを自動生成させたくなるような作業があるならフレームワークの設計の方を見直すべき、
というのが今時の流れだよ
0033デフォルトの名無しさん (ワッチョイ 4301-Lc3s)
垢版 |
2019/03/16(土) 20:40:32.57ID:dvZvBBVu0
.Netじゃwindows/mac/linuxのクロスプラットフォームGUIがいつまでたっても作れないから
仕方なくjavaで書くんやで
javaが10数年前にとっくに実現してる事なんだからいい加減追いついてくれー
0034デフォルトの名無しさん (ワッチョイ ff90-TzFu)
垢版 |
2019/03/16(土) 20:44:36.00ID:PNvsIlL90
完全敗北を認めた今ならマイクロソフトがGUI toolkit作るならクロスプラットフォームになるだろうが
winrtの登場の頃はまだmicrosoftは敗北を認めてなかったからクロスプラットフォームにならなくて残念..
0037デフォルトの名無しさん (ワッチョイ 730c-B/CD)
垢版 |
2019/03/16(土) 21:00:58.03ID:V0FrEy2e0
>>29
> そういう問題じゃないんだよ
おや、急に問題がすり替わりましたね

> どんどん仕様が出てくるのに、どれもこれも
> 汚くて欠点を含む。新しいのが出てきたら、とんでもない欠点を含む。

Javaの新しくて汚らしく欠点だらけのJavaFXを忘れてらっしゃるようなので説明を追記したまでですよ
Swingで良いならWinformsで良いとも言わないのが不思議ですね

IDE?
SwingをIDE無しで問題ないというのと同程度にWinformsも問題ないですね
0038デフォルトの名無しさん (ドコグロ MMdf-Cp6o)
垢版 |
2019/03/16(土) 21:01:35.08ID:YxxaJZkyM
>>35
それは否定しないけど、完璧なGUIデザイナ作るのって大変なんだよ
WinFormsのデザイナはVBやDelphiから受け継がれた長年のノウハウの集大成だし、
WPFにいたっては10年開発しても結局ゴミのまま開発終了
今のPC向けGUIアプリの主流は言うまでもなくWebだけど、現代のWebの開発スタイルにフィットするデザイナをMSが開発し始めたとして、
それが使い物になる頃には開発スタイルはすっかり変わっていて時代遅れの廃棄物になってるわけ
従来型のIDEは技術の進化や流行に追いつけなくなってるんだよ
0041デフォルトの名無しさん (ワッチョイ b302-7f+e)
垢版 |
2019/03/17(日) 02:36:23.77ID:k04EM+xl0
>>29
WPFもJavaFXも開発者しか画面デザイン出来ないのが問題になってて、デザイナーに投げられるようにコードから分離する目的で作られたのに。。。

最初から素人用の作りじゃ無い。
0042デフォルトの名無しさん (ワッチョイ bf2d-geq4)
垢版 |
2019/03/17(日) 02:57:55.04ID:XTuejaeR0
多くの人がUIデザインのセンスが無いのに、xxML直書きが主流のせいで更に悪くなってる気はするな
C#に限ったことじゃないけどさ
0045デフォルトの名無しさん (ワッチョイ b302-7f+e)
垢版 |
2019/03/17(日) 15:03:58.84ID:k04EM+xl0
>>43
最初から素人用の作りじゃ無いって書いてるのに、その回答は。。。
0055デフォルトの名無しさん (ワッチョイ 232d-geq4)
垢版 |
2019/03/18(月) 02:32:07.37ID:B+bW3pwA0
DIとグローバル変数おじさんって何が違うのか分からなくなってきたぜ
よく考えたら大して変わんなくないかこれ?
0061デフォルトの名無しさん (アウアウエー Sadf-Cp6o)
垢版 |
2019/03/18(月) 23:04:56.58ID:1F2QIikJa
>>59
全くの別物
WebFormsはWinFormsモドキ
MVCはRuby on Railsモドキ
今始めるなら、英語に抵抗がなければ最新のMVC系フレームワークであるASP.NET Core
英語ダメならオワコンRailsかPHPでもやっとけ
0062 ◆QZaw55cn4c (ワッチョイ 6fe9-h1+v)
垢版 |
2019/03/19(火) 21:52:22.59ID:45LJYysD0
>>61
>英語に抵抗がなければ
というのが、どのくらいのレベルなのか、には興味があります…最近は英語よりも古代語(ラピュタの黒石に刻まれているあんな感じのやつ)のほうに興味があります
ムスカの台詞「読める!読めるぞ!」を私も味わいたいと考えているのです
0063デフォルトの名無しさん (アウアウエー Sadf-FtxA)
垢版 |
2019/03/19(火) 22:16:53.20ID:qnLJux/Ma
プログラミングに限らず技術系の文章の英語なんか普通に受験して大学入った
人間なら誰でも読めるw

英語英語言ってる人は逆にいうとその程度の事で自分を差別化できると思ってる人なんだと
思った方がいいよwww
0065デフォルトの名無しさん (アウアウエー Sadf-D8OU)
垢版 |
2019/03/19(火) 23:42:07.90ID:lT8ihTqWa
読めなくても良いけどさ

堺筋線 -> Sakai muscle
3両目 -> 3 eyes
天下茶屋 -> World Teahouse

これくらいは変だと自分で気付けないと恥ずかしいぞ
0068デフォルトの名無しさん (ワッチョイ de2c-FLCP)
垢版 |
2019/03/22(金) 11:40:01.20ID:pVVdiXqm0
>>66
むしろ何が分からんのか分からんのだが…
class A { }
class B : A { }
クラスAから派生したクラスBがあって
B b = new B();
A a = (A)b; // 暗黙にキャストできるので (A) は不要
B型のインスタンスをA型として扱うこと
0070デフォルトの名無しさん (ワイエディ MM02-VfNx)
垢版 |
2019/03/22(金) 12:12:49.38ID:S3zLmlK0M
数値によって変数を使い分けることに関してわからないことがあるので質問させてください

【以下引用】
int型を慣習的に使用することで、他のデータ型に変換する機会を減らすこともできる。
小さい値を扱うことがわかっている場合は、int型よりもbyte型のような小さい値を格納できる型を使う方がメモリの消費量を減らすことができる。
しかし、宣言される変数の多くはスコープが狭く、メモリ上に存在する期間が短いため、メモリの消費量はあまり重要ではない。


これはつまり、数値を扱う場合の変数は基本的にintを使ったほうがよく、必要があればbyteなどの変数を使ったほうがいいということですか?
それともどんな数値でも変数の使い分けをせず、intを使ったほうがいいということですか?
0073デフォルトの名無しさん (ワッチョイ 6b2d-yExI)
垢版 |
2019/03/22(金) 17:45:07.05ID:piAmWzDj0
ちょっと上で英語の話題があったついでに用語について教えてほしいんだけどさあ
Concurrency = Asynchronous processing
って理解であってるん?
0075デフォルトの名無しさん (ワッチョイ 6b2d-yExI)
垢版 |
2019/03/22(金) 17:58:40.45ID:piAmWzDj0
Concurrency ∈ Asynchronous processing
こんな感じ?
0077デフォルトの名無しさん (ワッチョイ 6b2d-yExI)
垢版 |
2019/03/22(金) 18:19:57.20ID:piAmWzDj0
確かにそうだわ
ただなんかしっくり頭に入らないんで、良い図かなんかないかな
0078デフォルトの名無しさん (ワッチョイ 3aa6-5fhA)
垢版 |
2019/03/23(土) 05:06:26.15ID:RPbAWfs10
SOAP Webサービス(asmx)のC#からの呼び出しで質問なんだが、UserAgentってどうやって設定すればいいの?
ttps://www.ipentec.com/document/csharp-call-soap-web-service
ちなみにここの手順で実装してる
0079デフォルトの名無しさん (ワッチョイ 3aa6-5fhA)
垢版 |
2019/03/23(土) 12:40:40.84ID:RPbAWfs10
soapのUserAgentの追加だけど自己解決したので書いとく
OperationContextScopeにsoapのInnerChannelを渡してOparationContext.Current.OutgoingMessagePropertiesを設定すればよかったみたい
0080デフォルトの名無しさん (ワッチョイ def2-rXtv)
垢版 |
2019/03/23(土) 14:20:50.44ID:xq0oZv2H0
↓こういうデータを保持するためのクラスってなんていうの?EF使わない場合DTOって言わないね?
class Hoge
{
ID { set; get; }

Name { set; get; }

Age { set; get; }

Biethday { set; get; }
}
0093デフォルトの名無しさん (ワッチョイ def2-rXtv)
垢版 |
2019/03/24(日) 18:55:32.16ID:yH9zM0xm0
>>92
そうそう、そういうこと
Parallelで進捗バー増やしてったのに
順調に増えてって正常終了した

TaskbarクラスはStaticでクラスライブラリ(.dll)
なんか理由わかる人いませんか?
0094デフォルトの名無しさん (ワッチョイ 5f0c-rXtv)
垢版 |
2019/03/24(日) 23:49:11.19ID:z21lQS4L0
ソース見てみたらITaskbarList3::SetProgressValue呼んでるだけだし
アプリ内のウィンドウというよりシェルへのアクセスなら
元々UIスレッドで呼ぶ必要ないんじゃねえの

検証してないけど
0095デフォルトの名無しさん (ワッチョイ c6fc-WX4v)
垢版 |
2019/03/25(月) 12:38:16.05ID:M0EtypdC0
ドット絵エディタみたいなのは簡単ですか
0097デフォルトの名無しさん (ワッチョイ 5f7c-PdI2)
垢版 |
2019/03/25(月) 13:14:00.29ID:MuEFgcsw0
>>95
エディタ本体つくるのは簡単
各種画像ファイルフォーマットの読み書きが面倒
0100デフォルトの名無しさん (ワッチョイ c6fc-WX4v)
垢版 |
2019/03/25(月) 16:28:23.69ID:M0EtypdC0
>>97
がんばります
ペイントイベント使うだけですよね
0102デフォルトの名無しさん (ワッチョイ de7b-nyCW)
垢版 |
2019/03/25(月) 22:05:04.34ID:QIzg3qUJ0
>>99
そうだな
https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/advanced/using-image-encoders-and-decoders-in-managed-gdi
>>100
PictureBox使った「絵エディタ」で「ペイントイベント」なんか普通使わない
https://www.atmarkit.co.jp/fdotnet/dotnettips/458picboxdraw/picboxdraw.html
>グラフィックの描画に必要なデータ(例えばラインならその始点と終点の座標など)をすべて保持しておき、
>Paintイベント・ハンドラですべてのグラフィックを再描画できるように常に準備しておく必要があることを意味する。
普通は後半に書かれている「Imageプロパティで指定したビットマップに描画」を使う。そうじゃないと保存するときにも苦労する
0106デフォルトの名無しさん (ワッチョイ ff61-X0yA)
垢版 |
2019/03/26(火) 02:46:28.44ID:fe5vrK8S0
参照やポインタの値は、一般にはUndoすると変化するので、Undo、Redoを
任意回数行った場合には「識別子」として役立たないことになる。
だから、Draw系ツール、3Dモデラ、3D-CADなどではポインタ値だけで
直線の接続先などを識別するのは難しい。だからと言って座標値だけで識別
できるかというとそれはそれで無理がある場合が有る。だからID番号を付ける
必要が出てくるかもしれない。
CADで、点が1万個有る場合に全選択してから Move した場合の Undo 情報は、
1万個に上る、と言ったような問題点も耳にした。
0107デフォルトの名無しさん (ワッチョイ ff61-X0yA)
垢版 |
2019/03/26(火) 02:51:56.51ID:fe5vrK8S0
ツール上では削除しても、内部的には削除せずにメモリ中にずっと残しておけば、
参照やポインタ値は変化することは無い。これを利用する手もあるかもしれない。
ただし、その場合、プログラミング中、オブジェクトを自由に削除できなくなるので、
未来永劫、そのことに気を使い続ける必要がある。
0108デフォルトの名無しさん (オッペケ Sr03-s8oI)
垢版 |
2019/03/26(火) 04:35:48.97ID:6g954Hehr
3Dソフトの操作履歴って入れ替え可能だからな(可能な操作のみだが)
それすらすごい
例えばベンドデフォメーションかけた後にオブジェクト同士をマージ
この操作順を普通に入れ替えられる
操作をフリーズ(固める)しない限りどんな操作でも入れ替え可能

そして上記の履歴操作は機能のうちのほんの一部
0109デフォルトの名無しさん (アウアウエー Sac2-0zLl)
垢版 |
2019/03/26(火) 05:21:06.95ID:Wr7XD3bSa
ボタンを押すと、計算してその結果をリッチテキストボックスに表示する、構造的にはシンプルなイベントを作ろうとしています。

private void button_Click(object sender, EventArgs e)
{
リッチテキストボックス.Text=(見出し);
◆計算◆
リッチテキストボックス.AppendText(ここに計算結果を表示);
}

自分としては見出しを表示→◆計算◆(数分かかります)→計算結果表示と、上から順に処理されることを期待しているのだけど
実際は◆計算◆が終了するまで最初のテキスト「見出し」も表示されないのですがどうしてなのでしょうか?
0110デフォルトの名無しさん (ワッチョイ 9fda-BX86)
垢版 |
2019/03/26(火) 05:23:41.39ID:BYz/7c7n0
連続した削除は統合したり、塗りつぶしは開始点を覚えたり
色々小技もあるので、一概には言えないと思うけどなぁ

本格的に勉強したいなら、paint.net か pinta のソース読むのお勧め
0111デフォルトの名無しさん (ワッチョイ de7b-nyCW)
垢版 |
2019/03/26(火) 06:37:47.03ID:AEstRBha0
>>109
リッチテキストボックス.Text=(見出し);
リッチテキストボックス.Refresh();//これを挿入
◆計算◆
で意図通りになるはず
「どうしてなのか」はよくわからないけど
https://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html
を参考に考えてみるとアプリケーションキューが空になるまで再描画されないからとかでは
0114デフォルトの名無しさん (ワッチョイ 0be7-9VoM)
垢版 |
2019/03/26(火) 10:53:32.84ID:RcQOpHon0
>>109
イベントハンドラーの中で計算しているから、UIスレッドを掴んだままになってる。
非同期処理化すれば解決するが、計算中もUIを触れるから別途対策が必要。ウィンドウかボタンを無効化とか。

private async void button_Click(object sender, EventArgs e)
{
this.Enabled=false;
リッチテキストボックス.Text=(見出し);
await Task.Run( () => ◆計算◆ );
リッチテキストボックス.AppendText(ここに計算結果を表示);
this.Enabled=true;
}
0115デフォルトの名無しさん (ワッチョイ ff61-X0yA)
垢版 |
2019/03/26(火) 10:55:43.23ID:fe5vrK8S0
>>108
速度的な問題点を無視すれば、
編集ソフトでファイルを読み込んだ直後から人間が操作したコマンドの履歴を
全て記録しておいて、ファイルを読み込んだ直後から、最初から最後の1つ手前
まで、その履歴のコマンドを順に再実行するようにすればUndoは実現できる
事は出来る。

この方法だと、操作の途中に重たい処理が挟まっていた場合が問題となる。重たい
処理が行われた場合は、処理の最初と最後でデータをファイルに保存してしまって、
Undoするときはそれを「起点」にする方法も考えられる。ただし、この場合は、
ファイルへの保存に時間がかかる問題が残る。
0116デフォルトの名無しさん (スプッッ Sd13-Mdgt)
垢版 |
2019/03/26(火) 11:34:27.90ID:KoWTp9j7d
簡単ですか?くらいの質問する相手なんだから112が言うような実装で良いと思うけど
高機能にしようと思えばいくらでもできるだろうけど既存のドットエディタ使えば?って気もする
勝手に質問を高機能に寄せてああでもないこうでもない言ってても仕方ないよね
0117デフォルトの名無しさん (ワッチョイ ffe3-dHY2)
垢版 |
2019/03/26(火) 12:05:28.06ID:NEQZ2SJi0
>>116
ゲームの専門家に聞いたんだけど、実はドットエディタは使ってなくて、
1つのファイルに複数のキャラクタ画像をまとめて、普通のPaintソフトの
拡大鏡機能で作っておいて、ゲームプログラムの方で部分的な四角形領域
を座標で指定して複数のキャラクタとして扱っている、と聞いた。
そして、透明部分は、1つの色を「透明色」として扱ってMaskパターン
を作っていると。WindowsのBitBlt系のAPIなら、透明色をそのまま
指定できるタイプのものも確かあったと思うけど。
0118デフォルトの名無しさん (オッペケ Sr03-s8oI)
垢版 |
2019/03/26(火) 12:09:54.76ID:6g954Hehr
>>115
しかし3Dソフトは激重アプリなのにサクサクとundo redoできる
設定では1000回まで戻れるようにしている
しかも全部メモリに管理しているんじゃないだろうか
設計が凄まじいのだろう
0122デフォルトの名無しさん (ワッチョイ ff61-dHY2)
垢版 |
2019/03/26(火) 16:55:27.87ID:fe5vrK8S0
>>118
多分、普段のUndo、Redoはメモリ内のみで行っている。
そして、>>108のように、操作者が順序を入れ替えた場合のみ、
どこかの時点を起点として操作をリプレイするようなことをやってる。
だから後者の場合のみは時間がかかるんじゃないかと思うが、滅多に
やることはないので問題ないと考えられているのではなかろうか?
0123デフォルトの名無しさん (オッペケ Sr03-s8oI)
垢版 |
2019/03/26(火) 17:53:29.15ID:6g954Hehr
>>122
3Dソフトはそもそもディペンデンシーグラフで履歴ノードが自由に繋ぎ直せるし、インプットアウトプットもしまくるから
わざわざファイルに出してることはないはず
そしてそれら膨大な数のノードがリアルタイムで動作したりするからなあ

ほんとどうやったら普通のPCでもそれなりに高速に動くようなあんなシステム作れるんだ

ちなみにスクリプトやAPIでも履歴作れるんだよな
openChank closeChankの間に入れ込んだ操作の履歴を一つにしてくれる
0124デフォルトの名無しさん (ワッチョイ ff61-dHY2)
垢版 |
2019/03/26(火) 18:13:18.89ID:fe5vrK8S0
>>123
履歴のコマンドの順序を入れ替える操作を高速にするアルゴリズム、今、分かった。

1. 操作を変更する時点は、現在の状態からは近いことが多いはず。
2. だから、ツールの内部処理で、現在の状態から小数回 Undoを繰り返せば、その地点にいったん
  戻ることが出来る。
3. そこからは、新しい順番でコマンドを「Replay(再生)」すれば、目的の結果が得られる。
0125デフォルトの名無しさん (ワッチョイ ff61-dHY2)
垢版 |
2019/03/26(火) 18:18:17.85ID:fe5vrK8S0
>>124
・例えば、現在の状態が、ファイル読み込み時点から、1,000回の操作の後だとする。
・現在の状態になる20回前の操作を変更したいとする。その操作は、最初からは980回目である。
・ここで、(1,000回目の)現在の状態から 20回 Undo をすれば、上記の980回目の状態に戻れる。
・この20回くらいの Undo ならば、大して遅くは無いはず。
・出来あがった980回目の状態から、新しいコマンドの列を20回程度繰り返せば、目的のデータが
 完成する。
0129デフォルトの名無しさん (オッペケ Sr03-s8oI)
垢版 |
2019/03/26(火) 19:31:16.28ID:6g954Hehr
あとキャラ一体でこのノード数は当たり前
これが何体もいる上に背景やらエフェクトやら物理演算、アニメーションブレンディングとかも同時にエディタ内でやってる
さらに裏側で動作させてるスクリプトも何百もあるし、APIとかも膨大に動いてる

https://circecharacterworks.files.wordpress.com/2011/11/hypergraph.png
0134デフォルトの名無しさん (ワッチョイ b301-0zLl)
垢版 |
2019/03/27(水) 15:52:07.47ID:gKV0tUQi0
質問させてください。
win10でVisualStudioCommunity2017のC#WPFアプリでデスクトップ常駐ソフトウェアを趣味作成してます。
プログラミングスキルは、あちこちのサンプルソースやQ&Aのコードを参考になんとか期待通りの動作を作り上げてる程度の初心者です。

悩んでいる点は、本体右クリックメニューのチェックボックス付きMenuItemを選択した時にMainWindowクラスにprivate宣言してあるbool変数をトグル動作させているのだけれど、
タスクトレイアイコンの右クリックメニューに用意したチェックボックス付きMenuItemからも同じ事がしたいけど両MenuItemのチェック状態を同期させるにはどの様に作るのが良いのでしょうか?
本体右クリックメニューはMainWindow.xamlの<Window.ContextMenu>で作成、Sourceにproperties:Settings.DefaultをバインドしてClickにswitch切替関数を呼び出す様に設定してます。
タスクトレイアイコン右クリックメニューはMainWindow.csの_Loaded内でSystem.Windows.Forms.ContextMenu/System.Windows.Forms.MenuItemで作成してClickイベントをラムダ式(?)で記述してます。

説明するのに使う用語すらそこら辺から借りてきたもので大変恐縮ですがご指導の程宜しくお願いします。
0136デフォルトの名無しさん (ワッチョイ 6b2d-5HBQ)
垢版 |
2019/03/27(水) 16:24:53.59ID:ewJriyXK0
他のクラスを承継してクラスを作る時、承継元のクラスのコンストラクタを呼ばないようにするのってどうすればいいの?
0137デフォルトの名無しさん (アウアウウー Sa2f-PJDB)
垢版 |
2019/03/27(水) 17:16:29.24ID:/UUA2GqJa
>>134
・本体右クリックメニューの方は、xaml側でMenuItemにx:Nameを付けると.cs側で参照できる
・タスクトレイアイコンの方は、作成したMenuItemをフィールドに保持してあとで参照出来るようにする
として、「switch切替関数」と「Clickイベント」でbool変数をトグルさせた後に
各MenuItemのIsCheckedを設定すればできそう

以下余談
WPFでは内部状態とViewの同期はBindingという仕組みを使えば楽できるんだけど(ただし使いこなせるようになるまでが難しい)
タスクトレイ関係のコントロールが無いからWinForms側を使うしか無くて、結局Viewを直接触ることになるんだな……

>>136
無理
仮にそれが出来たら、継承元のprivate変数が未初期化のままコンストラクタが完了することになって
結局そのインスタンスは使い物にならない
0139デフォルトの名無しさん (ワッチョイ 6b2d-5HBQ)
垢版 |
2019/03/27(水) 19:54:30.82ID:ewJriyXK0
>>137
だめなのかあ・・・・ありがとう
0140デフォルトの名無しさん (ワッチョイ 5f38-lyQy)
垢版 |
2019/03/27(水) 20:06:11.69ID:bis+Aug70
うんだから
振る舞い無くてもPOCOでしょ

普段使いで貧血ドメインクラスなんてわざわざ言わないしな
ただのデータクラスって言ったり
わかる相手にはプレーンオブジェクトとか言うでしょ
コンテキストによってはレコード型と言ったりもするし
0141デフォルトの名無しさん (ワッチョイ 077d-ABW3)
垢版 |
2019/03/27(水) 21:21:06.39ID:LVKAuWEv0
アーキテクチャとか思想で呼び方は変わりそうね
3レイヤーアーキテクチャでアプリケーション層でのドメインモデルからview やjsonのための振る舞いを持たないクラスを俺はviewmodelかdtoとか呼んでるわ
0142デフォルトの名無しさん (ワッチョイ b301-0zLl)
垢版 |
2019/03/27(水) 21:32:05.17ID:gKV0tUQi0
>>137
取り敢えずフラグの切替、想定通りになりました〜(^^
x:Nameを付けた<MenuItem>を「MenuItem other = this.FindName("_AmenboModeMenu") as MenuItem;」で取得しました!
ググってる際中x:Keyなるものも見かけたので追加で調べておこうと思いました。
タスクトレイアイコン側のMenuItemは、元はMainWindow_Loadedイベント内で宣言していたものを「class MainWindow : Window」のフィールド(private)にしました。
これも取り敢えずWindow_Closingイベント内で.Dispose()する様にしたけど既にobject構造体上より上位のNotifyIconを「notify_icon.Dispose();」していたので不要なのかな?
.Dispose()、も少しちゃんと調べようと思います。

余談、ありがとうございました!
何やら理由があってタスクトレイアイコンにはWinFormsのメニューを使うのだと漠然と覚えていた所に
「WPFにタスクトレイ関係のコントロールが無いから」と明快な回答が得られてスッキリしました。
解説サイトの教科書的で読みづらい文章に比べて口語体で語って頂けたことですんなり入ってきました(^^v

さて、次は肝心の中身に取り組まなければ!!
0143デフォルトの名無しさん (アウアウウー Sa2f-PJDB)
垢版 |
2019/03/27(水) 22:04:09.72ID:/UUA2GqJa
>>142
x:Nameを付けたら this._AmenboModeMenu とフィールドとして扱える
インテリセンスが効くし、そのままの型で使えてキャスト不要になるし
.xaml側でx:Nameを変えて.cs側を変え忘れてもコンパイルエラーで気づけるから
.FindName()を経由するよりもフィールドで扱ったほうが楽
0144デフォルトの名無しさん (ワッチョイ b301-0zLl)
垢版 |
2019/03/27(水) 22:13:13.28ID:gKV0tUQi0
>>143
インテリセンスとかキャスト不要とかコンパイルエラーとか、間違いなくそちらの方が良いですね!
体系的知識皆無のコード切り貼りマンの自分では容易には辿り着けない領域・・・
ありがとうございます!早速書き替えてみます!
0145デフォルトの名無しさん (ワッチョイ 4b2d-twBZ)
垢版 |
2019/03/28(木) 01:00:26.73ID:VR7enf9Y0
List<List<T>>型のフィールドを含むオブジェクトのディープコピーを作る方法で、定石みたいなのがあったら教えて!!!
0148デフォルトの名無しさん (ワッチョイ 4b2d-twBZ)
垢版 |
2019/03/28(木) 01:06:25.17ID:VR7enf9Y0
まじか、なんか無駄な作業してるような気もするけどこれは楽ちんだわ
ありがとう!
0157デフォルトの名無しさん (ワッチョイ 9fad-twBZ)
垢版 |
2019/03/29(金) 07:46:13.85ID:Z1iKEAdk0
do
{
ch = (char)Console.Read();
} while (ch == '\n' | ch == '\r');
この文章の意味が分からないのですが改行と入力された文字が等しければってどういう意味でしょうか?
独習C#のコードなんですが…考え込まないで次に進んでも差し支えないですかね
0159デフォルトの名無しさん (ワッチョイ fb02-hx9e)
垢版 |
2019/03/29(金) 08:02:33.20ID:Eeymx9+70
>>157
久しぶりなんで自信ないけど、先頭が改行な文字列(そんな文字列は改行だけ入力された場合だけ)が入力される間ループし続ける処理かな。
逆パターン(改行だけなら終了するループ)なら割とよく作る。
0162デフォルトの名無しさん (ワッチョイ fb02-hx9e)
垢版 |
2019/03/29(金) 08:50:50.31ID:Eeymx9+70
>>160
いあ、ごめん。
ReadLineと勘違いしてた。
Readは1文字入力だ。
例えば

>abc

と入力しても

chには’a’しか入ってこない。

なので

>[Enter]で改行



chに\nが入る。
(OSによっては\rが改行)
0163デフォルトの名無しさん (ワッチョイ 0f2c-injD)
垢版 |
2019/03/29(金) 11:38:47.05ID:Vcbtlc+70
参考までに、漏れは、Ruby で、
ファイルの最後の1バイトが、改行コードかどうか? という処理を作った

CR(復帰、0x0D)、LF(改行、0x0A)
Windows は、CRLF, \r\n
Linux は、LF, \n
古いMac は、CR, \r

last_line = nil

File.foreach( "abc.txt" ){ |line| last_line = line }

p last_line.end_with?( "\n" ) # 末尾が、\n か?
0166デフォルトの名無しさん (アウアウウー Sa0f-f1ke)
垢版 |
2019/03/29(金) 14:02:16.54ID:4Qaz8P7sa
>>164
他のスレにもよく出没するruby気違いだよ。
ところ構わずrubyの話を始め、大した知識もないのに話に首を突っ込んで場を荒らす迷惑もの。
いくら叩いても消えないゴキブリのような存在だよ。
0170デフォルトの名無しさん (ワッチョイ fb02-hx9e)
垢版 |
2019/03/29(金) 15:35:39.49ID:Eeymx9+70
タイトルに書いたところで来るのでNGワードRubyでおk
0173デフォルトの名無しさん (ワッチョイ 9f90-gufL)
垢版 |
2019/03/30(土) 02:56:07.21ID:L65N8b2w0
スコープ外れたとき呼ばれようがGCの時呼ばれようがデストラクタはデストラクタだ。後処理が必要な時使えばいい。
例えば、メモリ動的確保したら後処理として解放する処理が必要だが.NETはGCで勝手にやってくれるし。
他にネイティブのハンドルとかオープンしたらクローズとか。

いつ呼ばれようがただのデストラクタだ
0174デフォルトの名無しさん (ワッチョイ 9fad-tO+B)
垢版 |
2019/03/30(土) 03:04:53.19ID:1YGxKDqg0
IDisporsableに書く処理を2重に書いておいて
using使わずにそのクラスを使われてしまった時の保険とか?
0176デフォルトの名無しさん (ワッチョイ 4f0d-RfjL)
垢版 |
2019/03/30(土) 08:26:04.36ID:nXZ9oX+k0
c++だとコンストラクタで割り込み禁止してデストラクタで割り込み禁止解除することで割り込み禁止解除の忘れを防ぐとか色々便利なんだけどね
呼ばれるタイミングがわからんとなるとクリティカルな処理はできないよね
0178デフォルトの名無しさん (ワッチョイ fb5f-ycr5)
垢版 |
2019/03/30(土) 09:17:58.21ID:MDhvoYYM0
>>176
C#ならIDisposableを実装してusingステートメントで使う
0183デフォルトの名無しさん (ワッチョイ 8bda-buDD)
垢版 |
2019/03/31(日) 14:31:51.70ID:+4KlqcXq0
変数の保存先なのですが、ローカル変数 = スタック、インスタンス実体 = ヒープらしいのですが、
以下のように、クラスに直接登録された変数/インスタンスはどこに保存されるのでしょうか?

class A
{
 int a = 0;
 static string b = "テスト";
 CLS cls = new CLS();
}
0184デフォルトの名無しさん (アウアウウー Sa0f-2xPx)
垢版 |
2019/03/31(日) 15:25:45.85ID:xPUGTMpba
>>183
値型と参照型の区別はついてる?
値型の変数には値型全体を表すためのメモリが割り当てられる
参照型の変数は参照先を示す値(=IntPtr)分だけメモリが割り当てられて、実際のインスタンスはヒープ中に割り当てられる
少し違う話になるけど、配列の場合について、要素が値型か参照型かでの図があったので貼っとく
https://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_005/csharp_abc02.html

例示されたAの場合、
まずbはstaticなのでどこかには確保される、詳しくは俺は知らない
A型のインスタンスは、Aが参照型なのでヒープ中に割り当てられる
aは値型なのでA型インスタンスの中に割り当てられる(=ヒープ)
clsは多分参照型だと思うけど、A型インスタンスの中には参照先を保持する分だけ割り当てられて(=ヒープ)、実体はヒープの別の箇所に割り当てられる

もっともC#だけで完結するコードなら、この辺の事柄は気にしなくてもいいとは思う
P/Invokeやunsafeを触りだしたら必要かもしれない
0190デフォルトの名無しさん (ワッチョイ 4f0d-RfjL)
垢版 |
2019/03/31(日) 21:38:09.85ID:5U3jYzcD0
visual studioってコードの修正案提示してくれたりしてマジすげぇなと驚いてるんだけど最近のideってどれもこんなものなの?
ずっとsakuraとコンパイラで開発してきたから至れり尽くせり感に驚愕してる
0192デフォルトの名無しさん (ワッチョイ fb02-nZHN)
垢版 |
2019/03/31(日) 23:47:55.28ID:qnazkb5e0
FXの自動売買ツールを無料で配布しています。
http://hbgvf.blog.jp
0193デフォルトの名無しさん (ワッチョイ 0f2c-injD)
垢版 |
2019/04/01(月) 05:38:40.41ID:ymg/4x830
>>186
例えば、sqlite3 をダウンロード・解凍して、Ruby から使う場合、
sqlite3.dll を、Ruby内で読み込んで使う。
これは、同一プロセス内でのライブラリのロード

一方、sqlite3.exe を先に起動しておいて、Rubyからプロセス間通信する事もできる

この場合は、別プロセスとなり、sqlite3.exeがサーバー、
データベースへの問い合わせを行う、Rubyがクライアントとなる

つまり、dll・exeの違いは、同一プロセスかどうか
0197デフォルトの名無しさん (オッペケ Sr4f-Xesi)
垢版 |
2019/04/01(月) 21:23:24.28ID:Cg9qg8Y/r
脳みそがrubyでできてるから仕方ないだろ
0198デフォルトの名無しさん (アウアウカー Sacf-62N/)
垢版 |
2019/04/01(月) 22:32:29.56ID:TxZW52uKa
realmとlistboxを連携させたいのだがやり方がよくわかりません
やりたいこととしては
realmからデータを引っ張ってきてlistboxで表示
listboxの操作でrealm内データの削除
です
0210デフォルトの名無しさん (オッペケ Sr4f-Xesi)
垢版 |
2019/04/03(水) 14:47:51.95ID:57e5+lwMr
>>204
それが.Net Coreじゃね?
0214デフォルトの名無しさん (オッペケ Sr4f-Xesi)
垢版 |
2019/04/03(水) 19:57:10.57ID:57e5+lwMr
>>212
へ?フロントフレームワーク好きなの使えばいいじゃん
おまえいつの時代に生きてるんだよ
0217デフォルトの名無しさん (ワッチョイ 8b7b-1RjH)
垢版 |
2019/04/03(水) 20:22:50.49ID:NsKebegy0
もとの質問がスレ違いなのにいつまでやるの
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
0223デフォルトの名無しさん (ワッチョイ b901-nB65)
垢版 |
2019/04/04(木) 02:37:37.19ID:iJ70eOZ40
iPhoneでAppstoreが成功して、カッコ良ければ売れるんだと思い、
ググルプレイが成功して収益管理まで提供したら売れると思ってたら
窓電話は不発、デスクトップでストアアプリ探さないから売り物さえ並ばない。
成功者は金の回りを用意して市場を作った。
MSは市場を作ろうとして壁を作った。
0224デフォルトの名無しさん (ワッチョイ 01dc-iMOx)
垢版 |
2019/04/04(木) 23:45:04.92ID:CMDWj0ay0
C#は、関数の引数は基本的に値渡しということですが、これ本当ですか?
unityで、引数にrefをつけて参照渡ししてるサンプルって見たことがないです。
すごくメモリ効率が悪い気がするのですが・・・
0228デフォルトの名無しさん (ラクペッ MM59-9Thk)
垢版 |
2019/04/05(金) 00:08:41.76ID:8GSOh3MvM
巨大な構造体の場合は値渡しがボトルネックになる場合もなくはない
クラスの場合はどんなにデカかろうが参照しかコピーされないから関係ない
値渡しなのに参照なんですか?とか聞くな
うるせえなそういう仕組みだと思ってろ
0231デフォルトの名無しさん (ワッチョイ ed61-yEdN)
垢版 |
2019/04/05(金) 00:56:02.91ID:UeOvQxG40
インスタンスを設定したがわが保持って置かないと死ぬときもあるしそうでないときもある
ループで生成しまくる処理のときはこちらでインスタンスを管理しないと
表示するたびに生成しまくって
前のは消されてない
ライブラリの中でほじってるらしくて
消そうと思っても消えない
って状態になることも多い
0240デフォルトの名無しさん (ワッチョイ c201-j9UZ)
垢版 |
2019/04/05(金) 22:56:55.47ID:85UtCV7c0
>>238 意味不明な文章ですみません。聞きたい質問は以下のことです。

サブフォームFORM2を作って右上の×で消した時とサブフォームを消してない時は
どのようなコードを書けば判別できますか?
0243デフォルトの名無しさん (ワッチョイ ee7b-O+pl)
垢版 |
2019/04/05(金) 23:14:11.83ID:cVRKM8Bg0
>>240
「右上の×で消した時」はわからないが
フォームがDispose(Close)されているか form2.IsDisposed
フォームが表示されているか form2.Visible
具体的に何が目的かを書いてもらった方が答えやすいと思う
0244デフォルトの名無しさん (アウアウエー Sa8a-r89a)
垢版 |
2019/04/06(土) 02:06:32.31ID:m4qLgJ3pa
>>240
真面目に何言ってるのかさっぱり分からんから、投稿する前に読み手の立場に立って
文章推敲することを覚えた方がいいよ。

これ、プログラミングのスキルより何倍も重要
いやほんと煽りとか抜きに。

Formが閉じられた原因を知りたいなら↓だけど、
それなら普通ググって自己解決してるはずだと思うから違うんだろうね
http://dobon.net/vb/dotnet/form/unloadmode.html
0246デフォルトの名無しさん (ワッチョイ fe0d-AWsO)
垢版 |
2019/04/06(土) 02:55:07.02ID:MT95SofI0
var変数って便利だけど初期化必須だから惜しいなと思うことがある
例えばとりあえず広いスコープで宣言しといて後のfor内とかで使おうとしたときにここはfloatで扱いたいな→結局宣言箇所をfloatに書き直すのか・・・ってなったり
書きながら考えるときの補助として使おうとすることが間違ってると言えばその通りだけどね
0247デフォルトの名無しさん (ワッチョイ 012d-c04X)
垢版 |
2019/04/06(土) 03:20:06.81ID:QWD6tIIM0
非同期処理A内でタスクBを生成した場合について教えてほしいのですが、
Aのスレッドが抜けてしまったり、あるいはAのタスクが終了してしまった場合でもタスクBは生き続けるんですか?
Aの終了とともにBも終了させるようにはできないのでしょうか?
0250240 (ワッチョイ c201-j9UZ)
垢版 |
2019/04/06(土) 10:07:54.08ID:hyh7Xf1q0
>>243 form2.IsDisposed で閉じたかどうか判定できました。ありがとうございました。

文章が分かりにくいみたいですが243みたいな超能力者がレスしてくれれば良いのです。
>>245の説明の通りですが「教えてください」って書いても放置されることが結構あるので神レス243のほうがありがたいです。
0251デフォルトの名無しさん (アウアウウー Sac5-gCYp)
垢版 |
2019/04/06(土) 10:13:25.13ID:12K3yeCTa
>>246
ああ、良くないと思うぞ。
変数が必要になったら想定される範囲でなるべく小さいスコープで宣言して、それで足りなければスコープを見直すか設計そのものを見直すくらいのがいいと思うよ。
0254デフォルトの名無しさん (アウアウウー Sac5-gCYp)
垢版 |
2019/04/06(土) 11:31:41.71ID:ts7XFDpTa
>>250
放置されることが結構あるということは、これまでも質問のしかたが下手だったか、態度が悪かったか、頓珍漢なことをいっていたか、等々、なんらか自分側にも問題があるとは思わなかった?
答えてくれない方が悪い!ではいつまでたっても改善しないし、周りも困らせることになるよ。
0255デフォルトの名無しさん (ワッチョイ fe0d-AWsO)
垢版 |
2019/04/06(土) 15:23:17.78ID:MT95SofI0
マネージャーがまさに自分の視点でしか話をしないから意味を推察するのにめちゃくちゃ苦労してる
しかもマネージャーだから放置も無視もできないしめんどくせぇ
0258デフォルトの名無しさん (ワッチョイ 012d-c04X)
垢版 |
2019/04/06(土) 18:24:20.03ID:QWD6tIIM0
>>248
教えてもらって悪いんだけど、一体どういうことなんだぜ?
0259デフォルトの名無しさん (ラクペッ MM59-XtN3)
垢版 |
2019/04/06(土) 19:26:12.20ID:nnViyGGtM
実現したいならタスクBが走ってるスレッドを殺すしかないが
その場合ILが半端なところで止まってクリーンアップ処理が正常に走らないからリークする
嫌なら249が言ってるような方法でタスクが自発的に止まるしかない
好きにしたらいい
0260250 (ワッチョイ c201-j9UZ)
垢版 |
2019/04/06(土) 20:05:47.05ID:hyh7Xf1q0
>>254 そうじゃなくて、質問して「質問は・・ということなの?」的なレスが返ってきた状況のときに
「そうです。解決方法を教えてください」ってその人にレスしても放置されることが多々あるという経験を書いただけ。
別に質問の大半が放置されたわけではないよ。
あと理系の人が書いた本とかマニュアルは難解でも当方は理解しますし「分かりやすく書けや」とはそれほど思いません。
理解しやすい文章を書けと思う人は経験不足です。
0263デフォルトの名無しさん (ワッチョイ fe0d-AWsO)
垢版 |
2019/04/06(土) 20:28:05.68ID:MT95SofI0
質問の意味を確認される時点でそもそも伝わりにくい文章だと思うけど。
コミュニケーションは相対的なものとはいえ、相手に負担を押し付けるやりとりをしていることに気づいてないのでは。
0264デフォルトの名無しさん (ワッチョイ 7d5f-iE/E)
垢版 |
2019/04/06(土) 20:43:07.38ID:j7WnBgX90
>>260
一緒にしたら失礼。
難解な本は読み手に前提となる知識が足りないから読み難いが、書くべきことはちゃんと書いてある。
あなたのは書くべき情報が欠落していて単に文章として破綻してるだけ。ついでにその後のコミュニケーションも酷過ぎる。
0265250 (ワッチョイ c201-j9UZ)
垢版 |
2019/04/06(土) 20:44:56.97ID:hyh7Xf1q0
240見直したけど
「サブフォームFORM2を作って右上の×で消した時」が分かりにくいかな?
※1 form2 = new Form2();
※2 form2.Show();
「サブフォームFORM2を作って※1表示した後※2にFORM2の右上の位置の×をクリックしてFORM2を閉じた時」

って書かないと駄目だったのかな?でも回答を教えてくれた人居るし分かってほしいな〜
0267デフォルトの名無しさん (スプッッ Sd02-eHKK)
垢版 |
2019/04/06(土) 21:01:04.80ID:Gnot3kBPd
小手先に頼らず全部書け
質問に関係なさそうなところも全部書け
関係ないと断言できるだけ知識があるならそもそも質問は生まれない
だから頭からケツまで全部書け
全部書いたつもりでも情報は足りないんだから小学生に伝えるつもりで書け
0268デフォルトの名無しさん (アウアウエー Sa8a-r89a)
垢版 |
2019/04/06(土) 21:01:50.77ID:J4U0pcz9a
いわゆるバカの壁だねw
彼はたぶん自分の何が問題なのか本気で分かってない。

仕事で取引先とかとメールでやりとりしてる人なら同意すると思うけど、
日本人は案外彼みたいな人が多い。
多いというか、日本人全体を母集団にとるとたぶん90%以上が彼みたいなタイプだw

これは(実は案外昔から指摘されてるんだけど)日本の初等教育に問題があるんだよねw
日本の国語教育は何であんなくだらない文学観賞と子供を嘘つきにする作文に偏重してるのか。

思いっきりスレ違いなのでこの辺で
0269デフォルトの名無しさん (ワッチョイ 6252-gCYp)
垢版 |
2019/04/06(土) 21:01:55.77ID:ZE/404d00
>>260
理系の人が書いている文章は、内容が難解であっても文意は明確で読みやすい。君の文章はそうではない。むしろ逆で、平易なことが上手く伝えられず理解してもらえない。
君が「難解だが上手い文章」を読みやすいということと、他の人が「君の下手な文章」を理解しにくいということはまったく別のことだが、何でそこから他人を経験不足だと断じる結論になるのだろうか?
君の方が、他人とのコミュニケーションについて経験不足なのでは?

他人に理解してほしいというのは自然な欲求だが、相手に労力を求めるのでなく自分が理解される努力をしなよ。
0270250 (ワッチョイ c201-j9UZ)
垢版 |
2019/04/06(土) 21:25:08.15ID:hyh7Xf1q0
>>266-269
要するに、やったことが無いから何故俺がそれをやりたいことがわからないんだね。
でも回答を教えてくれた人居るし・・。
0271デフォルトの名無しさん (ワッチョイ 61e7-YufY)
垢版 |
2019/04/06(土) 21:26:09.76ID:Hw9bu2CQ0
>>240は「右上の×で消した時」が分かる人には引っ掛け問題になってるな
単に「サブフォームが閉じられたかどうかを判別したい」なら問題なかった

初心者スレだから質問者の文章が分かり難くてもある程度はしようがないし
>>240もその範疇だと思うけど、>>250はあり得ない
叩かれまくってるが自業自得だ
0273デフォルトの名無しさん (ワッチョイ 8261-gjr1)
垢版 |
2019/04/06(土) 21:49:22.76ID:l9A0t+NU0
>>260
>質問して「質問は・・ということなの?」
っていうのは、おまいさんの質問文そのままじゃわからないので経験を加味して質問文を解読して少しでも回答できるやつを増やそうとしてくれてるんだよ。
おまいさんの質問文そのままじゃ超絶エスパーがスレに降臨するまで話がすすまないよ。
0274デフォルトの名無しさん (ワッチョイ ee63-9Thk)
垢版 |
2019/04/06(土) 21:50:12.97ID:1moq2C1C0
いろいろな人がいろいろな表現で指摘しているけど、
結局のところのお前が程度が他人とコミュニケーション取るレベルに至ってないって指摘だ

早く人間に達しろゴミクズ
0275デフォルトの名無しさん (ワッチョイ 8201-xk87)
垢版 |
2019/04/06(土) 22:35:24.43ID:YyWMpA9h0
>>270
> 要するに、やったことが無いから何故俺がそれをやりたいことがわからないんだね。
逆、下手に「右上の×で消した時」とか書くからやりたいことがわからないって話
フォームの閉じ方は「右上の×で消す」だけじゃないから知ってる人は特別に「右上の×で消した時」を区別したいのか?とか思うんだよ
>>242-243でも指摘されてるだろ

> でも回答を教えてくれた人居るし・・。
>>243はかなり親切だからいくつかのケースを書いてくれてるけどそれでも
> 具体的に何が目的かを書いてもらった方が答えやすいと思う
って書かれてる意味を考えなよ
0277デフォルトの名無しさん (ワッチョイ c201-j9UZ)
垢版 |
2019/04/06(土) 23:04:06.29ID:hyh7Xf1q0
>>275

>242 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?
242には触れたくなかったけど、こんなこと240に書いてないし242は馬鹿なんだと思う。
それをおかしいと思わない275もどうかなと思う。close()で閉じてもIsDisposedで判別できるし
何で気にするか分からないな。ていうかウィンドウの右上にXが無いのかな?
0280デフォルトの名無しさん (ワッチョイ 69b0-umYY)
垢版 |
2019/04/07(日) 00:36:33.50ID:yNnH+Rdg0
初歩的な質問で申し訳ないのですが、c#のガベージコレクション機能は循環参照状態にあるインスタンスも破棄してくれるのでしょうか?
暫く調べたのものの「リークするから弱参照を使う」「GCに頼っていい」「javaなど一部言語は破棄する」など多くの話があり混乱しています
より専門的な、ガベージコレクションの内部的な仕組みそれ自体を説明しているサイトは私の知識では理解できませんでした

例えばa→b→c←→dという向きで参照しているインスタンスの組み合わせがあったとして、
aからbの参照を切ってもGCで回収されるのはbだけでcとdの組は残り続けるのでしょうか
0281デフォルトの名無しさん (ワッチョイ c201-j9UZ)
垢版 |
2019/04/07(日) 00:37:08.32ID:AJMxYZfA0
でもさぁ、サブフォームをXボタンで閉じた時と閉じてないときの判別方法を聞いてるのに

>242 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?
で選択肢が1個増えて余計ややこしくしてるだけだし

本当に240だけの問題なの?241=242=262の頭に問題は無いの?
0282デフォルトの名無しさん (ワッチョイ ed61-yEdN)
垢版 |
2019/04/07(日) 00:40:32.22ID:Lr+Z70d50
じゃあ、もう一回確認な

サブフォームFORM2を作って右上の×で消した時
どうすれば(どこを調べれば)よいですか?



A=サブフォームFORM2
B=右上の×で消した

で置き換えたとき

Aを作ってBのとき
どうすればよいですか?

って何言ってるのかさっぱりわからないよね?
これで世の中渡っていけると本気で思っているのか?
0286デフォルトの名無しさん (ワッチョイ 6252-gCYp)
垢版 |
2019/04/07(日) 01:00:11.33ID:h90p5IeD0
>>281
いったい何に拘ってるんだ?そこまで自分に非があることを認めたくないのか?
>>241,242で君の説明が理解されなかったのは別に変でもないし頭がおかしいという訳ではないぞ。>>262も攻撃的ではあるが頭がおかしいというのとは違う。

誰も>>241等のレスに無関係に、君の一連のレスに対して、説明が下手であること、態度に問題があること、それについて君がいっこうに理解できていないことを指摘しているだけ。
0289デフォルトの名無しさん (アウアウウー Sac5-dKzD)
垢版 |
2019/04/07(日) 06:41:43.95ID:u8jd6Keja
>>280
GCの方式が参照カウンタ方式というものなら循環参照があると回収されないけど
C#(.NET)は世代別GCという方式だから循環参照があっても未使用なら回収される
> 例えばa→b→c←→dという向きで参照しているインスタンスの組み合わせがあったとして、
> aからbの参照を切ってもGCで回収されるのはbだけでcとdの組は残り続けるのでしょうか
b, c, dが他から参照されていなければ、b, c, dすべて回収される
0290デフォルトの名無しさん (ワッチョイ 8201-xk87)
垢版 |
2019/04/07(日) 07:40:40.19ID:AvqFg2320
>>277
う~ん、引っ込みがつかなくなってるのか本当に初心者で何を指摘されてるのか理解できてないのかよくわからんけどここ初心者用だから初心者として仮定して…
Xボタンでフォームを消すと言うのはどちらかと言うと一般的じゃない(普通のフォームならOk/Cancel/閉じるボタン等を配置するよね)ので「右上の×で消す」と書くとなにか特別なことをしようとしてるのかと思われるの
ただ初心者だとXボタンで消すのが当たり前と思ってる人もいるから確認の為に>>242みたいなことを聞いてるわけ
あとそもそもサブフォームの状態を調べると言うのもあまり一般的じゃない
GUIだとイベントで処理するのが普通だから>>238みたいなことを言われる
0291デフォルトの名無しさん (ワッチョイ 8201-xk87)
垢版 |
2019/04/07(日) 07:58:43.91ID:AvqFg2320
>>280
初歩的な質問じゃない気がするがw
まあこのスレとしては「GCに頼っていい」が正解かな
>>289も書いてるけどGC持ってる最近の言語の実装は世代別(と言ってもたいてい2世代だけど)GCになってるのが多く最終的にはマーク&スイープで回収されるのが一般的なので全部回収されると思ってていい
0293デフォルトの名無しさん (ワッチョイ 617b-xKOO)
垢版 |
2019/04/07(日) 16:38:33.55ID:gLMV6b6F0
Listboxにデータをバインディングするときに、XAMLにBinding記述する方法と、コントロールに名前を付けてコード上からやる方法がありますが、どちらがよいのでしょうか
0295デフォルトの名無しさん (ワッチョイ 2eda-iMOx)
垢版 |
2019/04/07(日) 18:24:40.28ID:bCl1La9L0
GCがちゃんと動いてオブジェクトが解放されたのかは、デストラクタに
Console.WriteLine("解放されますた!");
と書いておくと安心できる。
メモリリーク発生の可能性も減る。
0296デフォルトの名無しさん (ラクペッ MM59-9Thk)
垢版 |
2019/04/07(日) 18:48:15.95ID:zc2PfqGUM
>>295
心の安寧が欲しいなら止めないけど
C#では、パフォーマンスを低下させるため、プログラムの動作に必要がない
ファイナライザを実装すること自体が推奨されないことは、知っておいた方がよい

パフォーマンスが低下するのは、ファイナライザの実装されていると
GC時にファイナライザキューを介してファイナライズが行われるが
このファイナライズを行う際はStop the worldする必要があるためだ

ファイナライザを保険として実装した上で、前述のパフォーマンス低下を避けるには
自分でファイナライザ相当の処理をした上でSuppressFinalizeを呼び出しておく必要がある
この場合、ファイナライザは実行されなくなり、パフォーマンスの低下も起きない
0297デフォルトの名無しさん (アウアウウー Sac5-dKzD)
垢版 |
2019/04/07(日) 18:49:09.04ID:QS/EO+8da
デストラクタにはなるべく頼らないようにしようぜ
デストラクタを記述するにしてもDispose()されたときにGC.SuppressFinalize(this)しようぜ

>>295
出力の有無でメモリリークに気づける可能性はあるが「発生の可能性も減る」について詳しく
0298デフォルトの名無しさん (ワッチョイ c201-j9UZ)
垢版 |
2019/04/07(日) 19:36:38.60ID:AJMxYZfA0
既にスレを荒らした状態になってるから、もうこれで最後にするけど

>>290
の上8行「右上の×で消す」という書き込みは初心者が使うフレーズだから
中〜上級者の俺様は深読みして間違えたと解釈したけど
本物の中上級者でも「右上の×で消す」の意味は「右上の×マークをクリック
して窓を消す」以外ありえません。そういうわけであなたは
初心者でも中〜上級者でもない別の何かです。

初心者の書く「右上の×で消す」の文が不満で何で
「Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?」
何で選択肢が増えるんだよw
プログラムより国語の勉強しないと。
回答側に回りたいなら模範回答できる質問だけにしてください。
0299デフォルトの名無しさん (ワッチョイ 8201-xk87)
垢版 |
2019/04/07(日) 19:41:49.21ID:AvqFg2320
>>298
> 「右上の×で消す」の意味は「右上の×マークをクリックして窓を消す」以外ありえません。
どうしたらこんな頓珍漢なレスができるんだよ…
誰もその意味がおかしいとか言ってるわけじゃないぞw
0300デフォルトの名無しさん (ワッチョイ c201-j9UZ)
垢版 |
2019/04/07(日) 20:15:40.25ID:AJMxYZfA0
>>299 何でイベントのclosedでは駄目かというと、閉じた瞬間の情報が欲しい訳ではないからです。
窓閉じてしばらくして閉じたかどうか知りたいってことなので。なんでそんなこと知りたいんだよ(怒)
って言われても別にいいだろとしか。c#はイベントで処理するからって考えの人にあれこれ
言う義務は俺には無いよ。
0303デフォルトの名無しさん (ワッチョイ 8201-xk87)
垢版 |
2019/04/07(日) 20:37:07.02ID:AvqFg2320
>>300
別に閉じてるかどうかを知りたいことがないわけじゃなくて珍しいって話な
たいていの場合はなにか設計がおかしい可能性が高い
まあ俺に影響あるわけじゃないから好きにすればいいと思うけどw
0304デフォルトの名無しさん (ワッチョイ c201-j9UZ)
垢版 |
2019/04/07(日) 20:56:30.81ID:AJMxYZfA0
>>301
回答は貰ったんだよ。

質問はその後訂正してる。他の上級者は理解して神回答を頂きました。
>>281-285見たら誰が問題か分かる。284に変なレスしてる奴。

C#はイベントだけで処理すると考える学生がイベントのclosedで解決すると思ったら
解決しないから発狂してキチガイとか日本語が変とか難癖つけたんだろ。
0306デフォルトの名無しさん (アウアウウー Sac5-dKzD)
垢版 |
2019/04/07(日) 21:39:33.31ID:QS/EO+8da
>>304
質問内容に >>300 中の「閉じた瞬間の情報が欲しい訳ではないからです。窓閉じてしばらくして閉じたかどうか知りたい」
という内容も書かれていたら、最初から正しいIsDisposedの回答だけが得られたかもしれないね
「学生」を罵り言葉として使っているということは社会人かな?
その態度を貫けるくらいには沢山エスパーが居る会社なのかな、凄い環境だなあ
0314デフォルトの名無しさん (アウアウウー Sac5-dKzD)
垢版 |
2019/04/08(月) 20:23:20.59ID:WPZzOuq3a
>>312
ref引数は、呼び出し先関数で、引数を使うし設定もする場合に使う
out引数は、呼び出し先関数で、引数を設定するだけの場合に使う
この違いにより、refで渡す引数は初期化しておく必要があるけど、outで渡す引数は未初期化でも構わない

.NET Framework中にある実例としては
int.TryParse()の場合、文字列の数値を引数に設定するだけで、引数の元々の値は使わないから、out引数でいい
難しい例だがInterlocked.CompareExchange()の場合、引数の値を返すし引数に設定する必要もあるため、ref引数が必要

値型と参照型の違いも知っておいたほうがハマりにくいかも
0316デフォルトの名無しさん (アウアウウー Sac5-dKzD)
垢版 |
2019/04/08(月) 22:47:42.86ID:WPZzOuq3a
>>315
refでも問題らしい問題は無いだろうけれど
refでなくoutで済む場面ならoutを使ったほうが楽できる
未初期化変数でも渡せるし、C# 7からはout引数の場所で変数宣言が出来るようになった
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7#out-variables

ただout引数やref引数を取る関数はasyncやiteratorメソッドに出来ないから
最近の風潮だと、out引数を経由して多値を返すよりも、戻り値の型をValueTupleにして直接多値を返す方が良さそう
https://ufcpp.net/study/csharp/datatype/tuples/?p=3#out-params
0322デフォルトの名無しさん (アウアウウー Sac5-dKzD)
垢版 |
2019/04/09(火) 11:56:56.57ID:hdDhGrZ5a
>>317
デザイナーで置いたテキストボックスのインスタンス構築や、各種プロパティの設定は
実際はInitializeComponent()メソッドの中で行われる
InitializeComponent()よりも前で値を読もうとしてNullReferenceExceptionが出ているのなら
InitializeComponent()の後で値を読めばいい
までエスパーした
0323デフォルトの名無しさん (ワッチョイ f1ab-c04X)
垢版 |
2019/04/09(火) 21:10:24.64ID:0DYeC6pW0
C#でProcess使ったコンソールの標準入出力処理書いてるんだけど
printf("値を入力1:");
scanf("%d",&i);
printf("値を入力2:");
scanf("%d",&j);
printf("%d %d", i, j);
みたいな処理のプログラムを動かしたとき、コマンドプロンプトだと
値を入力1:3
値を入力2:4
3, 4
ってなってるのに対して、OutputDataReceivedだと
値を入力1:値を入力2:3, 4
って標準入力が全部完了されたあとにまとめて文字列渡されるのって何でなの?
0325デフォルトの名無しさん (ワッチョイ f1ab-c04X)
垢版 |
2019/04/09(火) 21:49:55.14ID:0DYeC6pW0
>>324
試しに全部のprintfに改行入れてみたけど、それでもscanfが全部終わるまでOutputDataReceivedイベント発生しないっぽい。
C#側で標準出力を受け取ってstringに追加 ー> exe側は入力待機 ー> C#側からStandardInput.WriteLineで標準入力 ー>exe側は処理続行
みたいな コマンドプロンプトからのの実行と同じような動きをする処理って、C#じゃどうやるんだろう?
0328デフォルトの名無しさん (ワッチョイ f1ab-c04X)
垢版 |
2019/04/09(火) 23:59:05.15ID:0DYeC6pW0
>>326
setbufでもfflushでも何故か入力待機状態が終了するまでOutputDataReceivedイベントが発生しなかったからあきらめてテキストファイルにログ出力してそれ読み込むことにするわ
教えてくれてありがとう
0330デフォルトの名無しさん (ワッチョイ 13e0-clLQ)
垢版 |
2019/04/12(金) 22:52:29.27ID:luZS+mvc0
C#関係ないんだけどシングルトンの使い場所がわかりませぬ

こんなクラスがあるとして、
class a{
 Dictionary<string, string> hoge;

 public string getHoge(key)
{return hoge[key];}
}
hogeにはDBから対象の精々100くらいの全レコード取ってきて格納しておきたい
複数インスタンスが必要にはならないようなデータ
外部からのsetは許可しない

こういう時ってシングルトン使ってnew時にDBからデータ取得とかしていいのでしょうか?
もっと賢いやり方あります?
0334デフォルトの名無しさん (オッペケ Sr85-IY8d)
垢版 |
2019/04/12(金) 23:33:00.52ID:HVuVGzQQr
staticじゃあかんの?
0342デフォルトの名無しさん (アウアウエー Sae3-5b7P)
垢版 |
2019/04/13(土) 01:23:05.24ID:4BHEL+7ta
>>330
言語レベルで単一インスタンスの強制を保証する必要が
本当にそんなにしばしばあるのかなとは個人的には思うね。

要は共有方法を明確にしておけば十分じゃないかと。
そもそも共有されるオブジェクトを各々が勝手にnewするのがおかしいわけで。

具体的には、例えばWindows FormならVSが自動生成するProgramクラスの
staticな読み取り専用プロパティとして実装する約束にしておけば済む
0345デフォルトの名無しさん (ワッチョイ a984-xQPP)
垢版 |
2019/04/13(土) 08:39:55.79ID:Gb+AenIc0
以前に書いたプログラムを元に加筆修正して別のプログラムを作った時
フォルダもソリューションも別名で保存したいのですが
VisualStudioはそういう保存はできないのでしょうか?
今は力業であらかじめ別名フォルダにコピーしたソリューションから作り始め
ソリューション名、プロジェクト名、アセンブリ名、空間名
等を書き換えてからプログラムの修正を始めるのですが
時々何かがおかしくなってバインディングが外れたり
破綻してしまうこともあるので
何か安全に書き換える方法があるのかな?と質問しました
0347デフォルトの名無しさん (ワッチョイ a984-xQPP)
垢版 |
2019/04/13(土) 09:32:07.36ID:Gb+AenIc0
>>346
うーんちょっと調べただけだけどヤヤこしそう・・・
それにバージョン管理とは違うんだよなー
ワープロを元にデータベースを作ったからフォルダもソリューションも変えて保存したい
って感じなんだけど
0352デフォルトの名無しさん (ワッチョイ 8bb0-xQPP)
垢版 |
2019/04/13(土) 10:41:12.62ID:kUX6ubEA0
>>351
そうなの?
とりあえずその方がコードも分かりやすいから
exeとタスクトレイに表示される名前だけ反映させるには
アセンブリ名とアセンブリ情報の中だけでいいのかな
0353デフォルトの名無しさん (ワッチョイ 992d-U5P5)
垢版 |
2019/04/13(土) 10:44:39.80ID:nXQ9b0jN0
7.2で加わった、条件付きのref式って意味がわかんないんだけどさあ
これrefがついていようがいまいが同じように動作しないの???
なんなのこれ
0354デフォルトの名無しさん (アウアウエー Sae3-KE1k)
垢版 |
2019/04/13(土) 11:21:31.91ID:umtct5vHa
>>353
int a, b, c;
void Reset() { a = 1; b = 2; c = 3; }

Reset();
ref int x = ref a;
x = (true ? b : c); // 普通の条件演算子
x = 4; // xの参照先はaのままなのでaが変わる
Console.WriteLine($"{a} {b} {c}"); // 4 2 3

Reset();
ref int y = ref a;
y = (true ? ref b :ref c); // 条件演算子の2項目と3項目にrefはあるが、条件演算子の前にrefはない→参照でなく値が代入されるだけ(上と同じ)
y = 4; // yの参照先はaのままなのでaが変わる(ここでハマってそう)
Console.WriteLine($"{a} {b} {c}"); // 4 2 3

Reset();
ref int z = ref a;
z = ref (true ? ref b : ref c); // 条件演算子の前にrefがある→zの参照先が変わる
z = 4; // zの参照先がbになったのでbが変わる
Console.WriteLine($"{a} {b} {c}"); // 1 4 3
// https://ufcpp.net/study/csharp/sp_ref.html?p=2#conditional-ref もどうぞ
0356デフォルトの名無しさん (ワッチョイ 992d-U5P5)
垢版 |
2019/04/13(土) 18:49:30.17ID:nXQ9b0jN0
>>354
ありがとう!やっとわかったぜ!!!
0363デフォルトの名無しさん (ワッチョイ 2b0d-QSJy)
垢版 |
2019/04/14(日) 00:53:29.67ID:DOuVmEEK0
言語の価値って開発環境も含めて評価すべきじゃない?
自分は別に他の言語でもよい処理をついついc#でやっちゃうのはやっぱりIDEの強力なサポートがあってのことだわ
0364デフォルトの名無しさん (ワッチョイ 992d-U5P5)
垢版 |
2019/04/14(日) 08:42:45.32ID:H5M6zKH30
>>363
これはRuby先輩を呼び寄せるための撒き餌ですか?
0367デフォルトの名無しさん (ワッチョイ d352-NGx/)
垢版 |
2019/04/14(日) 09:07:27.41ID:UDnauAFh0
>>363
言語の基本文法のみ良し悪しとか、標準ライブラリまで含めての評価とか、議論の対象をどこまでとすらかは文脈によるだろうし、君が開発環境まで含めた話をしたいというならそういう話題をふって話を進めればいいよ。
言語単体での話をしている時に「いやいやIDEが〜」とか言い出すと話が発散するから、議論の対象は明確に区切って意識した方がいい。
0370デフォルトの名無しさん (アウアウエー Sae3-KE1k)
垢版 |
2019/04/14(日) 12:23:16.39ID:cHKb6r3Sa
>>357
この辺の追加機能はパフォーマンスを求めるための機能だから
速度特化ライブラリの製作者は使うだろうけど、それ以外の開発者は使う機会少ないかも
https://ufcpp.net/study/csharp/cheatsheet/ap_ver7_2/

>>358
https://github.com/dotnet/csharplang/issues
C#の言語仕様はgithub上で公開で議論されている
センスある機能について議論や提案してみたらどうだろう
もちろん何かコメントしたりissueを立てたりする前に、検索して既出じゃないか確認するのを忘れずに
0371デフォルトの名無しさん (ワッチョイ 6994-XGqV)
垢版 |
2019/04/15(月) 12:22:07.84ID:3hi8+ot50
先日windows7からwindows10にOSの入れ替えをしたのですが、win7では動いていたPostMessageが動かなくなってしまいました。
(送り手は自作のソフト、受け手は市販のソフトで、Win7でもWin10でも同じものです)
あるアプリケーションに
PostMessage(hWnd, WM_KEYDOWN, VkKeyScan("0"), 0);
のようにして数字を送信していたのですが、これが反応しなくなりました。
ウィンドウハンドルの取得とかは問題がないようです。
これ以外でも
PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
等すべてのキーが送れません。
対処法がありましたら教えてください。
0372デフォルトの名無しさん (ワッチョイ 6994-XGqV)
垢版 |
2019/04/15(月) 12:24:05.77ID:3hi8+ot50
正確に言うと(正確かどうかはわかりませんが)、
送り手側でエラーが出るわけではなく、受け手側のテキストボックスを一応選択はしているので、
送り手側としては送っているつもりですが受け手側が反応しなくなっている状態だと思います。
送り手の発信方法を変えればいいのでしょうか?
0388デフォルトの名無しさん (ワッチョイ 1161-U5P5)
垢版 |
2019/04/16(火) 18:43:16.58ID:HeVWn8Fl0
VS2010からVS2017に上げたら変数名に全角の・使ってるところがビルドエラーになったわ。
こんなの変数名に使うなよと思いながらVS2010で名前変えまくった。
0391デフォルトの名無しさん (ワッチョイ fbfc-LJPv)
垢版 |
2019/04/17(水) 20:49:20.12ID:WkJZEAk70
ドット絵エディタを作りたいんですが、win formでやってます
ピクセルを描くベースとなるフォームはどれを使用すればよいのでしょうか。
0395デフォルトの名無しさん (ワッチョイ fbfc-LJPv)
垢版 |
2019/04/17(水) 21:28:00.17ID:WkJZEAk70
pictureboxかpaintですね ありがとうございます
0397デフォルトの名無しさん (ワッチョイ 36fc-HmQt)
垢版 |
2019/04/18(木) 06:13:29.99ID:VndYiJ+Y0
コントロールとクリックイベントはどのような関係になっているんでしょうか。
コントロールは関数で、そのローカル関数がクリックイベントでしょうか?
0399デフォルトの名無しさん (ワッチョイ 36fc-HmQt)
垢版 |
2019/04/18(木) 10:05:51.26ID:VndYiJ+Y0
クラスですか ごめんなさい
0401デフォルトの名無しさん (ワッチョイ 36fc-HmQt)
垢版 |
2019/04/18(木) 18:55:27.19ID:VndYiJ+Y0
デリゲートって語をはじめてしりました
0409デフォルトの名無しさん (ワッチョイ c52b-hooH)
垢版 |
2019/04/19(金) 16:10:17.23ID:OM7ktdHt0
ぬるぽ
0410デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/19(金) 21:56:33.56ID:5QVRwjzm0
List<T>から要素を1つずつ要素を取り出して処理し、例外が起きたらその要素だけリストから消したいんだけどさあ
なんかいい手段ってないのかな?

雰囲気としてはこんな感じのが書きたいんだけど・・・・おらの頭じゃうまく書けんだ・・・・
foreach(var o in listOfObject){
try{ 例外処理以外では対処が難しい怪しい処理(o); }
catch{ 例外が起きた項目だけlistOfObjectから消したいが、ちゃんとforeachも回って欲しい(); }
}
0414デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/19(金) 22:09:40.78ID:5QVRwjzm0
ありがとう
こうやってやるもんなのか
0423デフォルトの名無しさん (ワッチョイ a242-YIQo)
垢版 |
2019/04/20(土) 09:08:29.42ID:Q85hwvCt0
>>410
foreach(var o in listOfObject){を
foreach(var o in listOfObject.ToArray()){
と配列にコピーしてから実行するのが定石です
そのループの中では既に列挙は終わっているから
listOfObjectにAddしてもRemoveしても例外は発生しないし列挙の順番にも影響を与えません
0424デフォルトの名無しさん (ワッチョイ 6502-Prtq)
垢版 |
2019/04/20(土) 09:12:26.10ID:Q8Lkjfvy0
>>421
一度リストで書いて、配列だとどう書くだろう?と考える。
アルゴリズムって基本リスト前提だからね。
0427デフォルトの名無しさん (アウアウエー Sada-shJk)
垢版 |
2019/04/20(土) 12:09:52.47ID:IppyQHdna
>>421
今時そんなの覚える必要あんまりない気もするけど、
試験勉強ならがんばって覚えるしかないね

>>423
そもそも列挙と同時に削除をするって発想が筋悪。
別に列挙後ゆっくり削除すりゃあよい訳で、>>413がやってるように2つを分離する方が
考え方として自然で分かりやすいと思うけどね
0432デフォルトの名無しさん (ワッチョイ f57c-ZG7F)
垢版 |
2019/04/20(土) 14:01:01.21ID:bN8wmmjE0
一番まともな解答にはレス付けないのが2ちゃん式
0434デフォルトの名無しさん (ワッチョイ 5e2c-LwVf)
垢版 |
2019/04/20(土) 14:19:22.63ID:rcvSJkam0
まず、2分探索を、2分ヒープで作れば?
O(log N)

2^10 = 1,024 だから、千のデータを、10回で探索できる。
2^20 = 百万 のデータは、20回!

リストは、次の要素しかわからないから、ランダムアクセスは、O(N) になる。
例えば、1から5を見つけるのに、1,2,3,4,5 と、リンクをたどらないといけない

O(1)にするには、アドレスは計算式で求められるものだけ。
各要素が4バイト使うなら、1が100番地として、5は116番地みたいに
0436デフォルトの名無しさん (ワッチョイ 7252-U8iM)
垢版 |
2019/04/20(土) 17:40:05.04ID:tqoqa3JD0
>>435
基本的なデータ構造とアルゴリズムは一通り理解して自分で書けるようになっておくといいぞ。
標準的な物はライブラリ等で用意されているから実際に業務等でコードを書くときはそれを使うが、独自の問題の解法を自分で考える際に、適切な速度や使用リソース量と工数の兼ね合いで良い方法を選択するには、基本は一通り押さえておく必要があるよ。
0440デフォルトの名無しさん (アウアウエー Sada-PIYw)
垢版 |
2019/04/21(日) 08:02:20.34ID:qTT7Abroa
自前で書くソート処理と、.NET Frameworkに実装されてる(Microsoftのプロフェッショナルが実装した)ソート処理、
どっちがより高速でバグが少ないと思う?
https://referencesource.microsoft.com/#mscorlib/system/array.cs,d076876f5fbf4eec
↑ここから先に書かれている処理よりも優れたソート処理を自分で書けるならともかく、
そうでなければおとなしく出来合いのソート処理を利用するほうが無難だと思うけど
0443デフォルトの名無しさん (アウアウウー Sacd-hooH)
垢版 |
2019/04/21(日) 09:39:42.10ID:+WROkW6ha
>>440
初心者がソートを勉強しないと自分の書いたコードがなぜ遅いかわからない

ソートが魔法か何かで何でも一瞬で並び替えられると思ってしまうと終わり
そこから進展はない

ソートの回数を減らすように考えたりソート自体を行わないでうまく処理することを学ばないといけない
0445デフォルトの名無しさん (アウアウウー Sacd-hooH)
垢版 |
2019/04/21(日) 09:50:14.96ID:+WROkW6ha
ソートがボトルネックになったらじゃなくて普通にソートを使うときには必ず気に掛けるべき

ループの中にソート入れてるコードがあったりする
ループ出た後に一度やればいいだけなのにと思うがそういう所に思いが至らないんだろう
0447デフォルトの名無しさん (アウアウウー Sacd-hooH)
垢版 |
2019/04/21(日) 10:09:09.80ID:+WROkW6ha
メソッドの中でソートして戻り値返してるのにもらった側でもソートしたりとか
無駄なことをする可能性はどこにでもある

他人に見られたときにこいつ馬鹿だなと思われないようなコードを書く練習をしよう
0449デフォルトの名無しさん (アウアウエー Sada-4dYu)
垢版 |
2019/04/21(日) 10:19:40.66ID:8e51ow7Fa
>>444
それは細かい最適化よりも設計を見直すべきだと思うよ
物事を大域的に見ることができず小手先のハックだけでなんとかしようとするのはプログラマが陥りがちな非常に悪い癖だから注意
0455デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/21(日) 12:46:19.25ID:WZ0UQqME0
こういうの、listにロックをかけたのに何で同listを使う後続処理がすぐ実行されちゃうの?
https://paiza.io/projects/e/EbjQiWv8ebNkW4bbkAY_YQ

using System.Collections.Generic;
using System.Threading.Tasks;
using System;

public class Hello{
public static void Main(){
var list = new List<int>();
for(int i=1; i<=1000; i++)
{
list.Add(i);
}

Task.Run(()=>{
lock(list){
Task.Delay(10000);
}
});
Console.WriteLine(list[123]);
}
}
0457デフォルトの名無しさん (アウアウエー Sada-nHqp)
垢版 |
2019/04/21(日) 13:00:01.62ID:cgZSyzeqa
>>455
https://ufcpp.net/study/csharp/sp_thread.html#lock
lock文はMonitor.EnterやMonitor.Exitを使った糖衣構文であって
Monitor.Enterでロックを取得する(=既にロックされているなら、それが解放されるまで待つ)
例示コードではTask中ではlockしているもののConsole.WriteLine箇所はlockがないので、すぐに実行される
0458デフォルトの名無しさん (ワッチョイ 655f-8I1V)
垢版 |
2019/04/21(日) 13:12:13.25ID:6I4G/mIH0
>>455
lockの使い方が間違ってる(>>457)のと、Task.Delay()の使い方が間違ってる。
Task.Delay()は通常awaitして使うがlockステートメント中では使えないので、Task.Delay().Wait()するか代わりにThread.Sleep()にする。
後、Task.Run()で作ったタスクが実行開始されたか考慮していないから、大抵はConsole.WriteLine()が先に実行される。
0460デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/21(日) 15:32:01.70ID:WZ0UQqME0
ありがとう、このコードだと欠陥だらけなのか・・・・
使用箇所ごとにLockが必要なのか、それとタスクより先に次の行が実行されてる可能性が高いのは全く気づいてなかった
ただ、
>Task.Delay()は通常awaitして使うがlockステートメント中では使えないので、Task.Delay().Wait()するか代わりにThread.Sleep()にする。
っていうのはどういうことなの?Lock外にスレッドを返されちゃうのかしら?
0469デフォルトの名無しさん (ワッチョイ c23e-HmQt)
垢版 |
2019/04/22(月) 20:39:27.38ID:Xu5D3g840
独自に作成したユーザコントロールをdataGridViewのカラムに追加する処理を作成しているんですが
追加したものをそのまま削除するとうまく削除出来ず、一方のユーザコントロールが必ず画面上に残ってしまうんですが
なぜでしょうか?原因がわからず悩んでいます
どなたか教えてください

//@ひとまず空のデータを作成してdataGridViewに格納
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {new DataColumn(), new DataColumn(), });
dt.Rows.Add(new object[] { "", "" });
this.dataGridView1.DataSource = dt;
//Aユーザコントロール1をdataGridViewに追加
UserControl1 userControl1 = new UserControl1();
this.dataGridView1.Controls.Add(userControl1);
userControl1.Location = this.dataGridView1.GetCellDisplayRectangle(0, 0, true).Location;
//Bユーザコントロール2をdataGridViewに追加
UserControl1 userControl2 = new UserControl1();
this.dataGridView1.Controls.Add(userControl2);
userControl2.Location = this.dataGridView1.GetCellDisplayRectangle(1, 0, true).Location;
//C追加したユーザコントロールを削除→何故かユーザコントロール2だけが残る
dataGridView1.Controls.Clear();
0470469 (ワッチョイ c23e-HmQt)
垢版 |
2019/04/22(月) 20:40:58.08ID:Xu5D3g840
ちなみに私が試したのはvisualStudioの2017です
0472デフォルトの名無しさん (スップ Sd12-yS2j)
垢版 |
2019/04/22(月) 20:52:55.67ID:doLks5OSd
>>471
何するかによるし言語仕様理解せずにコーディングすればC++だろうがC#だろうが遅くはなる
早くしたけりゃどの言語だってコンパイラが吐くコード見ろになるし極論アセンブラしてろになる
シビアな演算速度求められるようなソフトじゃなきゃ気にするような速度は無い
個人的にいろいろ開発してて速度面で困ったことはない
0473デフォルトの名無しさん (ブーイモ MMa6-hooH)
垢版 |
2019/04/22(月) 21:35:41.32ID:puVU3XKCM
特定のアプリを監視して表示された文字(画像)をテキストにするアプリ作ったけど
c#だとチェックに1秒、c++とGDIのDLLだと0.01秒とかそんな感じだった

c#で作って必要ならc++にコンバートするのでいいと思う
0476デフォルトの名無しさん (ワッチョイ d963-yS2j)
垢版 |
2019/04/23(火) 00:14:05.59ID:Bc6Ot9Tr0
別にC#でいくらでも早くできるけどそれしないでC++より遅いってそりゃそうだよねとしか
GCの恩恵受けてunsafe使わずセーフティな状態でしょ
突き詰めたC++と突き詰めたC#なら.NETで動く分C#が不利なのは仕方ない
突き詰める必要がない部分で恩恵を受けられるんだから、処理速度以外にメリット感じないなら速い言語やればいい
言語なんて所詮道具なんだから適材適所
0484デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/23(火) 11:11:38.25ID:D0U8cwP90
awaitのついた文の次の文を実行する際に、await前と同じスレッドに帰ってきてもらうことってできないの?
0485デフォルトの名無しさん (ワッチョイ 6e7c-lfmU)
垢版 |
2019/04/23(火) 11:25:52.45ID:NBcK336D0
元のスレッドがそういうことできる機能を持ってればできるよ
WinFormやWPFのGUIスレッドはメッセージループで実現してて
それらの場合はGUIスレッドでawaitすればGUIスレッドに戻ってくるのが既定だし
0490デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/23(火) 16:29:44.88ID:D0U8cwP90
>>485
コンソールアプリ等だとなかなか難しいんかな
0497デフォルトの名無しさん (ブーイモ MMd5-hooH)
垢版 |
2019/04/23(火) 19:50:14.81ID:2vLu2U8QM
await/asyncは単なるTask非同期処理を簡易的に書ける糖衣構文
次にawaitの次をどのスレッドになるかはその時の状態次第

GUIではそれでは困るのでデフォルトで同じスレッドが処理をするようにしてあるだけ
0505デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/23(火) 21:57:22.24ID:D0U8cwP90
同じスレッドに戻ってきてもらうのに、簡単な方法ってないのかな・・・・
0506デフォルトの名無しさん (アウアウエー Sada-nHqp)
垢版 |
2019/04/23(火) 22:10:23.58ID:iDnak3xha
>>505
>>490を見るに、コンソールアプリで特定スレッドで処理したいみたいだけど、どういった理由?
GUIなら、時間がかかる処理は別スレッドで、画面更新は絶対にUIスレッドで、といった使い分けがあるけど
CUIで特定スレッドを意識する理由がちょっと思いつかないんだ
0507デフォルトの名無しさん (ワッチョイ 092d-RDgi)
垢版 |
2019/04/23(火) 22:42:29.23ID:D0U8cwP90
>>506
WebAPIサーバを作りたく、その中で扱うデータについてトランザクション処理みたいなことをしたかったんです
通信関連でAwaitが多用されている中でも、データのロックをできるだけ減らしたい、またうっかりミスしてロック外に出ないでほしいと思ったんです
0508デフォルトの名無しさん (アウアウエー Sada-nHqp)
垢版 |
2019/04/24(水) 00:21:10.86ID:9Dlmymg8a
>>507
それを聞いても、「特定スレッドで絶対に処理したい」が主目標にはならない気がする
「ロックにReaderWriterLockSlimを使っていて、ロック取得と解放は同じスレッドで行う必要がある」のような状況ならまだ分かるんだけど
もしもこの状況であるなら、SemaphoreSlimでロックするようにすれば、WaitOneAsyncで待つスレッドと、Releaseするスレッドを別にできる(=間でawaitできる)
万一本当に何か理由があって特定スレッドで処理を続けたいのなら、Taskをawaitするのでなく.Wait()で待つようにすれば、スレッドは切り替わらなくなる

> うっかりミスしてロック外に出ないでほしい
これが「ロックを取得したけど、解放を忘れる」ことを指すのであれば
try {} finally {} や、ラップクラスを作ってIDisposable実装してusing() {} するのが対策になるかもしれない
取得と解放がメソッドを跨いだりするなら面倒くさくなるけど……
0510デフォルトの名無しさん (ワッチョイ 2d5f-KI0z)
垢版 |
2019/04/25(木) 23:52:47.61ID:LJHMbymK0
>>509
6行目
0516デフォルトの名無しさん (アウアウエー Sa13-jWJP)
垢版 |
2019/04/27(土) 00:06:35.36ID:Ern7/KCha
>>514
ご法度ではないし、むしろインスタンスを正しく構築できないなら積極的にthrowしてほしい
例えばStreamReader(String)の場合、ArgumentException系列から
FileNotFoundExceptionやDirectoryNotFoundExceptionのIOException系列までthrowする
0517デフォルトの名無しさん (ドコグロ MM93-iwjh)
垢版 |
2019/04/27(土) 00:38:42.27ID:yEc5G7yUM
悪いとは言わないけど、最近はあまりコンストラクタで例外投げるような処理やらなくなったなあ
何故かと考えたら、async/awaitのせいだと気付いた
コンストラクタではawaitできないから、昔みたいにコンストラクタでファイル読んだりするのはほぼ無くなった
0519デフォルトの名無しさん (ワッチョイ 4d61-r3uF)
垢版 |
2019/04/27(土) 02:44:50.91ID:ni4YCIMc0
ドキュメントもコンストラクタで投げる可能性のある例外一覧が必要になるけど
実際あげきれなくて手薄になりがち
そうなると設計できない
例外の種類でその後の動作をハンドリングしたいときに動かしてみて
キャッチの種類を分けるしかない
仕様書に書いてあるこのエラー出せないんすけど?
このときの例外増やしてもらえます?
→入れた引数から判断できるでしょ?とかキチガイかよって
0525デフォルトの名無しさん (ワッチョイ 4d61-r3uF)
垢版 |
2019/04/27(土) 08:12:46.03ID:PiMoxWjk0
>>522
設計書になんて書くん?
俺んとこ例外使うなら設計書に書いてない例外出しちゃうと大変なんだよ
MSのドキュメントも全部はねーし
マジ厄介
でもお客の言い分もわかる気がするんだよね
流石に何が来るかわかりませんってのはどうなの?
って思う
0527デフォルトの名無しさん (スフッ Sd43-jluM)
垢版 |
2019/04/27(土) 08:34:22.02ID:9yG2LI1yd
例外の発生要因なんてあらゆるものがあるんだから全部明示しろというお客の主張が不条理
設計書に例外全部明示しろとか要求されたことないね
0528デフォルトの名無しさん (アウアウエー Sa13-OsmV)
垢版 |
2019/04/27(土) 08:51:37.56ID:yNGf8etVa
規約が足かせになってる場合は無視したほうがいい
スキル低い人が大昔に作った規約かもしれないし

例外は復旧可能かつ復旧したいものだけキャッチして対処
それ以外はアスペクトでまとめて処理すればいいよ
0531デフォルトの名無しさん (アウアウエー Sa13-iwjh)
垢版 |
2019/04/27(土) 09:26:49.68ID:k66IsG4/a
>>529
C++のその説は迷信だけど、C#では事実としてawaitができないという重大な制約があるからなあ
コンストラクタで例外を投げてはいけないわけではないが、そもそも例外を投げる可能性のあるような処理をコンストラクタでやらせることができるケースが少ないのは間違いない
0532531 (アウアウエー Sa13-iwjh)
垢版 |
2019/04/27(土) 09:33:56.80ID:k66IsG4/a
もちろん、ArgumentNullExceptionのようにバグを検出してアプリを落とすことを目的とする例外は別だよ
そういうのを除けば、例外を投げうる処理ってのはだいたいIOを含んでいてawaitが必要になるケースが多い
0533デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
垢版 |
2019/04/27(土) 09:36:37.55ID:yyWoHVeQa
いまだにオブジェクト倶楽部のをベースにしたC#コーディング規約なのかな
10年くらい前の時点でも悪評ぷんぷんだったのにどれだけ時代遅れなことしてるんだ

コーディング規約作ってる奴のスキルが低い/古すぎ/多言語の知識しか持ち合わせてなくて
クソな規約になってることはよくある
コンストラクタで例外吐くのが望ましくないのはC++の話であってC#ではそんなこと全然ない
例外すべて列挙しなきゃいけないのはJavaの話であってC#にもそれを持ち込むのはナンセンス

でも大抵規約のクソさ加減と規約作成者・組織の老害度は比例するんだよな
指摘しても直ることはないだろうから「これはクソなコードだ」と自覚を持ったうえで
規約通りのコードを書くしかない
0534デフォルトの名無しさん (ドコグロ MM93-r3uF)
垢版 |
2019/04/27(土) 11:46:22.17ID:V1c8eqNrM
>>527
それって制御できないって言ってるんだよね?
その時はtry catchで握り潰せばいいんだけど
君はどうなればいいと思ってるの?

ある日例外が起きてアプリが止まっちゃってもそれは時代の流れでしょうがないと思ってるってこと?
0535デフォルトの名無しさん (スフッ Sd43-jluM)
垢版 |
2019/04/27(土) 12:00:49.48ID:ASguEO4td
>>534
予期せぬ例外が起きたら発生箇所のスタックトレースを表示させてバグ修正に役立てるよ
客もその画面キャプチャを送ってくれる
Execeptionにはそういうデバッグに役立つ情報入ってるからマジ便利だわ
0537デフォルトの名無しさん (アウアウエー Sa13-OsmV)
垢版 |
2019/04/27(土) 12:22:00.72ID:yNGf8etVa
コンストラクタで例外を出すのが妥当なら出すべきだ
しかし、例外を出すような責務は得てしてファクトリやリポジトリなど外部のクラスが担うことが多い傾向にある
なので正確に言うと、オブジェクトの生成という責務を分離してない汚いプログラムはダメだ、なんだけど
それが誤って拡散した結果、コンストラクタで例外を出すプログラムはダメだ、に拡大解釈されてしまったのだろう

// コレは生成責務が分離されてないからダメだ
class Hoge {
public Hoge(int id) {
var dto = DB.FindHoge(id); // 例外なげる
m_id = id;
m_name = dto.name;
}

// コレは責務が分離されてるからOK
class HogeRepository {
public Hoge Find(int id) {
var dto = m_db.FindHoge(id); // 例外なげる
return new Hoge(id, dto.name); // 実装次第で投げたり投げなかったり
}

// コレもOK 例外投げるが責務としては妥当
class Hoge {
public Hoge(int id, string name) {
if (id < 0) throw new BadHogeFormat("id");
if (UTIL.NotMatch(@"^H\d{8}$", name)) throw new BadHogeFormat("name");
m_id = id;
m_name = name;
}
0542デフォルトの名無しさん (アウアウエー Sa13-7ni7)
垢版 |
2019/04/27(土) 13:46:18.87ID:vrUpwJdGa
ダメも糞も引数が不適切なら例外投げるしかないねそもそもw

もちろん(注意喚起とか)何らかの意図を持ってあえてコンストラクタではなく
ファクトリーメソッドやTryCreateXxxxにする方法もあるけど、
少なくとも誰が考えても引数が不適切なら例外発生が予見できるなら
コンストラクタで例外投げて何も問題ない
0543デフォルトの名無しさん (ワイーワ2 FF93-drJF)
垢版 |
2019/04/27(土) 16:53:30.48ID:hssASZhyF
デストラクタで例外吐くのはあり?
0547デフォルトの名無しさん (ワッチョイ 232f-K6Yl)
垢版 |
2019/04/27(土) 20:39:48.83ID:ucBEJWSU0
デストラクタって解放し忘れたアンマネージドリソースの解放をするためにある奴でしょ?
ただそれだけの処理に例外とか要る?
0549デフォルトの名無しさん (ワッチョイ 232f-K6Yl)
垢版 |
2019/04/27(土) 21:09:36.81ID:ucBEJWSU0
C#のデストラクタは実行タイミングが不明な上に
他でキャッチできないからそのままクラッシュする事になるが
それが目的なら
0550デフォルトの名無しさん (ワッチョイ 8563-Neyz)
垢版 |
2019/04/27(土) 22:32:08.58ID:krlg75LI0
デストラクタであろうと例外が発生したなら吐くべき
デストラクタで例外なら大体最終的にアプリ落とす結果になるだろうけど
普通に設計すりゃまずデストラクタで例外が必要にはならんとは思うが
0554デフォルトの名無しさん (ブーイモ MMa9-HJzg)
垢版 |
2019/04/28(日) 09:48:33.86ID:3t4t6vYZM
どうみても例外をデストラクタで握りつぶすなんて話はしてない

デストラクタで挙動がおかしな場合そこから自前で例外を投げるかどうかだろ
どうしてこんな前提すらわからないのか?
0555デフォルトの名無しさん (ワッチョイ 232f-K6Yl)
垢版 |
2019/04/28(日) 10:20:38.37ID:ddGaHMPJ0
デストラクタで例外投げるのは出来るけど
デストラクタの呼び出し元はファイナライザースレッドになる故
デストラクタ以外の場所でキャッチして
ログ記録したりは出来ないが、よろしいか?
0556デフォルトの名無しさん (ワッチョイ 232f-b8jC)
垢版 |
2019/04/28(日) 10:52:59.00ID:F7dfQde00
ところで、C#ってコンストラクタで例外吐いたとき、インスタンスは生成されて戻されるの?
そのインスタンスのデストラクタは(実装してればどこかで)実行されるの?
0557デフォルトの名無しさん (ワッチョイ 2301-4ufv)
垢版 |
2019/04/28(日) 14:01:09.54ID:Cfig35XD0
>>554
お前黙ってろよ…
> デストラクタで挙動がおかしな場合そこから自前で例外を投げるかどうかだろ
そんな話は>>545-546で既に終わってる
今の話は例えばデストラクタでファイルクローズした時そのメソッドで例外送出されたらどうするかって話な

> どうしてこんな前提すらわからないのか?
わかってないのはお前だけ
0558デフォルトの名無しさん (ワッチョイ 2301-4ufv)
垢版 |
2019/04/28(日) 14:02:16.88ID:Cfig35XD0
>>556
> ところで、C#ってコンストラクタで例外吐いたとき、インスタンスは生成されて戻されるの?
されない

> そのインスタンスのデストラクタは(実装してればどこかで)実行されるの?
されない
0559デフォルトの名無しさん (ワッチョイ 8563-Neyz)
垢版 |
2019/04/28(日) 14:33:26.09ID:18CJ+0uF0
ファイルクローズなんてデストラクタの仕事じゃないからクラス設計が間違ってる
もしそうせざるを得ない理由があるならアプリ終了するだけ
アプリ終了されて困るなら正しくクラス設計すればいい
0566デフォルトの名無しさん (ワッチョイ cbda-KxX0)
垢版 |
2019/04/28(日) 18:25:38.64ID:kK/njqra0
メンバ変数を仕様上どうしてもDBから引っ張ってくるデータで初期化するしかなく、
コンストラクタ内でDB処理異常時に例外を吐く処理があります。

この場合コンストラクタ内では何もせず、インスタンス生成後にInit()のようなメソッドを
呼び出してもらうほうが使う側は楽でしょうか?
0567デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
垢版 |
2019/04/28(日) 18:31:50.14ID:uWFo9H7Wa
そもそもC#でデストラクタに処理を書くこと自体が基本ありえないと思うんだけど・・・
リソースの解放なら(まともな構造のソースであれば)Dispose時に済ませるだろうし

デストラクタにわざわざ処理を書いて、しかもその処理が例外を引き起こすパターンって
具体的にどんなのがありうるんだ?
0570デフォルトの名無しさん (アウアウエー Sa13-jWJP)
垢版 |
2019/04/28(日) 18:39:48.98ID:e0sCdFMHa
>>566
Init()を呼び忘れて使うリスクが出てくるので、インスタンス生成時に済ませたい派
ただDB関連では >>531-532 が言うように非同期処理をしたいだろうから
「コンストラクタはprivateにして、public staticなasyncファクトリを提供」が良いと思う

インスタンス生成時に例外出る場合だと変数の宣言と初期化が分離するけど、C#だと初期化し忘れはエラーになるから許容範囲じゃないかな
Foo foo;
try { foo = CreateFoo(); }
catch(BarException) { 何か復帰処理 }
// 以下fooを使った処理
0575デフォルトの名無しさん (アウアウエー Sa13-7ni7)
垢版 |
2019/04/28(日) 19:02:39.46ID:kMBz0MBMa
>>566
上にも書いたけど、あえてコンストラクタではなくstaticなTryCreateHogeみたいなのだけ提供して
注意喚起する方法もあると思うよ

>>567
デストラクタの存在理由はClose/Disposeを忘れた場合のフェイルセーフなんで
アンマネージドな共有リソースを占有するオブジェクトの場合はほぼ必須だし、
例外を投げるかどうかはともかく、デストラクタの中で例外的な事態が
発生することも普通にありえるとは思う。(例えばデバイスのクローズに失敗)
0576デフォルトの名無しさん (スプッッ Sd03-Neyz)
垢版 |
2019/04/28(日) 19:02:50.34ID:lUhOqb6wd
どんなに丁寧に処理したって完全に例外を対応するなんてことは不可能
599の最後でちゃんとやれば良いokみたいに書いちゃったのが良くなかった
ちゃんとやったって無理なことはある
0580デフォルトの名無しさん (アウアウウー Sae9-HJzg)
垢版 |
2019/04/28(日) 19:17:31.79ID:KKCCRPTWa
無関係だけど一応答えるよ

フェイルセーフって言うのは失敗しても安全な状態に落ち着くこと
例えば信号が壊れても青信号になるんじゃなくて赤信号になるような設計

ファイルクローズは別にフェイルセーフの概念と関係ない
tryのfinallyはフェイルセーフじゃないよ
0583デフォルトの名無しさん (アウアウエー Sa13-OsmV)
垢版 |
2019/04/28(日) 19:22:22.23ID:JJw12cyBa
リソースのライフタイムの管理とリソースを使用して何かする責務を別の責務として分離したほうがいい

リソースの取得だけを分離する場合はファクトリーパターンが使われる
ただしこの場合はリソースを閉じる責務とリソースを使用する責務が同じクラスに混在してしまう
結果としてデストラクタでの例外といった問題が連鎖して発生する

これに対応するためにはファクトリーアイソレーションパターンを使う
このパターンならリソースのライフタイム管理とリソースの使用を完全に分離できる
コンストラクタでもデストラクタでもリソースの開閉に由来する例外は発生しなくなる
0584デフォルトの名無しさん (アウアウウー Sae9-HJzg)
垢版 |
2019/04/28(日) 19:23:12.72ID:KKCCRPTWa
デストラクタでたとえば解放忘れの大きなメモリを開放するとしても
その前に他で大きなメモリを確保しようとすると死ぬ

デストラクタでファイルのクローズ忘れをクローズしようとしても
その前に他でファイルを開こうとするとエラーになる

デストラクタでいろいろ開放しても何も助けてない
役に立ったとしても偶然であって実質はバグを握りつぶしてるだけ
0586デフォルトの名無しさん (アウアウエー Sa13-7ni7)
垢版 |
2019/04/28(日) 19:26:43.51ID:kMBz0MBMa
>>580
関係あるからw

同じことをくどくど書くのは嫌いだが、デストラクタの存在理由は
コードの利用者がClose/Disposeを呼び忘れる、というヒューマンエラーに対するフェイルセーフ。

これは議論の余地はないよ
0588デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
垢版 |
2019/04/28(日) 19:28:16.75ID:uWFo9H7Wa
ああ、Dispose呼び出し忘れ対策のデストラクタか
それなら、自分の場合は
・デストラクタには「Dispose(false)」以外書かない(trycatchもしない)
・Dispose()側が例外を投げるかどうかは解放するリソース次第
・デストラクタの中に延々とリソース解放処理なりtry-catchが必要な処理なりを書いてるのだとすれば
 そのソースコードは根本的におかしい
0589デフォルトの名無しさん (アウアウエー Sa13-7ni7)
垢版 |
2019/04/28(日) 19:30:31.27ID:kMBz0MBMa
>>585
だから、デストラクタ「で」積極的にClose処理をするんじゃないの。

Close処理は普通にDispose/Closeに書くに決まっているわけだが、
使用者がそれを呼び忘れても最悪GCのお片付けのタイミングで
Close処理が行われるようにするための仕組みがデストラクタ
0590デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
垢版 |
2019/04/28(日) 19:32:19.82ID:uWFo9H7Wa
ごめんもいっこ
・IDisposableなオブジェクトをDisposeせず使用している時点で実装不備とみなしてよい
(フィールド変数だったらポカミスで解放し忘れはあるかもしれないけど、
 少なくともローカル変数ならusingを意図的に使ってない時点でコーダーが悪意を持ってると判断する)
0593デフォルトの名無しさん (アウアウウー Sae9-HJzg)
垢版 |
2019/04/28(日) 19:35:29.40ID:KKCCRPTWa
自分の使ってるコードで完結してるのにデストラクタでアンマネージなどのリソースを
開放するのは間違った使い方

いくら自信たっぷりに書いてるのか知らないけど間違ってる
0596デフォルトの名無しさん (アウアウウー Sae9-HJzg)
垢版 |
2019/04/28(日) 19:50:07.37ID:KKCCRPTWa
>>594
IDisposable無視して放置する人を野放しにしないためにもデストラクタは不要だと思うわ

デストラクタが呼ばれたか呼ばれないかで意図しないタイミングで不具合が出たりでなかったりするだけだろ
そんなの余計に邪魔だろ
0597デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
垢版 |
2019/04/28(日) 19:50:40.18ID:uWFo9H7Wa
さすがに自前で生成してない(解放しなくていい)オブジェクトはわざわざ解放しないよ

んーと、デストラクタを書かないといけないような処理があるならDispose(false)だけ書く、んだけど
なにか間違ったこと言ったかな
0599デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
垢版 |
2019/04/28(日) 19:54:05.58ID:uWFo9H7Wa
書く必要がないデストラクタなら書かずに済ませるというのは同意

というか普段アンマネージドリソースなんて滅多にさわらないし
まともにデストラクタを書いたのはいったい何年前だろう
0600デフォルトの名無しさん (アウアウウー Sae9-HJzg)
垢版 |
2019/04/28(日) 20:00:46.55ID:KKCCRPTWa
どうしてもデストラクタ使うなら解放忘れを解放するんじゃなくて
デバッグ中に解放忘れてるぞコラということを伝える仕組みを作るほうがまともじゃないかな?

自分の考えは>>584がほぼすべて
0601デフォルトの名無しさん (アウアウクー MM81-K6Yl)
垢版 |
2019/04/28(日) 20:04:36.28ID:PHvM++pOM
>>566
ファクトリーメソッドを作って
その中でInitすれば良かろう
0602デフォルトの名無しさん (アウアウエー Sa13-OsmV)
垢版 |
2019/04/28(日) 20:21:04.08ID:JJw12cyBa
解放忘れを本気で潰そうと思ったらさっき書いたようにファクトリーアイソレーションパターンを使う

Task ExecuteAsync(Func<ISomeResource, Task> job) {
using (var resource = new SomeResource()) {
await resource.OpenAsync();
await job?.Invoke(resource);
await resource.CloseAsync();
}
}

サービス利用者には生成も解放もインターフェースを提供しない
ExecuteAsyncを通さないとリソースにアクセスできないようにすれば解放忘れを完全に予防できる
0609デフォルトの名無しさん (ワッチョイ 252d-t87J)
垢版 |
2019/04/29(月) 12:55:34.62ID:pjV/Nimc0
横からすまんがさあ
DIにMicrosoft.Extensions.DependencyInjection使ってるんだけど、これってコンテナから生成されたオブジェクトって永遠と生き続けるの?
どうやって開放するん?
0611デフォルトの名無しさん (アウアウエー Sa13-OsmV)
垢版 |
2019/04/29(月) 13:39:51.85ID:NUp+Ex1Ma
基本的に生成元になったスコープをDisposeするとスコープ管理下のオブジェクトがまとめて消える
スコープはCreateScopeで再帰的に生成できる
BuildServiceProviderで作ったプロバイダーはルートのスコープに生えてるプロバイダーと考えればいい

アッドシングルトンで登録したやつは親子関係にある全てのスコープで1つしか作れずルートスコープと寿命が同期
アッドスコープドで登録したやつは各スコープ内で1つしか作れず作ったスコープと寿命が同期
アッドトランジエントで登録したやつはスコープ内で何個でも作れて作ったスコープと寿命が同期

ASP.NET Coreでは暗黙的に1つのリクエストに1つのスコープを割り当てる

訂正あったらヨロ
0612デフォルトの名無しさん (ワッチョイ 252d-t87J)
垢版 |
2019/04/29(月) 13:43:03.33ID:pjV/Nimc0
Scope = Asp.net用みたいな気になっていて全然知らなかったよ、ありがとう
ただDIなしの場合にusing句で書けるようなのはDIありでも簡単にかけそうだけど、オブジェクトを扱う箇所が数箇所に分かれてるときは難しそう・・・・
ScopeをDIコンテナに突っ込んだら突っ込んだでまた問題が増えるのかな・・・・
0621デフォルトの名無しさん (ワッチョイ 252d-t87J)
垢版 |
2019/05/01(水) 14:39:10.04ID:NTU1YIA40
インデクサーってpublic T this[int I]{}みたいに定義するらしいけどさあ
ここに出てくるthisの部分って、this以外も入りうる余地ってあるの?
0624デフォルトの名無しさん (ワッチョイ 252d-t87J)
垢版 |
2019/05/01(水) 15:04:58.50ID:NTU1YIA40
ありがとう
無いものについてパッとわかるとか驚くぜ
0625デフォルトの名無しさん (ワッチョイ 67da-RYFy)
垢版 |
2019/05/02(木) 05:11:25.37ID:fWQ7EMkU0
メモ
https://www.enterprisedb.com/download-postgresql-binaries
https://www.devart.com/odbc/postgresql/
https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&;rel=16
https://www.nuget.org/packages/MySql.Data/
https://www.nuget.org/packages/Npgsql/
https://www.nuget.org/packages/dotConnect.Express.for.PostgreSQL/
https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/
https://www.pgadmin.org/download/pgadmin-4-windows/
https://dev.mysql.com/downloads/
0628デフォルトの名無しさん (ワッチョイ ce4a-S1/C)
垢版 |
2019/05/02(木) 19:31:55.56ID:Plm8DXbx0
初心者ですが、乱数系列の初期化(Randomクラスのオブジェクトの生成)は
どこに書くのが正解なんでしょうか?

関数の中に書くと、関数が呼び出されるたびに初期化されるんじゃ?と思えるのでちょっと拙い
関数の外側にプログラムの初めの辺に書いておけばいいのかなあ?とも思うのですが、それもカッコ悪い
0631デフォルトの名無しさん (ワッチョイ cb02-Xm0a)
垢版 |
2019/05/03(金) 03:27:08.36ID:eVcW5sZJ0
>>628
最近のは年月日時分秒を整数にして種にしてるっぽいから、
毎回初期化の方がランダム性が高まるんじゃないかと思ってる。
0633デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
垢版 |
2019/05/03(金) 12:41:41.06ID:Xwdpydd1a
>>628
訳分からん解答が続いてるけど、素直に

インスタンス固有である必要があるならコンストラクタに
staticでよいなら静的コンストラクタに

書けばいいだけ。かっこ悪いとか、くだらないことに悩むのは時間の無駄。
この場合は不要だと思うけど、静的コンストラクタが実行されるのはそのクラスの
静的メンバーに初めてアクセスされたタイミングだと思ったので、その点は場合によっては注意
0638デフォルトの名無しさん (ドコグロ MM2b-jhVB)
垢版 |
2019/05/03(金) 13:39:56.17ID:ffSbfxo8M
>>636
staticだとコンストラクタで実装を差し替えられないから単体テストの邪魔になりやすいというのは一般論としてはある
Randomを差し替える必要があるケースは極めて稀だが、上で述べたように厳密な再現性が求められるケースならありえなくもない
0640デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/03(金) 13:57:48.60ID:Zy40eisO0
>>639
横からすまんが、そのテストしにくい例ってのをコードで見せてくれんかな
学習のためにどうか頼むわ
0641デフォルトの名無しさん (ドコグロ MM7a-jhVB)
垢版 |
2019/05/03(金) 14:05:21.52ID:N/aYDMHoM
>>640
例えばガチャを作ってるとして、0-999の乱数で0-9が出たらSSRを排出する仕様なら、
0と9と10くらいを決め打ちでテストしたくなるだろ?
まあそのために乱数生成器をモックしなきゃいけないような設計には再考の余地があると思うが、状況としては普通にありえるだろう
0648デフォルトの名無しさん (ワッチョイ 8252-M0pk)
垢版 |
2019/05/03(金) 15:12:05.72ID:uS7vqCXY0
>>639
本末転倒だろう。
作るべき物の要件に合わせて乱数生成の挙動を定義して設計するのが優先すべき事項で、その実装をテストするためのコードは必要に応じて用意すればいいだろう。
0652デフォルトの名無しさん (ワッチョイ 6240-51S+)
垢版 |
2019/05/03(金) 15:58:52.41ID:Ue5NRrHW0
教えてください。
以下のコードで、x の定義は問題ないのに y の定義だけコンパイルエラーになってしまいます。

==
const Exception e = null;
const bool x = e == null; // エラーなし、true が設定される。

const Type t = null;
const bool y = t == null; // CS0133 y' に割り当てられた式は定数でなければなりません。
==

何が原因でこのような違いがでるのでしょうか。
また、y を定数のままエラーが出ないように修正することは可能でしょうか。
よろしくお願いいたします。
0657デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
垢版 |
2019/05/03(金) 19:21:25.35ID:Xwdpydd1a
言語仕様の「定数式」の項を見れば別に不思議はないんだけど、
他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」
と思っちゃうね。
0658デフォルトの名無しさん (ワッチョイ 6240-51S+)
垢版 |
2019/05/03(金) 20:24:56.25ID:Ue5NRrHW0
>>653
レスありがとうございます。
定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、
表現が不適切だったかもしれません。失礼いたしました。

>>654
ありがとうございます!うまくいきました。
ちなみにいろいろ試してみると、
string は == が定義されているもののエラーが出ないようです。
さすがに string は特別ということのようですね。
(ただ、typeof(string).IsPrimitive は false にだったりして
 いまいちしっくりきませんが。。。)

==
const string s = null;
const bool z = s == null; // エラーなし、true が設定される。
==

何にせよ、問題はすっきり解消いたしました。
適切なアドバイスどうもありがとうございました。
0659デフォルトの名無しさん (ワッチョイ 6240-51S+)
垢版 |
2019/05/03(金) 20:25:45.58ID:Ue5NRrHW0
>>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 到達できないコードが検出されました
==
0660デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
垢版 |
2019/05/03(金) 20:54:20.72ID:mscz+0vpa
>>659
いやいやいや、俺はおたくにケチつけたわけじゃないよw
const bool y = t == (object)null;

こういうのはぱっと見て意図が分からないと言っただけ。
むしろ「マジックナンバー」を避けるのは良い習慣ですよ
0661デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
垢版 |
2019/05/03(金) 20:57:46.12ID:mscz+0vpa
>>658
>string は == が定義されているもののエラーが出ないようです。
上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。
VSのインストールフォルダに入ってる
0662デフォルトの名無しさん (アウアウエー Sa3a-UklA)
垢版 |
2019/05/03(金) 21:13:39.41ID:rGk2iQn5a
ひょっとして、ES6あたりの感覚で代入onlyの変数を宣言したくてconstキーワードを使おうとしてるのかなと思ってみたり
readonlyなローカル変数みたいな構文ってC#にはまだないんだよね
0663デフォルトの名無しさん (ワッチョイ 6240-51S+)
垢版 |
2019/05/03(金) 22:02:39.62ID:Ue5NRrHW0
>>660
> const bool y = t == (object)null;
> こういうのはぱっと見て意図が分からない
そうですねw
式の意味を考えるなら t == (object)null は
ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど
const うんぬんの話の中でこれはダメですし。

ちなみに今ふと思いついて試してみたんですが、
t is null も == の定義には依存しないものの定数扱いにはならないようです。

>>661
ありがとうございます。
言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような
気がしてきたので、これを機会に勉強してみようと思います。
0664デフォルトの名無しさん (ワッチョイ 6240-51S+)
垢版 |
2019/05/03(金) 22:03:15.73ID:Ue5NRrHW0
>>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);
}
==
0665デフォルトの名無しさん (ワッチョイ 6240-51S+)
垢版 |
2019/05/03(金) 22:05:09.07ID:Ue5NRrHW0
何度もすみません。。。上の妄想コードは間違いです。
正しくはこちら。

==
static class MathEx
{
  public const double Square(double x) => x * x;
}

static class MyConstants
{
  public const double SquarePI = MathEx.Square(Math.PI);
}
==
0670デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/04(土) 14:32:15.09ID:IHSUUilV0
List.Addって、複数のスレッドから同時に呼び出したらデータが壊れる可能性ってあるの?
0678デフォルトの名無しさん (ワッチョイ 9b61-oppc)
垢版 |
2019/05/04(土) 20:18:11.93ID:pMssk1qR0
APIのマニュアルにおいて「スレッドセーフ」という言葉が用いられる場合、たいていは「複数のスレッドからアクセスされても例外を出さない、プログラムがクラッシュしない」というような意味です。

しかしプログラムの目的によっては、例外が出ないだけでは不適切です。

例えば対象が、100個のデータを管理する変数だとします。
その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。
この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。

ってググって出たサイトで拾った
0679デフォルトの名無しさん (ワッチョイ 9b61-oppc)
垢版 |
2019/05/04(土) 20:25:20.65ID:pMssk1qR0
つまり

for(int i=0;i<lst.count;i++)
{
unk un=lst[i];

}

みたいなプログラムを組んだとき
どっかでいきなり要素をゼロにされて死ぬってことは
スレッドセーフだろうがどうだろうが可能性はあるってことだよね

ってことを考えるとスレッドセーフである意味ってあんまりなくて
排他処理は絶対実装しないと駄目だよね?ってこと?
誰か違うと言ってくれ
0681デフォルトの名無しさん (ブーイモ MM93-R0y6)
垢版 |
2019/05/04(土) 21:06:21.08ID:Ui9BQ5TxM
スレッドセーフである意味

あるオブジェクトがプロパティAを持っててメソッド内で
b=aaa(A)+bbb(A);
を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ
最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない

スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ
0682デフォルトの名無しさん (アウアウエー Sa3a-cevp)
垢版 |
2019/05/04(土) 21:07:23.59ID:3sktWiiHa
>>679
その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る
System.Collections.Concurrent系のコレクションは、
例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ)
どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽
0683デフォルトの名無しさん (ドコグロ MM7a-jhVB)
垢版 |
2019/05/04(土) 21:27:48.58ID:qIB0qWQDM
>>679
厳密に他のスレッドとの同期を取らなきゃいけないなら>>682の言うようにBlockingCollection使うか毎回ロックだろうし、
ループ中は他のスレッドによるlstの変更を反映しなくていいならループに入る直前だけロックしてコピーしておけば済む
ケースバイケースだよ
一つ一般的なアドバイスをしておくと、並列処理のコツはデリケートな前提をなるべく設けずに極力ロバストな設計をすることだ
要件が許す限りにおいて、少々処理の順番が入れ替わったり処理間の同期が取れてなかったりしても問題にならないつくりにするのが理想
0684デフォルトの名無しさん (ワッチョイ e22f-GsKc)
垢版 |
2019/05/04(土) 22:09:10.98ID:56LrGuhB0
非同期処理は複数のスレッドが同じデータを弄ろうとすることによる不整合は起きないけど
コールスタックは複数になるから
同じデータに触ると訳ワカメになる事があった
0685デフォルトの名無しさん (ワッチョイ 9b61-oppc)
垢版 |
2019/05/04(土) 23:16:04.81ID:pMssk1qR0
(||゚Д゚)ヒィィィ!(゚Д゚||)
じゃあ>>679みてーな処理を書いたら
スレッドセーフなんて関係なく
バグるんだね
こぇえええええ
じゃなくて終わったわ
今まで組んだもんでテキトーにやった箇所全部終わってる気がする
0686デフォルトの名無しさん (アウアウエー Sa3a-UklA)
垢版 |
2019/05/04(土) 23:28:33.99ID:J15hVQV0a
まあ複数スレッドで同時並行処理するときにはそのへん慎重を期さないと
再現困難なバグを埋め込んじゃうからねえ
同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ
0687デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
垢版 |
2019/05/05(日) 05:07:07.08ID:tvdtPjB+0
マルチスレッドの恐ろしさは、たまにしかバグらない事。
ほとんどは正常に動くから、質が悪い。
必ず、バグらないだろ

それで喧嘩になる事も多い。
マルチスレッドは、ベテランでもバグるからやめろと言っても、
ほら、バグらないでしょ? と、突っかかってくる

その時には、バグらないと言うと、
千回実行しても、バグらないでしょ? と、突っかかってくる。
でも、その時にはバグらない

バグる立証をするのが難しい

だから、Ruby をやった人は、関数型言語のElixir をやる。
他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い

1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。
何回バグらないで実行すれば、正しいと認めるのか、と問われても困る
0691デフォルトの名無しさん (ワッチョイ 8252-M0pk)
垢版 |
2019/05/05(日) 10:34:54.98ID:RPhfdkos0
>>687
マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。

あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。
0693デフォルトの名無しさん (ワッチョイ 9b61-oppc)
垢版 |
2019/05/05(日) 10:48:34.16ID:uudMW5nw0
スレッドセーフは単発のメソッドが競合しないだけで
一連の処理についての動作保証をするものではないと

マルチスレッドはやらなくていいならそれに越したことはないけど
絶対に駄目というわけではなく

排他処理を組まないことが害悪
0694デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
垢版 |
2019/05/05(日) 11:21:06.67ID:IBoHsNppa
排他制御をしなくても安全に並列処理できるように設計することが大事
まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい
大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき
0696デフォルトの名無しさん (アウアウクー MM9f-GsKc)
垢版 |
2019/05/05(日) 12:22:10.03ID:6g/cxz/+M
ぱられるふぉーってのを使えば良いんじゃね?
知らんけど
0697デフォルトの名無しさん (ワッチョイ 9b61-oppc)
垢版 |
2019/05/05(日) 12:32:51.31ID:uudMW5nw0
>>694
うーん、でも>>679みたいなこと
やった時点で終わりってまともじゃねぇよ
コードで一瞬でもすきを見せたら終了みたいになっちゃうじゃん

お前の理想はなんかあるんだろうけど
他人が叫ぶスレッドセーフに頼っちゃ駄目だよ
アプリの仕様として排他処理を盛り込むべき
0699デフォルトの名無しさん (ドコグロ MM02-oppc)
垢版 |
2019/05/05(日) 13:15:03.75ID:l159r3xkM
>>698
それって記述が簡単ってだけでしょ?
ロック中にアクセスしたらどういう動作するの?
次回に回すの?
待機して待つの?
そういうのってスレッド毎にステータスを持たせて
マトリックスで管理しないと制御できてると俺は認めない

ジジイだから
0700デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 13:34:55.82ID:1Pm7tIcB0
VisualBasic大先生を怒らせてしまったようだな
0701デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
垢版 |
2019/05/05(日) 13:41:27.68ID:IBoHsNppa
>>698
だからさ
そんな不安定なロジックを書かなくても良いようにちゃんと設計するのが並列処理の王道なんだよ
lockブロックは最初の一回を書くときは楽かもしれんがだんだん難しくなるぞ
そのコレクションを使う全てのプログラマが並列性を意識して正確に排他制御をコーディングしなければならない
これは実用的なシステムの規模になるとかなり大きな負担になる
0702デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
垢版 |
2019/05/05(日) 14:02:39.93ID:IBoHsNppa
そもそもロックって論外なんだわ

世の中の並列処理の目的ってのはほぼ2種類に分類されるんだよ
@インフラストラクチャ処理中にCPUを待たせたくない
A消費コア数を増やして暇なCPUを働かせたい

よーするにCPUを無駄にしたくないわけ
でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう
ロックすると並列処理をする目的そのものに反してしまう
なのでロックは基本使わず最後の手段ってわけ

この辺りは(やや古い本だが)Microsoft Pressのプログラミング.NET Franework第4版やEffectiveシリーズでも解説されてることだね
どちらも良書なので脱初心者を目指しているだろう君達は是非とも読むべきだ
0703デフォルトの名無しさん (ドコグロ MM7a-jhVB)
垢版 |
2019/05/05(日) 14:08:00.64ID:kZz1htUnM
その通り
極端な話、並列処理なんてそれぞれ別のサーバーで実行させりゃいいんだよ
それがレイテンシやコストなどの問題で無理なら代わりにプロセスを分ければいい
そもダメならリクエストやワーカー単位でスレッドを分け、といった具合に、共有するリソースを最小限にすることを優先する
0705デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 18:00:00.04ID:1Pm7tIcB0
非同期処理全盛の時代にこれじゃ、世の中やばいコード(or非同期処理のつもりが同期処理されてるコード)だらけだろうな
Qiitaとか見ててもやばい奴だらけだ
0707デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 18:09:44.07ID:1Pm7tIcB0
そもそも、世のサンプルプログラムの多くが欠陥品なのが諸悪の根幹なのかもな
劣化コピーしちゃうQiita屋とかコピペプログラマが全部危険なコードを書いてしまう
0712デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
垢版 |
2019/05/05(日) 18:33:17.95ID:IBoHsNppa
Mutexは相変わらずスレッドをブロックするうえにMonitorよりも消費リソースが大きい
その代わりプロセスを超えて待機処理を実装できるというものだ
よーするにlockよりもっと遅いんだよ
0716デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 18:41:05.51ID:1Pm7tIcB0
Mutexはロックがいらないスレッド同士でもロックしちゃうのが使いづらいな
回避できるのかはしらんが
0721デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 18:48:17.37ID:1Pm7tIcB0
ロックが取得できないだけ
0728デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
垢版 |
2019/05/05(日) 19:00:35.89ID:IBoHsNppa
>>727
はぁ?
言い出しっぺのてめーがパフォーマンス一番良いミューテックスのベンチ出せや
一番ってんならロックと比較なんてケチくせえこと言わんで他の排他制御機構とも比較しろよ?
0730デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 19:07:06.98ID:1Pm7tIcB0
>>725
普通に取得できるのを待ってるな
まあ、ロックが取得できるまで制御を戻したりはしておらんわ
0731デフォルトの名無しさん (ワッチョイ 9b61-oppc)
垢版 |
2019/05/05(日) 19:12:25.48ID:uudMW5nw0
>>730
だよね
ちょっと調べてるけど
普通の排他処理組んでおきたくて

lock
ReaderWriterLockSlim
UpgradeableReadLock

なんか普通の排他処理したいだけなのに
たくさん出てきちゃったぞ
これ全部使っても
ん?排他処理できてんのか?
って疑問が晴れない
この言語非同期処理の対応手薄なんだよねまだ
時期尚早として触らんことにしたw
0732デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/05(日) 19:21:47.99ID:1Pm7tIcB0
LockやMutexは初心者本の範囲内だからしらんのはまずいよ
0735デフォルトの名無しさん (ワッチョイ cb02-Xm0a)
垢版 |
2019/05/06(月) 02:20:35.00ID:wkmj+bF20
並列処理なら.netなんだからF#でSTM使え。
何で関数型言語が注目されたんだよ。
並列処理に有利だからだろ。
0736デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
垢版 |
2019/05/06(月) 04:59:30.75ID:wr9bFPpT0
マルチスレッドなんか無理!
だから、Ruby の人は、Elixir を使う

作るのに何百年も掛かる、人類の成果、Erlang VM + Ruby = Elixir。
ErlangVMを、Rubyでラップしたもの

Elixirの小プロセスなら、10万プロセスも余裕!
パイプラインと同じ

関数型だから状態を持たない。
ただ、データを変換していく関数をつなげていくだけ!
0737デフォルトの名無しさん (ワッチョイ df01-jhVB)
垢版 |
2019/05/06(月) 07:40:48.06ID:WDjCowqB0
>>736
Rubyにマルチスレッドは、無理!
RubyはいわゆるGILといって、同時に複数のスレッドが走らないような排他制御がVMレベルでかかっている
これはVM自体がスレッドセーフでないクソ実装であることに起因する制約である
もちろんC#にはそんなものはないし、ベンチマークだとErlangより速い
0742デフォルトの名無しさん (ワッチョイ 4f85-9El8)
垢版 |
2019/05/06(月) 21:06:24.34ID:Gi+4ls7q0
画面レイアウトがクソみたいに崩れたぞ死ねや
0745デフォルトの名無しさん (ワッチョイ 4f85-ahOC)
垢版 |
2019/05/06(月) 21:39:51.78ID:Gi+4ls7q0
>>744
ありがとう
form1.csのデザインのAutoScaleModeをNoneにしたけど何も起こらなかったからあきらめてたけど、そっちを修正したら解決したわ。
0746デフォルトの名無しさん (ワッチョイ 622f-0fpa)
垢版 |
2019/05/07(火) 00:11:46.09ID:HkLoI6gC0
>>740
令和を1文字で表すやつのために、フォントをいじったんだが、そのときに既存の文字の幅が変わったらしい
なのでまあ、令和対応のせいだと言えばそうなんじゃね

つか明日からどれだけ影響出てるか考えると鬱だわ
0760デフォルトの名無しさん (ドコグロ MM2b-jhVB)
垢版 |
2019/05/07(火) 13:50:03.67ID:9iRY6hHtM
あと技術的な最大の障害はWebFormsだろう
WebFormsは.NET Coreではサポートされてないし、される気配もない
既存資産の移行もさることながら、.NETドカタはWebForms頼りで標準的なWeb開発のスキルを持たない奴も多い
彼らはWebアプリケーションの開発が不可能になり、路頭に迷うことになる
0761デフォルトの名無しさん (ワッチョイ f72d-/hjB)
垢版 |
2019/05/07(火) 17:00:19.52ID:1tK/VkfG0
すまんが、Stream型って前の方だけメモリを解放するとか器用なことは出来ないの?
0766デフォルトの名無しさん (アウアウカー Sa47-V/oy)
垢版 |
2019/05/08(水) 21:27:25.44ID:4kxgmlsqa
C#でwindowsPCのマイク音量設定を設けたアプリを作りたいんですが情報がいまいち出てきません
今現在どのような方法が推奨として使われているのでしょうか
0768デフォルトの名無しさん (アウアウカー Saeb-8Yy7)
垢版 |
2019/05/09(木) 20:00:37.76ID:25KQckNoa
>>767
ありがとうございます
調べてみます!
0769デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/10(金) 07:09:33.41ID:8h0VP8xa0
RPgエディタみたいなタイルマップを配置する機能を作る場合、画像を配置するフォームは何が適切でしょうか?
前にも聞いた気がするんですが、レスを忘れてしまって、、、
0773デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/10(金) 12:26:08.70ID:8h0VP8xa0
>>771
ピクチャボックスですね
毎回忘れちゃうです
0775デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/10(金) 18:53:28.94ID:8h0VP8xa0
visual studioのhddへのアクセスは制限できますか?
激重です
SSDにしろって話ですけどね
0776デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/10(金) 19:04:05.18ID:8h0VP8xa0
>>774
picturebox自体を何個も並べるんですか?
picturebox1つの中に複数の画像を並べるですか?
0777デフォルトの名無しさん (ドコグロ MMdf-nP+x)
垢版 |
2019/05/10(金) 19:28:03.03ID:tfYAY6pzM
>>776
どっちでもいいよ
どのみち今の君のレベルで作ってもまともに使い物になるようなものにはならないから、うだうだ考えるより手の届く範囲で経験値を積んだ方がいい
行き詰まる頃にはだいぶレベルが上がってるはずだから、また作り直す
三周目くらいになればまともに作れるようになってるよ
0779デフォルトの名無しさん (ワッチョイ d768-Lzly)
垢版 |
2019/05/11(土) 12:14:17.95ID:kDrnBD/r0
低レベルな質問で申し訳ないのですが、循環バッファって凄い便利だから
全ての配列は循環バッファで実装すればいいと思うのですが、デメリットはあるんでしょうか?
Delete
Insert
Add
が全てO(1)で出来るって凄くないですか?
0782デフォルトの名無しさん (ワッチョイ 375f-4N0r)
垢版 |
2019/05/11(土) 12:39:31.51ID:td9YBJ3L0
>>779
>***全ての配列は***循環バッファで実装

配列のままの方が良い場合もあるが
そうしたいならそうすればいい

ただし配列以外の構造が必要になるケースでは使えないぞ
0784デフォルトの名無しさん (アウアウエー Sadf-HRFV)
垢版 |
2019/05/11(土) 12:59:31.48ID:aDjFJI/sa
>>779
Addは、reallocationを考慮しても償却定数時間で出来そうだが
Delete, InsertがO(1)だというソースをくれ、「末尾」という指定がない以上任意位置だよな?
途中要素をDelete,Insertしたら要素の詰め直しが必要でO(N)になると思うんだが
O(N)になるならList<T>で十分という話になる
0788デフォルトの名無しさん (ワッチョイ 972c-vVMj)
垢版 |
2019/05/11(土) 16:14:40.10ID:MBpEq5nf0
Visual C#で電卓を作ってます。
ある数字ボタンをクリックしたとき、(Button)sender).TextでTextran欄の文字を取得できますが
クリックではなく、キーボード入力で同様にしたいのですが、どうすればできますか?
0790デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/11(土) 17:24:06.36ID:qy13k0f30
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
だとエラーになります
何が悪いでしょうか。
0794デフォルトの名無しさん (アウアウウー Sa1b-vVMj)
垢版 |
2019/05/11(土) 18:25:33.06ID:dxU2Wm5sa
>>790
相対パスとかの以前の問題

実際の環境にimgフォルダが作られているか?
*.exeと言った実行ファイルのある場所を見てみたらいい

多分作られてないしその中にgifファイルも作られてない
0795デフォルトの名無しさん (ワッチョイ 577b-5AMV)
垢版 |
2019/05/11(土) 18:56:38.28ID:VR7g318H0
>>790
>>794を参考にするべきだけどパスの位置を確認したいのなら読み込む前のところで
MessageBox.Show(System.IO.Path.GetFullPath(@"img\volly.gif"));//指定しようとしているパスを入れる
とでも入れとけばその相対パスがどこを指しているのか絶対パスが表示される
相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる
0796デフォルトの名無しさん (ワッチョイ 375f-BD3m)
垢版 |
2019/05/11(土) 19:09:02.07ID:vfaLavs00
>>795
> 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる
これは正しくないよ。その時のカレントフォルダが基準。
何もしていなければ多くの場合は実行ファイルの場所と一致するから、結果としてそうなることが多いけど。
0798デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 10:29:51.59ID:zQc98Y8H0
Console.WriteLine(System.Environment.CurrentDirectory);
としても出力には何も出てこないのですか?
出てこないです
作業フォルダっていうのはform1.csとは別のファイルのことなんですね
0800デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 10:52:27.58ID:zQc98Y8H0
おっ いけました
'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' が読み込まれました。モジュールがシンボルなしでビルドされました。
これで正しいのかわからないですが、なんで実行ファイルがこんな場所にあるんでしょうか。プロジェクト内にあるのかと思ってましたが
0811デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 13:55:38.46ID:zQc98Y8H0
混乱してるんで一度整理します
0813デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 15:18:28.27ID:zQc98Y8H0
そうなんですが、そのために相対パスを設定したいんです
絶対パスでも別に不自由しないですが、ソフトを作るときは相対パスも使うと思うので
0814デフォルトの名無しさん (ワッチョイ 7f02-AZoQ)
垢版 |
2019/05/12(日) 15:40:46.00ID:Q+XtJRAz0
>>790
VisualStudioでF5実行やデバッグをすると(何も設定を変えてなければ)ビルド出力先がカレントディレクトリになる
相対パスでエラーになる原因はビルド出力先にimg\volly.gifが存在しないから
なのでimg\volly.gifをビルド出力先にコピーしてやれば相対パスで読み込めるようになる

プロジェクトエクスプローラーでimg\volly.gifを右クリックしてプロパティを開いて
「ビルド時のアクション」を「なし」に変更
「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更
これでビルドすると出力先フォルダにimg\volly.gifがコピーされるようになる
0815デフォルトの名無しさん (ワッチョイ b761-wbL8)
垢版 |
2019/05/12(日) 15:41:40.00ID:CayLEbz10
>>813
実は業務ではカレントディレクトリをあてにした動作はさせない
なぜなら制御できないから
なので相対パスをプログラムで取得したら
自分が基準とするディレクトリパスと自力で連結させて絶対パスにして使う
0816デフォルトの名無しさん (ワッチョイ 7f02-AZoQ)
垢版 |
2019/05/12(日) 15:43:12.88ID:Q+XtJRAz0
画像ファイルがたくさんあって1こ1こ設定するのがめんどくさい場合は
imgフォルダを右クリックして同じようにコピーの設定をする
そうすれば1つの設定でフォルダごとまるごとコピーしてくれる
0817デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/12(日) 15:54:06.76ID:0iYfvooEa
まあ、そもそも特に理由がなければ画像ファイルはリソースに突っ込むべきだね。

どうしても生の画像ファイルを使いたいならソリューションエクスプローラーからプロジェクトに追加して
プロパティウィンドウの「出力ディレクトリにコピー」の値を「常にコピーする」にすれば
ビルトすると自動的に実行ファイルと同じディレクトリにコピーされるようになる。

ディレクトリの階層を作りたいならソリューションエクスプローラ上で階層を作れば
それがそのまま反映されてコピーされる。

実行ファイルのディレクトリはこれで
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.startuppath
0818デフォルトの名無しさん (アウアウエー Sadf-HRFV)
垢版 |
2019/05/12(日) 16:00:55.91ID:xH15WcK+a
OpenFileDialogなどを使うだけでカレントディレクトリは変わるし
EXEのショートカット経由で起動する場合は任意のカレントディレクトリ位置に出来るし
他プロセスからWorkingDirectory設定無しで起動される場合も考えたりすると
プログラム中で内部的に相対パスを保持するのは構わないけど
IO系APIを呼び出す時は、AppDomain.BaseDirectoryなどと結合して絶対パスにしてから渡したほうがいい
0819デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 16:17:07.77ID:zQc98Y8H0
なるほど
自分で絶対パスを1つ決めて、そこを起点にすると
0820デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 17:07:03.34ID:zQc98Y8H0
関係ないんですけど、コードってどこに保存してますか?
普通にテキストエディタに保存してますけど
0822デフォルトの名無しさん (ドコグロ MMdf-nP+x)
垢版 |
2019/05/12(日) 17:22:08.37ID:O1RPDIWFM
>>820
一般的にはGitを使ってGitHubで管理する
だけど今の君のレベルではそんなのは必要ない
今の君のレベルで書いたコードなんて一ヶ月後にはゴミであり、大切に保存する価値などない
一ヶ月後のレベルの上がった君から見ればゴミだという意味であり、決して悪い意味じゃないから勘違いするなよ
0823デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 17:25:13.38ID:zQc98Y8H0
自分の環境の場合、プロジェクトフォルダ\bin\debug\hoge.exe
という場所に実行ファイルが作られるようです
Cフォルダの直下あたりに作られるという説明がされちえますが、何か間違ってますかね
//カレントディレクトリの取得
MessageBox.Show(System.IO.Directory.GetCurrentDirectory());
場所ってのは自動的に決まる感じですか
0828デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/12(日) 19:36:30.99ID:zQc98Y8H0
すみません
がんばります
0829デフォルトの名無しさん (ワッチョイ 576e-ESYi)
垢版 |
2019/05/12(日) 22:05:40.63ID:TmkC4DiT0
LINQ勉強しててよくわかんないんですけど範囲変数ってあれ事前に宣言しなくていいんですか?
マイクロソフトのサンプルとか見ても例えばselect score in scoresとか出てきてscoreどこから出てきたってなるんですけど
全体的な印象ですけど、SQLはちょろっとかじったので列名無いのにSQLっぽく書いてるLINQってなんかしっくりこないんですよね……
0830デフォルトの名無しさん (ワッチョイ ffda-y0Vo)
垢版 |
2019/05/12(日) 22:31:12.34ID:RcOwQ/d80
>>829

Linqはクエリ式よりメソッド構文の方がとっつきやすい。
クエリ式はSQLに似てるけど、C#の文法に照らすと異質だしな

scores.Select(score => ・・・);

scoreはどこから出てきたの?ってことならまずはラムダ式からじゃないかな
0831デフォルトの名無しさん (ワッチョイ 9f2c-Ounp)
垢版 |
2019/05/12(日) 22:31:33.06ID:5S2KiOuR0
まず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には拡張メソッドを使う
0836デフォルトの名無しさん (ワッチョイ ffda-y0Vo)
垢版 |
2019/05/13(月) 08:29:59.30ID:V/EVdZRD0
>>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"がセットされる。
0837入門者 (ワッチョイ 9fad-vM1y)
垢版 |
2019/05/13(月) 08:34:33.58ID:W1wujo120
>>836
そうなのですが
でもvalueで代入してないのに何故Nameプロパティが機能してるのか分からなくて…
setとgetの中身を記述しなくてもプロパティは機能するのですか?
0838デフォルトの名無しさん (ワッチョイ 7f7c-lLD7)
垢版 |
2019/05/13(月) 08:52:41.32ID:VAfV6Qs50
public string Hoge { get; set; }

private string _Hoge;
public string Hoge { get { return this._Hoge; } set { this._Hoge = value; } }
の省略構文みたいな感じになる
(実際にはこの_HogeはC#からアクセスできない名前にコンパイルされる)
0840デフォルトの名無しさん (JP 0H4f-vM1y)
垢版 |
2019/05/13(月) 10:05:53.21ID:yzhNtOt8H
ありがとうございました

>>831
https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/query-expression-basics
そうですねfromの間違いでした失礼しました
「scoreはそのクエリ構文内で使うローカル変数的なもの」ってのは割としっくり来ました
「LINQ/クエリ構文は1次元相手にも使える」SQLとは全くの別物と考えて頭からっぽにして勉強しなおしたほうがよさそうですね
0841デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 15:49:43.81ID:d2gOVbtC0
vsを軽くするセッティングはないでしょうか?
重くなる原因はhddへのアクセスが100になってしまうからです
SSDはないです
0842デフォルトの名無しさん (ワッチョイ 9f40-BD3m)
垢版 |
2019/05/13(月) 16:02:30.23ID:UKQBojaO0
object 型の変数 x に int 型にキャストできる型(short 型や byte 型など)の値が代入されているときに
その値を int 型にキャストしたいのですが、(int)x とすると InvalidCastException が投げられてしまいます。
x に代入されている値が例えば short 型だと分かっているなら (int)(short)x でうまくいくのですが、
この方法だといちいち値の型を調べる必要があるのでもっとスマートな方法があれば教えていただきたいです。
一応自分でも考えてみたところ int.Parse(x.ToString()) なら x の型によらずうまくいったのですが、
値の変換をするだけなのに文字列を経由するのはすごく無駄なことをしているような気がします。
よろしくお願いいたします。
0843デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:05:08.31ID:d2gOVbtC0
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);
}
コードでコントロールを追加したいのですが、ボタンは追加されませんでした
エラーでも出てくれればいいんですが、エラーは出ません
エラーは出ないけど、思い通りに動かない場合、何をヒントにしたらいいでしょうか
0844デフォルトの名無しさん (スッップ Sdbf-0pSk)
垢版 |
2019/05/13(月) 16:07:12.88ID:XGLfyuuud
ググりゃいくらでも記事出てくるやんけ
そいつらは試したの?
自身の環境も書かない、何を試したかも書かない、知識不足なのに勝手に要因を決めつける
初めて質問するならまだしも散々してきといてそれ?
0846デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:14:20.97ID:d2gOVbtC0
出てきました
場所が悪かったようです
ごめんなさい
0847デフォルトの名無しさん (ワッチョイ 9f40-BD3m)
垢版 |
2019/05/13(月) 16:14:45.92ID:UKQBojaO0
>>843
そのコードをコピペして試してみたら私の方では問題なく表示されました。
そちらでうまくいかない原因は
・Form1_Load が呼び出されていない
・追加したボタンの上に別のコントロールが重なってしまっている
あたりではないでしょうか。

とりあえず Form1_Load が呼び出されているかどうかを確認するために
Form1_Load の最後に
MessageBox.Show("呼び出されてるよ"); を追加してみて、
メッセージボックスが表示されるかどうかを確認されてみてはいかがでしょうか。
0848デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:15:55.94ID:d2gOVbtC0
>>844
問題はhddへのアクセスです
これは公式のサイトでは、SSDへの交換を推奨しています
それ以外の手段はないかなと思って質問しました
0849デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 16:16:41.14ID:d2gOVbtC0
>>847
ありがとうございます
位置が0 0だと左側に隠れてしまうようでした
0851デフォルトの名無しさん (ワッチョイ 7f2d-vM1y)
垢版 |
2019/05/13(月) 16:31:17.78ID:fb9Hu3lu0
ついでに聞きたいんだけど、このボタンの描画ってUIスレッドで実行されることは保証されてるの?
0853デフォルトの名無しさん (ワッチョイ 9f40-BD3m)
垢版 |
2019/05/13(月) 16:51:55.46ID:UKQBojaO0
>>852
まさに探していたものです!
最悪の場合、型ごとに場合分けしてキャストするメソッドでも
作ろうかと思っていたのですが、実にスッキリ解決できました。
どうもありがとうございました。
0855デフォルトの名無しさん (アウウィフ FF1b-8Yy7)
垢版 |
2019/05/13(月) 18:45:40.09ID:cAHvDA7yF
PCからのサウンド出力をイヤホンが刺さっている刺さっていないに関わらず、内部スピーカーかイヤホンか選択して出すにはどうしたらいいでしょう
NAudioを使っていろいろ試してるんですがうまくいきません

OS Windows10
サウンドデバイスがSpeakers/Headphones Realtek
だとサウンドデバイスがスピーカーとヘッドホンに分かれていませんが、これだと無理なのでしょうか
0857デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 20:12:51.62ID:d2gOVbtC0
public Form1()
{
MessageBox.Show("form1");
}

private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("form2");
}

フォームアプリについてなんですが、この2つ関数の違いはなんですか?
タイミング的にはform1関数が先なんですが、どう使い分けるんでしょうか?
0858デフォルトの名無しさん (アウアウエー Sadf-HRFV)
垢版 |
2019/05/13(月) 20:22:07.84ID:zDycstDZa
>>857
先に言語の入門本やサイトなどを読むべき
そうすればクラス名と同一名のメソッドには特別な意味があることが分かるし
そのキーワードと一緒にイベント名で検索すれば関連する話題も出てくる
0860デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/13(月) 20:29:39.44ID:d2gOVbtC0
調べた限りでは
フォームが作られるときと、作られて読み込まれたとき
という差でしょうか
0862デフォルトの名無しさん (ワッチョイ ff7b-t4ir)
垢版 |
2019/05/13(月) 20:47:37.18ID:XlJDR9UI0
>>855
その機器のドライバにAPIでも無ければ少なくともC#では無理
ハードウェアの方から調べることでここで質問して答えられるようなものではないと思う
>>860
http://bbs.wankuma.com/index.cgi?mode=al2&;namber=38433&KLOG=66
コンストラクタはクラスで必ずはじめに実行されるもの
イベントメソッドと分けて考えないと
0864デフォルトの名無しさん (アウアウカー Saeb-8Yy7)
垢版 |
2019/05/13(月) 21:38:52.34ID:ZJ4TG7EAa
>>856>>861>>862
ありがとうございます

無理ですか。。
Audio Switcherなるものがあるのでソフトウェアからの制御もなんとか出来るかと思ったのですが
0869デフォルトの名無しさん (ワッチョイ bf1c-Fjsy)
垢版 |
2019/05/13(月) 23:05:51.31ID:0pB96hJZ0
プラグが刺されるとオープンになるジャック使ってるのは、プラグが刺されたらスピーカーから音が鳴らなくて良いものだけだろ。
テレビでも最近のはそんなジャック使ってないわw
ジャックにプラグ刺されてるか判定してるだけ。

お前はどんなラジカセで書き込みしてるんだ?
0870デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/13(月) 23:08:05.97ID:jADcqpCya
>>869
確認してから書いた方がいいよ。

特殊な業務用とかフィリップスみたいなところが作ってる超高級品は知らんけど、
大概のTVはそんなもったいぶったことしてないの。する意味がないでしょ
0871デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/13(月) 23:16:14.24ID:lwKqLD9e0
>>870
WindowsだとUSB経由とかS/PDIDとか有るし、そこに必ずSPが繋がっているとも限らないから
音声の切り替えはソフトでやっているのよ
イヤフォンの切り替え機能って俺の記憶だとWindows10 が最初だよ
0873デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/13(月) 23:28:52.35ID:jADcqpCya
>>871
それはオーディオデバイスが複数ある時にどれを有効にするかって話と違うの?

あと、高級品のサウンドカードだと複数系統の出力があってそれぞれボリュームコントロールが
ついていたりするかもしれないが、そういうの使ってるならこんな質問してないと思うよ。

普通に考えてオンボードのサウンドしかついてない普通のPC前提の質問じゃないの?
0874デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/13(月) 23:31:41.38ID:jADcqpCya
なんかググるとM/BによってヘッドホンとSP(ライン出力)が排他になってるのと
そうでないのがあるみたいだけど、質問者みたいに排他になってる場合は普通は
物理的に切り替えてるはずなんで、ソフトじゃどうにもならんと思うよ
0875デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/13(月) 23:32:56.12ID:lwKqLD9e0
>>873
普通のパソコンだってUSBのデコーダー付けられるだろ
それがどうやって物理的に切り替えられるのか考えてくれよ
それと俺は音楽プレーヤーソフト作ったこと有るから、恐らくあんたよりは詳しい
0876デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/13(月) 23:38:00.03ID:jADcqpCya
>>875
USB接続のオーディオデバイスを使ったら
M/Bのヘッドホンからはそもそも音が出ないと思うんだけどね普通は

複数のオーディオデバイスを同時に有効にして同じ音を出す、
なんて芸当できるんだっけ?
0880デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/13(月) 23:51:07.37ID:jADcqpCya
>>878
いやちょっと何を言ってるのか分からないんだけど、
ハードウェアがそうなってなきゃソフトがいくら頑張っても手も足も出ないのよ

質問者の環境はSP出力とヘッドフォン出力が排他的になってる環境で、
その切り替えは普通はメカ接点で物理的に行われるものだから、ソフトじゃどうしようもないよ
0881デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/13(月) 23:55:36.69ID:lwKqLD9e0
>>880
少なくとも今はHDMI経由でテレビから音声流す機能は標準搭載されているから
年代物のパソコンを除けばデジタル音声出力機能は標準搭載だよ
それをどうやってイヤフォンと物理的に切り替えるのか考えたら無理だと判るでしょ
Windows10から自動切り替えはできるようになっているけど、当然ソフトで制御しているし
それをVista以降はAPIとしてプログラマーが簡単に触れるようになっている
0882デフォルトの名無しさん (アウアウエー Sadf-4N0r)
垢版 |
2019/05/13(月) 23:55:59.16ID:ec7a7a6ia
いやちょっと何を言ってるのか分からないんだけど、
メカ接点で物理的に行われるが、
SP出力とヘッドフォン出力が排他的になってるのは今時はソフトの設定でしょ?
0883デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/13(月) 23:58:20.52ID:jADcqpCya
>>881
だーから、その場合は普通はM/Bのヘッドホンからは音出ませんよ。
M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってるだから

>>882
今時も糞もないってだからw
M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってて、メカスイッチでそれを
ライン出力(スピーカー)と切り替えてるだけなので
0884デフォルトの名無しさん (アウアウエー Sadf-4N0r)
垢版 |
2019/05/14(火) 00:00:01.39ID:/tIovtjDa
Mixer使えって話でしょ
0885デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/14(火) 00:04:48.16ID:vkfPDW5o0
>>882
サウンドミキサーってのがWindows95には既に付いていて、それで音声の切り替えとかマスターボリュームを制御していたから
XPまでのソフトでは大本の切り替えとか不可能だった
しかしVISTAから全てソフトから見えるようになって、ソフトごとにどの出力から出すなどの指定ができるようになった
同じパソコンでイヤフォンとスピーカーから違う曲を流すことさえやろうと思えばできるんだよ
0887デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 00:14:28.54ID:94a7CpYNa
>>885
えーっとですねえ、だからそんな芸当はHWが対応してなきゃできないんだってw

標準的なPCのオンボードのオーディオデバイスはオーディオ出力が一つしかないので、
そんな芸当は逆立ちしても不可能ですw

物理的な出力端子の数 = オーディオ出力の数
ではないのよ。
0889デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/14(火) 00:15:52.53ID:vkfPDW5o0
UWPのMediaPlayerでもオーディオ出力先は好きなように変えることができる
https://docs.microsoft.com/ja-jp/windows/uwp/audio-video-camera/play-audio-and-video-with-mediaplayer

このページ内の「特定のオーディオ エンドポイントへの出力」ってのがピンポイントでは有るが、これはUWPのモジュールで最近WinFormsから使えるようになったが
まだ未完成な部分もあって割と面倒

ただ、同じことはAPIつかって地道に作ることもできるよ
0890デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/14(火) 00:20:22.84ID:vkfPDW5o0
>>>887
Windows10なら右下のスピーカーマーク押して「サウンド」ってのを選択すると出てくるダイアログで
「再生」ってタブを押せば、そのパソコンで使える音声出力先が出てくるが
出力が1つしか無いなんて化石のようなパソコンは見たことないわ
最低限スピーカーとイヤフォンとHDMIぐらいは付いている
0892デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 00:25:02.63ID:94a7CpYNa
>>890
だから何度も同じことを言わせないで。
既定のオーディオデバイスは一つしか選択できない
だからHDMIのモニターから音を出すと普通は同じ音をM/Bのヘッドホン端子から
出力することはできないの
0896デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 00:29:20.12ID:94a7CpYNa
>>894
ソフトで切り替える?
何を言ってるのか分からないよ。

単純な質問だ。
君のPCではHDMIのモニタを既定のサウンドデバイスに選択している時に、
同じ音をM/Bのヘッドフォン端子からも聞くことができるのかい?

できないってw
今まで知らなかったのか
0897デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/14(火) 00:30:46.74ID:vkfPDW5o0
>>895
string audioSelector = MediaDevice.GetAudioRenderSelector();
var outputDevices = await DeviceInformation.FindAllAsync(audioSelector);
foreach (var device in outputDevices)
{
var deviceItem = new ComboBoxItem();
deviceItem.Content = device.Name;
deviceItem.Tag = device;
_audioDeviceComboBox.Items.Add(deviceItem);
}

コンボボックスで指定した出力先に音声を切り替えているだろ
頭弱いねぇ
0901デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 00:34:46.05ID:94a7CpYNa
もうボケ老人の繰り言だけど、だから普通のPCのオーディオ出力端子っていうのは
ヘッドホンとライン出力と2系統あるように見えるけど、実態は1つなんだよw

2つの別々のADCに繋がってるわけじゃないの。同じものをアナログ的に分配してるだけなの
0905デフォルトの名無しさん (ワッチョイ b763-0pSk)
垢版 |
2019/05/14(火) 00:41:10.69ID:KlvEEe7u0
話し合ってるレイヤーが違うんだよ
いい加減気付いて質問者のためになるレスをしてくれ
質問内容が不明瞭なら明確になる質問を返せ
想像で質問内容を決めつけて延々と罵り合ってるだけで肝心の質問は何一つ進展してないぞ
0906デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 00:41:44.61ID:94a7CpYNa
>>903
もうダメだなこの人。

だから何度も言うけど、それはHWが対応してないとできないのよ。
何度も言うけど、普通のPCのスピーカーとヘッドホン端子は同一のオーディオ出力に繋がってるの。
別々のオーディオ出力に繋がってるんじゃないの。わかる?

次いでいうと、これも何度も書いてるが、それ質問者の質問と全然関係ないの。
質問者さんの質問はスピーカーとヘッドホンが排他的に切り替わるのが気に入らないから
ソフトで何とかできないか、だから。

何度もいうけど、普通のPCではHWで物理的に切り替えてるので不可能です
0907デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/14(火) 00:47:57.18ID:vkfPDW5o0
>>906
パソコンにHDMIは最低限付いているから、音声出力が1系統しか無いパソコンなど滅多にお目にかかれません
しかもUSBとかBluetoothとか音声を出す場所はいくらでもあるんだから、最低限ソフトでオフに出来ないと問題になる

つか1系統でイヤフォンとスピーカーが物理的に切り替わるだけしか出来ないパソコンって存在するのか?
例えば何ていうパソコンのことか具体的に名前出してくれ
0908デフォルトの名無しさん (ワッチョイ 1701-VhDF)
垢版 |
2019/05/14(火) 00:49:56.17ID:BJB1D/ui0
落ち着け。どっちも正しい。
イヤホンジャックの接続を確認して他のサウンドデバイスを黙らせるハードウェアも有る。
時々出力先間違えるドライバが有るな。
再生デバイスの先でイヤホンジャックが物理的にスピーカー出力を切る装置も有る。

後者はソフトではどうしようも無い。
0910デフォルトの名無しさん (ワッチョイ 9f42-y0Vo)
垢版 |
2019/05/14(火) 00:58:48.14ID:vkfPDW5o0
>>909
イヤフォンつなげたままスピーカーから音声を流すAPIは存在するってことね
SPとHPが共有だったとしても、他に出力する先は色々有る
何故物理的に不可能だと言い切っちまうの?APIが存在するのにさ
0915デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/14(火) 05:43:28.06ID:fttRH1Ml0
>>862
関数とは言わないんですね
0918デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 12:22:39.22ID:HKF8AKPGa
>>916
なってないよ。
そういや思い出したけど、大昔のテレビはイヤホンジャックが2つあったんだよな
で一つはSPの音を消さない仕様になっていた
普通に考えてその方が単純明快で親切だ

ヘッドをンを差し込んでも音を消さないためには、何とかボタン押して設定画面出して
この項目のアレを....
なんてまどろっこしいしヲタしか使えないしソフトもハードもコストがかかる

>>917
何か根本的に勘違いしてるんじゃないの?
それは同一のオーディオデバイスの複数の音源のボリュームを調整するんだよ。
複数のオーディオデバイスの音量を調整するんじゃないの。わかる?

他の人も書いてたと思うけど、ウィンドウズは複数のオーディオデバイスを持てるが、
既定のデバイスに設定できるのは一つだけだ(当たり前だけど)
0919デフォルトの名無しさん (スフッ Sdbf-Fjsy)
垢版 |
2019/05/14(火) 13:04:21.56ID:sprIIWlUd
>>918
そんな安物使ってるのか。
普通はジャックの状態で選択してるだけで、物理的に切断はよほどローテクな機械しかやらんよ。
スマホにイヤホン刺してもスピーカーからも音鳴るっしょ。
PCでもそうなってるよ。普通は。
刺したら切り替わるだけ。排他ではない。
https://pcrepair.w-pickup.com/post-6263/
とか、
逆に、両方から鳴って困る事のQAもある。
https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=3908-4397

sndvol32はそのとおりだな、間違ってた、すまん。
出力デバイスを選ばにゃならんが、直接叩くなら別個に出力できたと思うけど。
具体的にはKernel Streamingで。
0920デフォルトの名無しさん (ワッチョイ b77c-4N0r)
垢版 |
2019/05/14(火) 13:29:10.73ID:HHew+yI/0
>>918
それイヤホンジャックじゃなくてLINE出力のことだろ?
0921デフォルトの名無しさん (ワッチョイ 7f2d-vM1y)
垢版 |
2019/05/14(火) 14:01:03.60ID:xGjK1aQt0
こんなところまでLINEが進出してるとは、韓国もやるな
0922デフォルトの名無しさん (アウアウエー Sadf-MyDy)
垢版 |
2019/05/14(火) 15:22:49.71ID:HKF8AKPGa
>>919
TVはどうだか知らんけど、なるほどPCではソフトでヘッドフォン接続を検出して
SP出力を制御してるタイプもあるんだな。

これは素直に知らなかった。
自作用M/Bだとリアパネルの端子の接続をソフトで検出するタイプは昔から結構あったけど。

質問した人のPCがこういうタイプならドライバのユーティリティーで設定変えたら解決するね。
ノート含めメーカー製のPCの大半はこういうタイプじゃないと思うけど
0923デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/14(火) 18:33:42.83ID:fttRH1Ml0
wpfとwinformどちらがいいのですか?
C#で検索するとほとんどはwinform向けのコードのような気がします
大部分は同じですけども
0924デフォルトの名無しさん (ワッチョイ 3702-8Yy7)
垢版 |
2019/05/14(火) 18:50:04.03ID:gmflVafJ0
>>855です
色々と議論頂いて申し訳ないでした
しかしとても参考になりました
ありがとうございました

まさに>>919がやりたいことなんですが、自分がサウンドデバイスとAPIの関係性がいまいち理解不足な気がしますのでもう一度しっかり見直してみたいと思います
0928デフォルトの名無しさん (ドコグロ MMdf-nP+x)
垢版 |
2019/05/14(火) 19:02:22.19ID:gEF4/DH4M
>>923
デスクトップアプリ自体が時代遅れだから、基本的にはどちらもお勧めはできない。
しかしちょっとしたツールなんかで便利なことはあるから、覚えておいて損はないだろう。
その意味では断然WinFormsがお勧めだ。
WPFは習得コストが高く、デスクトップアプリという死んだ技術に対しては割に合わない。
0929デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/14(火) 19:04:08.39ID:fttRH1Ml0
確かに調べた限りではwinformのほうがサンプルが圧倒的に多いですね
wpfは初学者にはきついかも、、

>>928
デスクトップアプリが時代遅れとはなんのことでしょうか
毎日使ってますが
0930デフォルトの名無しさん (ワッチョイ d7da-y0Vo)
垢版 |
2019/05/14(火) 21:07:11.88ID:0h207dTD0
横で申し訳ないのだけど、WinFormsが枯れて次に学習すべきは何がおすすめ?
とりあえず簡単な業務用アプリくらいは作ってますが(データベースと連携あり)
ASP.NETとかWebアプリに進むと、セキュリティの面でまた何かと面倒なのかなと躊躇しちゃう
0933デフォルトの名無しさん (ワッチョイ b77c-Or+L)
垢版 |
2019/05/15(水) 00:23:39.11ID:HTdksHae0
C#関係ないな
0934デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/15(水) 16:32:56.09ID:VEpWlxZJ0
wpf始めたんですが、画像の表示について教えてください
コントロールに紐付ける方法がわかりません

private void Window_Loaded(object sender, RoutedEventArgs e)
{

var bt = new BitmapImage();
bt.BeginInit();
bt.UriSource = new Uri(@"C:\Users\◎◎\Desktop\programing\vs_project\0_practice_project\tilemap_wpf\tilemap_wpf\img\1.png");
bt.EndInit();

}
ここまでは調べられたんですが、コントロールに紐付ける方法がわかりません
コントロールの種類はimageで名前はimage_mです。

資料少なめですね
0935デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/15(水) 17:07:43.75ID:VEpWlxZJ0
できたです
ごめんなさい
0936デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/15(水) 17:14:40.06ID:VEpWlxZJ0
>>934
このbegininitで初期化をコントロールの初期化をするという説明がされていますが、なぜこの作業が必要なんですか?
winformにはなかった手順なので、存在する意味がわかりません
0941デフォルトの名無しさん (ワッチョイ 3702-8Yy7)
垢版 |
2019/05/15(水) 19:58:30.74ID:I+StC2Kj0
>>932
ありがとうございます
引き続き色々と調べてますが未だ出来ていません

NAudioを使ってオーディオデバイスの取得をしていて、自分のイメージでは
オーディオデバイスをスピーカーとヘッドホンのそれぞれで取得して、どちらかを既定のデバイスとして設定してあげれば出来るのかな?と考えてたんですが
デバイスがSpeakers/Headphonesの一つしか取得できないのでPC側の出力状態になっているものしか制御できないのです
この辺りがHWの制約によるものなのかドライバの設定でなんとかなるのかを現在調査中です
0942デフォルトの名無しさん (ワッチョイ bffc-ESYi)
垢版 |
2019/05/15(水) 21:08:20.12ID:VEpWlxZJ0
>>940
引数 1: は 'string' から 'System.Uri' へ変換することはできません。
new BitmapImage(url)
で指定するとこのエラーが出ますが、参考ページありますか?
0943デフォルトの名無しさん (ワッチョイ 1f2d-6GsM)
垢版 |
2019/05/15(水) 21:28:23.64ID:4Ta36StR0
>>942
あなたは逆引き本を買って、コードをコピペしなはれ
それがええで
0946デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 05:04:31.88ID:lb5/XXvB0
なんで一度uri変数に入れないといけないのですか?
0948デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 05:37:02.96ID:lb5/XXvB0
treeviewのノードなくなってますけどどうやってノード追加するんですかね
0949デフォルトの名無しさん (ワッチョイ ae2c-rckI)
垢版 |
2019/05/16(木) 06:42:10.65ID:BUJhrwgQ0
Ruby でも文字列から、URI オブジェクトを作る。
たぶん、他の言語でも同じだろ

require 'uri'

site = URI( "http://example.org/test.cgi?a=b&;c=d" )

p [ site.scheme, site.host, site.port, site.path, site.query ]
#=> ["http", "example.org", 80, "/test.cgi", "a=b&c=d"]

# URL を抜き出す。
p URI.extract( "abc http://example.net/ xyz" )
#=> ["http://example.net/";]
0951デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 07:06:03.55ID:lb5/XXvB0
>>949
そういうものなんですね
型を適切なものにしないといけないと
uriオブジェクトを作るという表現で少しわかった気がします
0952デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 08:42:14.73ID:lb5/XXvB0
>>949
例えば、urlが文字列とご認識されないようにこういう宣言をするってことでしょうか?
0953デフォルトの名無しさん (ドコグロ MM36-9mjA)
垢版 |
2019/05/16(木) 09:09:54.35ID:Ja6m86QIM
>>952
突然Rubyを持ち出すこいつはこの板の名物キチガイだから触っちゃだめ
ちなみにRubyはゆるふわ言語だからURIを受け取る引数に文字列を渡してもだいたいなんとなく動くようになっている(そして後になって予期せぬ不具合の原因になる)場合が多い
0954949 (ワッチョイ ae2c-rckI)
垢版 |
2019/05/16(木) 09:11:37.63ID:BUJhrwgQ0
オブジェクト指向では、何らかのクラスのオブジェクトを作って、操作するのが基本

例えば、URI オブジェクトを作っておけば、
そのクラスに定義されている、便利なメソッド・プロパティなどが使える

それと、C# みたいな静的言語では、
引数・戻り値などに型が指定されていたら、その型を使わないと型エラーになる!
0955デフォルトの名無しさん (ワッチョイ 4063-rzGG)
垢版 |
2019/05/16(木) 09:19:26.89ID:MP5x1HVo0
websoket通信でデータを受信して、それを別プロセスに渡すような処理をしたいのですが、MemoryMappedFileを使って共有メモリを見に行く方法は悪手でしょうか?
推奨されるプロセス間のデータのやり取り方法を教えてください。
0961デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 10:58:05.89ID:lb5/XXvB0
>>954
例えばurlの場合整形したりしやすいってことですね
0964デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 11:54:44.97ID:lb5/XXvB0
ツリービューに小要素を追加したいのですが、wpfでは
rootNode.Nodes.Add(childNode1)
のように、nodeプロパティでの追加は出来ないようです
何を使うか教えてください

あとマイクロソフトのリファレンスでwpfのリファレンスってあるんでしょうか?
調べてるんですが、情報がごっちゃな気がします
0966デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 12:06:43.82ID:lb5/XXvB0
>>964
解決したました
英語サイトで調べたほうが遥かにわかりやすいですねw
0968デフォルトの名無しさん (ワッチョイ f82d-Q2B8)
垢版 |
2019/05/16(木) 12:31:50.76ID:9YitK9mS0
>>967
掲示板だと質問に向かない側面もあるしさ、やっぱStackOverflowに行って質問しようぜ
https://ja.stackoverflow.com/
0970デフォルトの名無しさん (ワッチョイ 6e7c-ZjB6)
垢版 |
2019/05/16(木) 14:11:05.64ID:Ox4fjiQE0
>>944
ほんそれ
0972デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 17:09:13.22ID:lb5/XXvB0
wpfでpcのルートフォルダを取得して、そのサブフォルダも取得したいのですが、参考ページ教えてください。
https://dobon.net/vb/dotnet/file/driveinfo.html
このページを参考にやっているのですが、ルートフォルダを取得というよりCを自分で指定してませんか?

どのPCだろうがルートはCだから、それを基準にして、サブフォルダを取得するってことですか?
0975デフォルトの名無しさん (アウアウエー Sa6a-Fe5F)
垢版 |
2019/05/16(木) 17:32:00.72ID:knSiwbWya
あ、話題のどちて坊やだったのか...

質問スレだから質問するのは全然OKだと思うけど、
何言ってるのか他人が理解できない質問とか、少しも自分で調べた形跡が感じられない
質問とかはちょっとマナー違反だよね
0976デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 17:39:45.70ID:lb5/XXvB0
>>974
そうですね
エクスプローラのツリーのように、フォルダを表示したいので
0978デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 18:14:45.95ID:lb5/XXvB0
フォルダに割り当てるパスを取得するにはドライブの情報が必要ですよね?
0980デフォルトの名無しさん (ドコグロ MM2e-gZI7)
垢版 |
2019/05/16(木) 18:30:23.23ID:qEdn/tfrM
>>975
彼はおそらく調べようと思えば調べられるし
一人で進めようと思えばおそらくできるんだろう

ただ、ものづくりに必要な孤独を楽しむ能力がないんだろう
これまでたどってきた人生に依存する
人によっては精神を病んでしまうのでさっさと辞めることをオススメする

俺らの何がパンピーと違うかといえばおそらくそこ
0981デフォルトの名無しさん (ワッチョイ 5002-nnF4)
垢版 |
2019/05/16(木) 18:34:23.01ID:3A9ftzQu0
転載制限が明示されないfreeは著作隣接権の放棄だと思っていました

コメント機能まで考えなかったのでサーバー管理者の立場になることは考えが至りませんでした
ファイル倉庫ではつまらないですよね
他人の著作物を基本にサイトを作ることは悩ましいですね

解説とリンクを書くだけならば問題が無いはず、と…

いろいろ参考になりました
ありがとうございます
0983デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 18:45:39.21ID:lb5/XXvB0
>>979
何がしたいかですが、「エクスプローラのようなフォルダツリーの機能を作りたい」です
0988デフォルトの名無しさん (ワッチョイ e2fc-TfzP)
垢版 |
2019/05/16(木) 20:21:22.17ID:lb5/XXvB0
>>984
どうやら見当違いなことをしていたみたいですね
ディレクトリパスで調べてみます
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 73日 8時間 4分 13秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況