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

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

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

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part135
http://mevius.5ch.net/test/read.cgi/tech/1517749348/

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

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2018/03/03(土) 18:09:05.02ID:T0Do3u+2
>>1
放置してると落ちるんでね?
2018/03/03(土) 19:55:41.98ID:kXsLgfSK
いちおつ!
4デフォルトの名無しさん
垢版 |
2018/03/04(日) 08:49:14.26ID:Jnf3+hM1
invokeの意味がよく分からない。
別のスレッドからUIのコントロールを触るには、手順が必要でそれをInvokeを通すとちゃんとやってくれる
ということらしい。
疑問1:手順を踏まないと駄目なのはFormに貼り付けたコントロールだけなのか?
これは「コントロールはスレッドセーフじゃない」と同義のことか?

疑問2:一般的なクラスやListデータはスレッドセーフなのか?
 例えば、100kバイトの受信データが常時更新されているとする。これをメインスレッドにコピーするときに
半分程度コピーしたときに、次の受信割り込みでスレッドが切り替わって上書きされるなんてことは起きないのか?
スレッドの切り替えはOSが勝手にやるんだから、これは当然起きてしまいそうな気がするんだが、防ぐ手立ては
あるんか?
2018/03/04(日) 09:32:08.73ID:fUFxJxoP
>>4
>手順を踏まないと〜
いいや、作成したコントロールすべて
>これは「コントロールは〜
スレッドセーフ性についてはリファレンスに書いてあるのでお読みください
勝手に判断していいことは何もない
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.control(v=vs.110).aspx
2018/03/04(日) 09:37:54.15ID:fUFxJxoP
>疑問2
個々のクラスのスレッドセーフ性については、使用するクラスのリファレンスを参照
スレッドセーフなコレクションクラス群というのも提供されている
https://docs.microsoft.com/ja-jp/dotnet/standard/collections/thread-safe/

スレッドセーフでないクラスをスレッドセーフに扱いたいのであれば自分でその機能を実装する必要がある
その際はlockステートメントやAutoResetEventクラスなどが役に立つだろう
2018/03/04(日) 09:43:21.26ID:fUFxJxoP
どうやって実装するかに関しては
一般的なスレッドセーフプログラミングのガイドに従うが
あまりにも広範すぎるのでここには記載しない

手っ取り早くはラッパクラスを書き、
ラッパクラスのプライベートなインスタンス変数にロックオブジェクトを確保し
すべてのメソッドの入り口でロックを取ってしまうことである
8デフォルトの名無しさん
垢版 |
2018/03/04(日) 10:16:01.96ID:Jnf3+hM1
>>5
こいつらだけがスレッドセーフでそれ以外はセーフじゃない。
M:System.Windows.Forms.Control.BeginInvoke(System.Delegate),
M:System.Windows.Forms.Control.EndInvoke(System.IAsyncResult),
M:System.Windows.Forms.Control.Invoke(System.Delegate),
P:System.Windows.Forms.Control.InvokeRequired,
and M:System.Windows.Forms.Control.CreateGraphics(ただしすでにハンドルが生成されていること)
ハンドルがクリエイトされる前のバックグラウンドでの.Forms.Control.CreateGraphicsスレッド
の呼び出しは問題をひきおこす。

って書いてあるので、まあそういうことなんだな。
セーフじゃないのは解ったが、スレッドが何処で切り替わるかが問題だな。
少なくともInvoke中は切り替わらないから、Invokeに渡すDelegateにガッサリとほりこんでやれば絶対に
安全ってことでいいのだな。
 それなら別にLockもへったくれもいらない。なんも難しくないな。
9デフォルトの名無しさん
垢版 |
2018/03/04(日) 10:18:39.61ID:Jnf3+hM1
>一般的なスレッドセーフプログラミングのガイドに従うが あまりにも広範すぎるのでここには記載しない

いったいどう広範なんだ? Lockしたら終わりだろ。変数の書き換え中に切り替わらんなら何も問題ないはずだよな。
2018/03/04(日) 10:21:36.77ID:kbKww4G0
頭悪そうだから死んだ方が早いよw
頑張って
2018/03/04(日) 10:26:47.18ID:P1djYTMd
ID:Jnf3+hM1は例のアホだろ。相手すると有害
12デフォルトの名無しさん
垢版 |
2018/03/04(日) 10:27:55.49ID:Jnf3+hM1
Lock(object)
馬鹿っぽいのはこっちだな。なんでObjectでロックする必要があるんだよ。単にラベルでいいだろ。
Lock(name)
なんかサンプルにしろ説明にしろ難しそうに見せたがるんだよな。賢そうに見せたいんだろうな。要するに
賢くないってことだな。
2018/03/04(日) 10:28:25.45ID:fUFxJxoP
ああ一昨日くらいにTaskでギャーギャー喚いていた人でしたか
気付かず相手をしてしまいました
申し訳ありませんでした
14デフォルトの名無しさん
垢版 |
2018/03/04(日) 10:31:50.77ID:Jnf3+hM1
素人の簡単な質問に答えられないで、解った振りをするのは良くないぞ。
2018/03/04(日) 10:35:45.11ID:1sQ1Awq8
なんでワッチョイにしなかったの?
今更IDでNGとか面倒だわ
2018/03/04(日) 10:58:16.52ID:AyWkuyS0
>>15
忘れてた
次スレ作成機能でワッチョイ引き継がれないんだよ
17デフォルトの名無しさん
垢版 |
2018/03/04(日) 11:02:22.21ID:Jnf3+hM1
スレッドセーフについては
http://www.atmarkit.co.jp/ait/articles/0505/25/news113_3.html
ここが詳しい。これは頭のいい説明だからすぐわかる。
要するにロックすればいいのだが、あたりかまわずロックするとかなり負荷が
かかるので少し工夫がいるということだな。別に難しいことはなにもない。
2018/03/04(日) 11:47:26.08ID:ARj8S9qu
>>12
お子様なら他へ行った方がいい
成人なら本当の意味でコミュニケーション障害
はっきりいうとおまえとは会話ができない
2018/03/04(日) 14:20:47.53ID:WBzCvYNu
どーせ、下でSendMessage, PostMessageがアドレス渡してるだけ
2018/03/04(日) 14:42:13.81ID:uAAm/7vQ
質問です。

class A
class B : A
class C : A
class D : A

のような感じでAを継承するクラスがいつくかあったとき、Aの関数に

public A Copy()
{
return new BとかCとかD;
}

みたいな感じで、Aから自分が今なんのクラスなのかを見て
B・C・Dを生成することはできないのでしょうか?
2018/03/04(日) 15:00:25.90ID:TuLIeqFr
>>20
if(this is B){return B}
みたいな感じでできると思うよ
普通はvirtualメソッドにして派生先でoverrideするのが普通だと思うけど
2018/03/04(日) 15:27:46.44ID:uAAm/7vQ
>>21
ありがとうございます。
クラスが増えるたびにAに分岐を追加するより、派生先で実装しようと思います。
2018/03/04(日) 19:13:35.42ID:u0JZMqVO
>>12
多分Lockを誤解してる

わざとどうでもいい名前にしてあると言うことを理解してないな
2018/03/04(日) 19:59:17.54ID:nPEAVJyb
触るなって言ってんだろテメーも脳に障害おってんのか可哀想にな
2018/03/04(日) 20:04:25.17ID:u0JZMqVO
老害のお爺さんがかわいそうだ
2018/03/04(日) 23:57:01.35ID:WQz+5Gha
質問があります。
.NET標準のChartコントロールなんですけど、
大量のデータ(50000件くらい)を表示してから
そのChartの上をブラウザとかエクスプローラとかを横切らせたら
Chart上に残像みたいなのができて(ちょっと時間が経ったら正常に表示される)
物凄い重いんですけど直す方法ってあるんですか?
27デフォルトの名無しさん
垢版 |
2018/03/05(月) 03:26:06.68ID:FmqsFfvf
>多分Lockを誤解してる
>わざとどうでもいい名前にしてあると言うことを理解してないな

そこだな。「どうでもいい」のが名前の性質だ。ここは「どうでもいい」ということが重要だ。だからこそどうでもいい
名前にしないといけない。Objectである必要はないし、そういう制約をつけるのは間違いだ。そこのところを理解していないと思う。
28デフォルトの名無しさん
垢版 |
2018/03/05(月) 03:31:44.01ID:FmqsFfvf
>>26
Chartなんてそんなに大量に表示する物と違うだろ。だったら代表値にしてデータ量を
圧縮するとか見せ方を工夫すればいい。
29デフォルトの名無しさん
垢版 |
2018/03/05(月) 03:47:59.98ID:FmqsFfvf
田舎者は総じて優しいが、村にそぐわないと判断すると突然ブチ切れて仲間を募って村八分を宣告する。
ネット上に田舎者が多いのはやむえない。ああもう朝だ。寝よう。
30デフォルトの名無しさん
垢版 |
2018/03/05(月) 10:31:47.99ID:g6xeuprT
>>29
何一人でブチ切れてるんだ
田舎者か?
2018/03/05(月) 10:53:45.02ID:NW7TavUN
>>28
なるほど
どうもです^^
2018/03/05(月) 13:58:03.66ID:cH/DYV+T
>>30
触るなって言ってんだろ田舎者のバーコードハゲ
33デフォルトの名無しさん
垢版 |
2018/03/05(月) 14:29:39.76ID:LOGBc36P
すまんが、.netってパスワードを安全に保管するためのストアは用意されてるの?
2018/03/05(月) 15:12:32.80ID:kyU90biE
パスワードをローカルに保管するという発想そのものが本質的に間違っているからそんなものはないよ
ハッシュ値だけ平文で保管して、パスワード原本は速攻で捨てろ
2018/03/05(月) 15:27:45.97ID:VUFW/DdR
別に間違っちゃいないw

多少のリスクより利便性を選択する人がいてもいいし、そういう人に倒して
「お前は意識が低い」なんて言うのは独善的で傲慢だ
2018/03/05(月) 15:45:24.35ID:JEjkThv5
原本のパスワード保存しちゃうのは流石に行儀が悪いにゃ
2018/03/05(月) 15:56:42.33ID:VUFW/DdR
それはただの思い込み

そんなこと言ったらローカルどろろかクラウドにパスワードするChromeやFirefoxは
もっとお行儀悪いよ

現実問題、個人のPCがハッキングされる可能性なんか交通事故よりはるかに低いし、
その上暗号化されたパスワードがたまたま見つかってたまたま解析される可能性なんかもっと低い
2018/03/05(月) 16:25:46.24ID:ThW050h/
FFFTP「だよね〜」
2018/03/05(月) 16:52:28.49ID:1eWHTsKF
どういう脅威に対してどの程度の安全性が必要なのか次第で対策が違う
PasswordValutだってある意味では安全なストア
2018/03/05(月) 17:33:52.91ID:JEjkThv5
ローカルなのかクラウドかの話ではではく、
原本のパスワード(平文のパスワード)をそのまま保存するのは行儀が悪いと言いたかったにゃ
2018/03/05(月) 17:35:03.97ID:Pse13c5G
またテンプレも読めないクソどもか
2018/03/05(月) 18:54:38.72ID:M+sV1Obo
MessagePackでバイナリ化してAES暗号じゃダメなんか?
2018/03/05(月) 18:57:06.18ID:M+sV1Obo
もしかしてWPFのPasswordBoxコントロールのSecureStringの事かいな?
2018/03/05(月) 19:28:47.91ID:s8qQLejn
>>37
行儀の問題じゃないよ。
パスワードを保管することに意味があるか無いか。
極一部の例外を除いて、一般に開発者がユーザーの入力したパスワードを保管したいと考える(勘違いする)のは、
ほとんどが簡易的なパスワード認証を実装したいケースだ。
その場合、パスワードを復元可能な形で保管する必要はまったく無い。ハッシュを使えばハッシュ値の保管方法に気を使う必要はなく、
遥かに簡単でセキュアな認証情報管理が実現できる。
2018/03/05(月) 19:38:50.95ID:6kird9PE
お互いに違うことについて話しているんだからどこまで言っても平行線
2018/03/05(月) 19:53:33.34ID:VUFW/DdR
ちょっと何言ってるのかわかんないねw
2018/03/05(月) 20:04:06.08ID:TmlQrbi9
>>46
ハッシュを使ったパスワード認証ってセキュアプログラミングの基本中の基本だぞ
ほんとに分からないの?ちょっと危機感持ったほうがいいよ
2018/03/05(月) 20:05:40.69ID:1eWHTsKF
>>44
>極一部の例外を除いて、… ほとんどが簡易的なパスワード認証を実装したいケースだ。
これは完全に思い込みだよね
用途を聞く前からパスワード保管を全否定はいただけない
2018/03/05(月) 20:07:37.44ID:NU3s1WzP
入力したパスワードをそのまま持っておくというのは、作り手側の危機感が足りないようにみえるね
大昔の yp からそんなことはしないものと決まっていたと思っていたが
2018/03/05(月) 20:08:13.42ID:NU3s1WzP
>>48
用途にかかわらずパスワード保管は薦められないですね
2018/03/05(月) 20:08:48.06ID:/FfNoiRb
いいから死ねよ
ころすぞ
2018/03/05(月) 20:12:36.88ID:1eWHTsKF
>>50
平文で保管しろっていってんじゃないよ
それともパスワード管理ソフトも全否定?
2018/03/05(月) 20:20:35.48ID:VUFW/DdR
やっぱりちょっと何言ってるのか分からないけど、
>>47の人は認証するのが自分のコードだと思い込んでる気がするw

だからChromeとかFirefoxとか具体名出してるのに

ちなみに、FXとか株とかのトレードアプリでもパスワード保存機能がついてるのが普通ですよw
場合によっては億単位の金が絡むんだけどね。
2018/03/05(月) 20:22:44.40ID:6kird9PE
だから言っただろ

お互いに違う話してるから平行線だって
2018/03/05(月) 20:32:50.58ID:NU3s1WzP
>>52
保存するならキャッシュで、というのが安全ですね

>>53
ブラウザのパスワード入力支援の話でしたか…そりゃ違う話ですねえ…
2018/03/05(月) 20:46:48.34ID:ThW050h/
普通pinだよね〜
57デフォルトの名無しさん
垢版 |
2018/03/06(火) 17:22:21.13ID:40kaWQRT
結局、Javaみたいなパスワード用のストアってないわけ?
証明書のストアがあるぐらいならあるのかと思っちゃったよ
2018/03/06(火) 17:47:30.00ID:dl9PBnAI
そうだな、キーコンテナも面倒だから。
2018/03/06(火) 18:20:52.64ID:/9uChD8X
用途とか細かく書かないと質問者そっちのけでマウント合戦始めるスレだからな
2018/03/06(火) 19:27:25.91ID:XG2njCd+
>>59
なんか気付いてないみたいだけど、それ一番やりたがってるの君じゃないの?w
ずっと思ってたけど単細胞だよねお宅。
この単細胞な幸せ回路、ネトウヨだったりもしそうw
2018/03/06(火) 21:11:51.62ID:PPL1W7N6
ワッチョイ無くてもいつもの奴らが書いてるのが分かるの笑える
62デフォルトの名無しさん
垢版 |
2018/03/07(水) 00:46:04.16ID:E/AkTCwB
グラフ書くってなったらchart使うんだよね?
2018/03/07(水) 06:54:10.77ID:dyn70F+X
groupをしてTimeSpan型の平均、合計をだしたいのですが

var C =
from a in db.Articles
group a by a.Category into B
select new ArticleHaving

{
合計 = B.sum(a => a.時間)
};

↑のa.時間がTimeSpan型だと型変換できなくてエラーになるのですが
どのように書いたらいいでしょうか?
2018/03/07(水) 08:17:43.90ID:WEJ0//C3
構造体だからってオチ?

.TotalHourだったらどうなんのよ
2018/03/07(水) 08:26:40.93ID:of1Kc4NS
>>63
合計 = B.sum(a => a.時間.ticks)
として合計出して
TimeSpan.FromTicks(C) でTimeSpan型に戻せばいいんじゃね?
2018/03/07(水) 09:27:56.48ID:Rfc91YM1
>>57
MS的には資格情報マネージャを使えということになっているので
プラットフォーム独立な奴はない
2018/03/07(水) 12:38:55.21ID:2wkHBkDf
同じソースを Framework 3.5 / 4.0以降 で使い回ししたいのですが、
コンパイル時にバージョンを識別させることできますか。

C言語ぽく書くと

#ifdef FRAMEWORK35
  // 3.5用のソース
#else
  // 4.0用のソース
#endif

的なことがやりたいのですが。
2018/03/07(水) 13:50:23.04ID:pfa4Uwxk
>>67
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-if
2018/03/07(水) 14:03:40.77ID:500OxlyC
それ、いいと思ってるのは本人だけシリーズ
んなコード、ソース中に散りばめたこと想像するだけでゾッとするわ
2018/03/07(水) 20:08:03.89ID:kqlcBDmo
MSからしてみればさっさと最新のFramework入れろよとイライラしてそう
2018/03/07(水) 20:17:39.78ID:UA5KKOmp
>>69
良し悪しの問題じゃなく、好むと好まざると>>67みたいないことが必要な場合は実際にある。
質問者が言ってもいない前提まで加えてくだらないいちゃもんつける奴の方がよほどぞっとするよ
2018/03/07(水) 20:21:03.26ID:KHQlD0En
社内共有のコアライブラリとかなら全然アリでしょ
2018/03/07(水) 20:36:32.77ID:dyn70F+X
>>65
ticks使えばいけそうです。
ありがとうございます。
2018/03/07(水) 21:33:11.25ID:500OxlyC
>>71
は?ねーよ
ちょっと考えてみ
それさ、ソースのどっかにあったらアプリの挙動変わるんだぜ
いちいちそんなの確かめてらんねーよ
んでそれがあちこちにあったらもうプロジェクト終わるね
そこでやるべきものじゃないし
もうバージョン管理レベルで変更するものであってそこに書くもんじゃねーよ
2018/03/07(水) 22:35:50.64ID:jL/wX1y0
>>74
>バージョン管理レベルで変更するものであってそこに書くもんじゃねーよ

複数の.NETバージョンのサポートが必要なライブラリなんかを作る時に
新バージョンにしかない機能も使えるようにしたい場合
どういう風にバージョン管理レベルで変更すればいいの?
2018/03/07(水) 22:39:29.37ID:kbPu74AY
神エクセルの読み取りで使えそうな典型的処理をまとめたライブラリとかない?
100種類ぐらいの神エクセルファイルがあるんだが今月中に読み取りを全部自動化しなければならない
時々フォーマット間違ってるものもあってもう心が折れそう
2018/03/07(水) 22:45:02.00ID:N0djvhnX
>>74
濫用すべきでないのは当たり前だが、意義を完全に否定できるものでもない
2018/03/07(水) 23:05:12.13ID:Zg+bx7i1
>>76
詳しく
2018/03/07(水) 23:25:58.56ID:500OxlyC
>>75
全部別にフォルダきって個々で管理
2018/03/07(水) 23:58:33.00ID:ydf/SLRs
>>79
クソワロタ
2018/03/08(木) 00:03:36.21ID:QLJ7X/Ow
>>80
と思うだろ?
お前が節約してる手間なんて実装だけだろ
テストや動作確認は各バージョン全部やらなきゃいけない上に
バージョン番号での分岐のテストも各バージョン毎全部しなきゃならん

分けた方が楽だぞ
2018/03/08(木) 00:13:13.28ID:3qyzG5H1
バカの壁ってこういうの言うんだねw
2018/03/08(木) 00:33:12.76ID:S1Kk1wSa
>>81
こういうほぼ共通なコードで #if を使わずにファイルを分けたら逆に管理しづらくならない?
https://github.com/Microsoft/referencesource/blob/master/System/sys/system/threading/semaphore.cs
2018/03/08(木) 00:45:24.85ID:3qyzG5H1
だから、バカの壁の向こう側に何言っても無駄w

コメントは二重管理になるからコメントなしで理解できるようなコードを書け、
と言っても問題意識を共有できない人がいるのと同じw

っていうかまさにそういうタイプの人なんだろう
2018/03/08(木) 01:02:06.65ID:deM+QTok
質問者に対する提案ならともかく議論なら議論スレでやってくれ
2018/03/08(木) 01:08:54.44ID:3qyzG5H1
こんな過疎スレでそんな「交通整理」に意味あるの?
スレ違いって自分が言いたいだけだよねw
何よりそういう自己分析ができないってもう絶望的に頭悪いよ
2018/03/08(木) 01:28:30.71ID:QLJ7X/Ow
>>83
それでもやれ
何度も言うけどお前等は実装なんてチンケな工程にこだわり過ぎてる
処理はできるだけ共通化すると幸せになれるという根拠のないルールが呪いになっている
いくら共通化ったってここまで複雑になったコードが管理しやすいわけねぇだろ
2018/03/08(木) 01:37:47.28ID:4UosM8wW
ソースから完全に分けるのと#ifdef使うのとなら
あらゆる状況でどちらかが常に優れてるわけじゃないんだから
状況に応じて選べばいいんじゃん
2018/03/08(木) 06:04:32.53ID:y9tge1zw
>>87
素人かよ
2018/03/08(木) 07:19:52.71ID:QLJ7X/Ow
>>88
それができてるの?
共通化全適用以外の選択肢を取れるの?
馬鹿だから無理でしょ?
2018/03/08(木) 12:01:42.48ID:m1DjBHcg
T where int,long のT a、T bの変数に対して、a+bを実行したいんだけとなんかいい方法ある?
2018/03/08(木) 12:14:51.49ID:KNsyBCN9
where int,longってなに?
2018/03/08(木) 12:55:19.49ID:NNizdivM
その話もうさんざん議論されてるからまずはググってくれ
2018/03/08(木) 13:10:43.66ID:m1DjBHcg
>>93
ダイナミックやリフレクションを使うとできそうって感じかな
どちらも採用したくないので諦めることにするわ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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