18/06/05 20:49:49.24 M4A1qqma0.net
(*゚∀゚)b
3:デフォルトの名無しさん
18/06/06 00:37:35.76 YMH0q3TJM.net
デコーダーがイベント監視してる時点でなんかおかしいって気が付かなきゃダメだよ
クラスの責務は1つなのだからデコーダーはデコードすることに集中しなきゃならん
なのでイベントの購読、デコーダーへのデータ供給は別のクラスの仕事というわけだ
どうしてもデコーダーにイベントソースを掴ませたいならより抽象化されたストリームを渡すべきだろうね
4:デフォルトの名無しさん
18/06/06 00:54:44.11 89Zk6fQTa.net
前スレ>>999
酷い言い掛かりだなw
この人、自分の議論が
(1) FrameDecoderは使い捨てされるオブジェクトである(CommunicationPortより寿命が短い)
(2) FrameDecoderを使う側(メインクラス?)はプログラムと同じ寿命
っていう自分勝手な前提に立ってることに気付いてるのかな。
そんな勝手な前提を置いたらどんなイチャモンでも言えるよw
既に書いたが、結局抽象的に言えるのは
----
使い捨てのオブジェクトが自分より長寿のオブジェクトのイベントに
メソッドを紐づけする場合は、イベント購読解除を忘れるとリークする
----
これ以上でも以下でもない。
だから俺の書いたコードスレリンク(tech板:985番)
に対して、「FrameDecoderがプログラムと同じ寿命じゃない、使い捨てされるオブジェクトなら
いらなくなったタイミングでイベント購読解除するようにしないとリークするよ」と質問者にアドバイスするのなら
意味があると思う
イベント発行側を引数でもらったらイカンとか、そんな訳わかんない
俺様ルールを他人にごり押ししてどうすんの。
5:デフォルトの名無しさん
18/06/06 00:57:45.23 89Zk6fQTa.net
それとさあ、、これも繰り返しになるけど、
だから俺は質問者の参考になるかもしれんコードの骨組みのサンプルを書いてるだけであって、
そんな細かい別の話をしてるんじゃないってばw
何でもっと建設的になれないかな
6:デフォルトの名無しさん
18/06/06 01:15:02.96 e5dRgfnV0.net
死なないと分かんねーのかな
7:デフォルトの名無しさん
18/06/06 01:18:11.35 qa98W75KM.net
>>4
分かってないなあ
FrameDecoderの寿命はFrameDecoder自身が決めることではなくてそれを使う側が決めることでしょ
引数をはじめとして、自分の管理外にあるものに対して自分自身を登録することは、その了解を破ってるという点で好まれない
OSSのソースとか読んだことないかもしれないけど、実際滅多にないよ?
FormやTimerのようにGCRoot持って自分自身で寿命を制御してる例外も無くはないが、
それはフォームはXボタン、タイマなら一定時間経過、というように自分自身の性質が寿命を決めているからそれが自然なんだよ
8:デフォルトの名無しさん
18/06/06 01:18:13.86 XybM8xsda.net
>>4
分かってないなあ
FrameDecoderの寿命はFrameDecoder自身が決めることではなくてそれを使う側が決めることでしょ
引数をはじめとして、自分の管理外にあるものに対して自分自身を登録することは、その了解を破ってるという点で好まれない
OSSのソースとか読んだことないかもしれないけど、実際滅多にないよ?
FormやTimerのようにGCRoot持って自分自身で寿命を制御してる例外も無くはないが、
それはフォームはXボタン、タイマなら一定時間経過、というように自分自身の性質が寿命を決めているからそれが自然なんだよ
9:デフォルトの名無しさん
18/06/06 01:28:03.10 kKiXaErEa.net
>>7
分かってないのは君
だから、君は勝手に「FrameDecoderを使う側の寿命はCommunicationPortと同じが
それより長い」という前提に立っている。
何度も言うが、そんな勝手な前提を置いたら何でも言える。
じゃあFrameDecoderを使うオブジェクトの寿命がCommunicationPortより短い場合はどうするのか。
10:デフォルトの名無しさん
18/06/06 01:36:08.83 XybM8xsda.net
>>9
なるほど、そんな初歩的なところを勘違いしてたのか
イベントを使うにしろ何にしろ、CommunicationPortから引数の受け渡しによってデータを受け取る以上、
当然、CommunicationPortからFrameDecoderへは参照を辿って到達可能でなければならないよ
問題にしてるのはその参照を登録したり解除したりする責任の話ね
11:デフォルトの名無しさん
18/06/06 01:39:09.20 CmtfArYj0.net
つか、シリアル通信クラスって標準のがあった気がするけど
それが合わないとしても、それを模倣して作れって言うのが普通じゃないのか
12:前スレ976
18/06/06 06:26:27.44 z0q6WK6V0.net
すいません
回答ありがとうございました
何か揉める原因になってすいません
URLリンク(dobon.net)のデータを返す方法がやりたいことになるのかなと思って調べてました。
13:デフォルトの名無しさん
18/06/06 09:37:08.80 e5dRgfnV0.net
彼らは病気だから気にしなくていい
いつものことさ
14:デフォルトの名無しさん
18/06/06 11:55:26.62 /mNmPD5La.net
>>10
何を言ってるのかさっぱり分からない
だれか分かる人がいたら解説してw
「CommunicationPortからFrameDecoderへは参照を辿って到達可能でなければならない」
必要なんかどこにあんのw
しかし、こういう「俺様ルール」を正当化するために
勝手な前提条件を設定してかつその自覚がない人ってのは困っちゃうね
15:デフォルトの名無しさん
18/06/06 12:02:03.87 /mNmPD5La.net
>>12
別にもめてるわけじゃw
プログラミングは技術の一種なんだから質問スレであっても
議論に発展することがあるのは当たり前で、それを異常なことのように
感じる人間の方が病気で、そういう人間こそ無視していいと思う
以前「マウンティング」って言葉が好きな御仁がおったけど、
ようするに彼はそんなくだらないことでマウントを取りたい自分を
表出することで何かを語るに落ちてることにも気が付かない素朴なお方だw
16:デフォルトの名無しさん
18/06/06 12:28:24.14 v+YVHC4y0.net
>>1読め
17:デフォルトの名無しさん
18/06/06 20:12:00.38 Xjc53mAM0.net
どうでもいい質問ですがvisual studioの初期設定で
C#が中括弧だけで1行使うのはなにか理由があるんでしょうか?
C++他の言語だと最初の中括弧の前では改行しないスタイルの方が多いと思うんですが
18:デフォルトの名無しさん
18/06/06 20:17:07.10 yVrgGFaDM.net
ない
19:デフォルトの名無しさん
18/06/06 20:34:10.39 LL2q+46Ta.net
URLリンク(ja.m.wikipedia.org)字下げスタイル
20:デフォルトの名無しさん
18/06/06 21:13:23.87 5ce/nrvV0.net
>>17
波動拳みたいでいいだろ?
21:デフォルトの名無しさん
18/06/06 21:13:34.77 Xjc53mAM0.net
>>19
どうも、よく分かりました
22:デフォルトの名無しさん
18/06/06 23:05:03.78 N8yiaTQzM.net
パイソンスタイルが至高
波カッコとか要らん
23:デフォルトの名無しさん
18/06/06 23:07:52.15 +PcIhiGy0.net
俺はブロックが解り易くて良いと思うけどな
縦に長くなるのが嫌だって人がいるのも理解しない事はないが
24:デフォルトの名無しさん
18/06/06 23:15:12.78 c8dAN/Mma.net
>>17
C++は { だけで一行使うスタイルの方が一般的だと思うぞ
C#はもともとC++開発者の取り込みを狙って作られた言語なので、ソースのスタイルも含め、意図的に全体的な雰囲気をC++に似せ�
25:トいる
26:デフォルトの名無しさん
18/06/07 00:32:23.12 8RMVvRLY0.net
>>22
C#はコード畳めるんだぜ?
27:デフォルトの名無しさん
18/06/07 00:35:34.59 gtRPAC9i0.net
言いたい事は解るけど、それは言語仕様でなくIDEの機能では……
28:デフォルトの名無しさん
18/06/07 07:22:06.46 7v9jTo8H0.net
あのコード畳める機能って極悪だよな。
もうそろそろ終わりだなぁと思ったら畳まれているコードが数百行隠れてましたとか泣いたよ。
29:デフォルトの名無しさん
18/06/07 08:14:21.51 w0rLP4AV0.net
畳まれてるコードがあって泣くってどういう状態だよ・・・
30:デフォルトの名無しさん
18/06/07 08:49:08.48 acA4rAind.net
どうせ20000行のメソッドとかなんだろ
31:デフォルトの名無しさん
18/06/07 08:54:33.87 dtJbFkp5M.net
クラスの作成について教えてください。
内部でstring程度の情報しか持たない場合でも、Disposeは実装しなければならないですか?実際、何もやる事ないですが。
32:デフォルトの名無しさん
18/06/07 08:59:41.46 jTBAfznK0.net
しなければならないと言った人に聞いてくださいよ
一般的に、決定権がある人が必要ないと判断すればしません
33:デフォルトの名無しさん
18/06/07 09:15:25.73 dtJbFkp5M.net
すみません、聞き方が悪かったです。
しなければならないと言われた訳ではないのですが、作法としてどうなのかな?と心配になって質問しました。
自分だけで使うならどうでもいいのですが、他人にも公開するものなので、恥ずかしくないものを作りたくて。
34:デフォルトの名無しさん
18/06/07 09:41:25.22 NVuYCS+k0.net
作法というかIDisposableは主にアンマネージリソース解放の用途だよ
OS機能を直接扱うとか、メンバーが使用してるとか。インスタンス解放ではない
むしろ実装の仕方に作法があるのでMicrosoft DocsなりMSDNなりを
35:デフォルトの名無しさん
18/06/07 15:35:52.79 Fu48jME1a.net
>>32
やることが無いならDisposeやファイナライザを実装してはいけない
それらを実装するのは例外的なケースであり、無いのが普通
36:デフォルトの名無しさん
18/06/07 16:30:11.85 dtJbFkp5M.net
>>33
>>34
レスありがとうござます。完全に勉強不足でした。
IDisposableが実装されてないクラスなんて山ほどあるのに何を勘違いしてたんでしょうか。聞いてよかったです。
37:デフォルトの名無しさん
18/06/07 19:28:36.25 6Ugs28PiM.net
>>27
行数表示してないのかよw
38:デフォルトの名無しさん
18/06/07 19:55:09.68 GcMnTqlg0.net
コントロールが表示されないのですがなぜでしょう
Microsoft.Toolkit.Win32.UI.Controls.WinForms.WebView wv = new Microsoft.Toolkit.Win32.UI.Controls.WinForms.WebView();
wv.Dock = DockStyle.Fill;
this.Controls.Add(wv);
wv.Navigate("URLリンク(www.yahoo.co.jp));
39:デフォルトの名無しさん
18/06/07 21:20:31.87 aqK3UKBIa.net
>>35
アンマネージなシステムリソースを確実に解放するときに使うよ
40:デフォルトの名無しさん
18/06/07 21:25:32.22 HziEaPXa0.net
どういう考え方をすればできるようになるんだよ!教えろお前ら!!ホラホラホラホラ!!!!
41:デフォルトの名無しさん
18/06/07 21:27:36.16 8RMVvRLY0.net
プロセスゾンビを確実にkillするにはどうすればよい?
42:デフォルトの名無しさん
18/06/07 21:43:03.21 muNvrUxm0.net
シャットダウン
43:デフォルトの名無しさん
18/06/08 12:54:30.79 ZXhSx/U8M.net
kill -9 プロセス番号
44:デフォルトの名無しさん
18/06/08 12:54:58.48 sQqhvtlW0.net
init 0
45:デフォルトの名無しさん
18/06/08 13:08:29.19 CYBBWkiVM.net
>>17
私は { は単独にしない派ですね。
理由は、少しでも多く画面内にソースを表示して見通しやすくするためと、昔からの Basicの名残で、ifなら thenに相当する { は行末。endifの } は単独という位置づけですね。
今はideの進化で { } のペアの書き忘れがほとんどないというのもあるかな。
46:デフォルトの名無しさん
18/06/08 14:44:00.50 6WR6CtyO0.net
>>37
試してないけど、対応OSで実行してないとか?
47:デフォルトの名無しさん
18/06/08 15:03:45.94 QSVDv9Gwd.net
>>44
その言語の流儀に素直に従った方がいいんじゃないかと
48:デフォルトの名無しさん
18/06/08 16:55:43.13 3Fn0oPLQ0.net
流儀に従うなら、どっちでもいい、では?
49:デフォルトの名無しさん
18/06/08 17:50:11.32 wbtEeseM0.net
int c = 5;
for(c = 1; c < 61; c++)
{
//処理
}
Console.WriteLine(c.ToString());
これで一番最後でCが62になるのですが
C<61の判定後でも++のインクリメントは行われているってことでいいのですか?
50:デフォルトの名無しさん
18/06/08 17:59:23.80 3yCOErp00.net
>>48
新規でコンソールアプリ用のプロジェクト作ってそれをコピペして実行してみたら?
処理の中身に問題が無ければ62になるはずがない
51:デフォルトの名無しさん
18/06/08 18:02:38.49 SrLrQXUUa.net
>>48
URLリンク(ideone.com)
52:デフォルトの名無しさん
18/06/08 18:11:11.09 SrLrQXUUa.net
つーか、この程度の検証もせずに他人に質問を投げる神経が分からんマジで
53:デフォルトの名無しさん
18/06/08 18:35:49.98 QSVDv9Gwd.net
>>47
パブリックなAPIかそうでないかによって違う
54:デフォルトの名無しさん
18/06/08 19:21:59.01 TU3718TC0.net
>>45
OSのバージョンは問題なさそうなんですよね。
55:デフォルトの名無しさん
18/06/09 10:20:18.22 iRP9QLJz0.net
>>52
え、何が?
{の位置にそんなこと関係ある?
56:デフォルトの名無しさん
18/06/09 11:11:10.00 3S5Pjg6F0.net
構造化制御文はインデントされた行を1行と1行、例えば if (a == b) { と } で挟むのが、
パッと見たとき一体に見えて分かりやすい。{ を単独行にすると、{ と } で挟まれた
無名ブロックがあって、その上に構造的に無関係な1行のif文があるように見えてしまう。
もう少しじっくり見れば、行末の ; の有無で下のブロックとの関係を判別できるが、
その一瞬の認知の遅れに違和感を覚え、もっとはっきり言えばキモいコードだと思う。
同じ理由で、条件が真のときの文が1つの場合の
if (a == b)
c = d;
e = f;
のようなスタイルもキモいし、Pythonの
if a = b:
c = d
e = f
g = h
はもっとキモくて、まさに蛇蝎のように嫌いだ。
関数・メソッド定義と制御文の見分けという観点からも、前者は
int func(int arg)
{
後者は
if (cond) {
で始めて、( の前のスペースの有無と { の前の改行の有無のどちらでも前者と後者で
違いをつけた方が、すんなりと見分けられて良い。
57:
18/06/09 11:28:17.50 BV3WmSRm0.net
>>55
if (cond) {
}
と書くのだったら、関数の場合も
int func(int arg) {
}
とするのが統一がとれていいんじゃない?なぜ関数と if 文とで書き分けるのか、その理由がわからない
58:デフォルトの名無しさん
18/06/09 11:40:22.30 kOHnqaQt0.net
その自己主張要る?
59:デフォルトの名無しさん
18/06/09 11:41:04.90 kOHnqaQt0.net
あ、>>57は>>55宛てね
宗教論争は他所でやって頂きたい
60:デフォルトの名無しさん
18/06/09 11:42:25.58 4y2IVpvw0.net
メソッドとif文に差付けなくてもインデント違う時点で判別付くんじゃないのか
と思ったが、ローカル関数出てきたんだっけか
61:デフォルトの名無しさん
18/06/09 12:02:32.41 54mp5fzVM.net
if (cond) statement;
if (cond) call();
if (notcond) return;
statement;
statement;
statement;
{}がなくても見やすいね
62:デフォルトの名無しさん
18/06/09 12:03:48.88 3S5Pjg6F0.net
>>56
それぞれの制御文 (if, for, whileなど) 同士は機能が似通っているが、
関数は全く違うから、見た目も書き分けた方が良い。
Pascalだと関数は
function func(arg: integer): integer;
begin
で、制御文は
if cond then begin
で始まり、前者は begin の前に ; が入り、関数頭部を書いて一旦区切ってから
関数本体を書く格好になるので、頭部の行の独立性が比較的高い。これに倣い、
C系でも関数は頭部だけで改行した方がすんなり読める。
>>58
じゃあ、スレ立ててよ。
63:デフォルトの名無しさん
18/06/09 12:05:40.33 3S5Pjg6F0.net
>>60
1行if文は否定しないし、自分自身も割とよく使うよ。
64:
18/06/09 12:18:17.45 BV3WmSRm0.net
>>61
pascal に習う必要はないと思いますが…なぜ pascal を持ち出してきたのでしょうか?
私は関数と if/for/while を別にする必要性はないと思っています
{
}
とかスペースの無駄にみえてしまいます
65:デフォルトの名無しさん
18/06/09 12:23:56.94 54mp5fzVM.net
構造がクリーンなコードを心がければ自然と{}を使わないコードになる
まあ俺から言わせてもらうと{}は綺麗なコードが浮かばない時に仕方なく使う苦肉の策ってところだね
66:デフォルトの名無しさん
18/06/09 12:43:14.79 3S5Pjg6F0.net
>>63
Pascalの悪い所、例えば条件を ( ) で囲まないので条件が目立たないのは真似する
必要はないが、良い所は参考にすべきだろう。C#は開発主導者がTurbo Pascalの
作者だったこともあり、Pascalからもいくらかの影響を受けていて、赤の他人ではない。
関数と制御文は機能が違うし、関数の方がより大きなブロックだから、書き分けた方が
すんなり読める。自然言語で小さな区切りには , を、大きな区切りには ; を使って
書き分けるのに似ている。あるいは章や節の見出しのスタイルに視覚的な差を
つけるようなもの。
67:
18/06/09 12:49:18.67 BV3WmSRm0.net
>>65
>>61
昔のpascalのif 文は
if cond
begin
..;.
end;
が主流だった気がします
if cond begin
end;
はむしろCの影響を受けているのでは?
68:デフォルトの名無しさん
18/06/09 13:02:16.97 ufdIEzvk0.net
>>54
うん。C#のコーディング規約はあくまでもパブリックなライブラリに関するものだから。
プライベートなものについてはお好きにどうぞって感じ。
69:デフォルトの名無しさん
18/06/09 13:06:52.76 oQlrsJoz0.net
改行コードが構文に影響を与えない言語仕様なんだから、好きにすればいいんだよ。
70:デフォルトの名無しさん
18/06/09 13:12:22.07 Tjb3C0On0.net
pascal流はマジキモイな
func() {
}
if () {
}
else {
}
が一番利に適ってる
71:デフォルトの名無しさん
18/06/09 13:27:36.34 VOfp/P7BM.net
これ以上続けても宗教の違いみたいな話で
なにも建設的なハナシにはならないからここらで終わりにしておけば?
72:デフォルトの名無しさん
18/06/09 13:29:19.91 4y2IVpvw0.net
いくら議論したところで、お仕事なら我が社のコーディング規約で終わっちゃう話だしな
73:デフォルトの名無しさん
18/06/09 14:24:17.49 fpkuA4ugr.net
どうでもいいしキモい
74:デフォルトの名無しさん
18/06/09 14:27:26.20 DBY1R4Jva.net
この手の嗜好がただの慣れと思い込みにすぎないっていい歳こいて気付かない人は
プログラマとしてかなり筋が悪いと思うw
たぶん知能もあんまり高くないw
2週間も違う書式で作業してたらすっかりそっちが「普通」になるw
人間なんてそんなもの。
これフォントにも言えるね
75:
18/06/09 14:28:38.55 BV3WmSRm0.net
>>70
泥仕合にならないかぎり、意義があると思っています、これから泥仕合になるのかもしれませんが…
76:デフォルトの名無しさん
18/06/09 14:28:44.98 d5fCz/GJ0.net
エディタとコーディングスタイルの話はしないのが紳士のたしなみ
77:デフォルトの名無しさん
18/06/09 14:39:18.62 54mp5fzVM.net
>>73
フォントは目に優しいのを使った方がいい
カッコの位置などというくだらない問題とは違う
78:デフォルトの名無しさん
18/06/09 15:20:12.02 JwKFPqLV0.net
>>61
ふらっと C#,C♯,C#(議論用)
スレリンク(tech板)
79:デフォルトの名無しさん
18/06/09 15:35:33.03 a58WBe6r0.net
>>75
よい習慣をお持ちですね。素晴らしい
80:デフォルトの名無しさん
18/06/11 12:25:35.64 6xD/x26k0.net
VisualStudio2017 でコンソールアプリケーションを作っています。
System.Windows.Forms.Clipboardクラスを使いたいのですが
ビルドの設定をReleaseにしているとエラーはでないのに
Debugにすると FormsがSystem.Windowsに存在しないといわれてしまいます。
(アセンブリ参照はしています)
どなたか原因分かる方いないでしょうか。
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
81:デフォルトの名無しさん
18/06/11 12:35:57.40 bN46fGFrd.net
>>79
csprojファイル晒して
82:79
18/06/11 13:13:19.40 6xD/x26k0.net
>>80
新しいソリューションを作成してコードをコピペしたら問題が発生しなかったので
とりあえず解決したということにします。
ありがとうございます
83:デフォルトの名無しさん
18/06/11 21:03:57.62 TLX2q1MD0.net
フォームアプリで画面の真ん中に線を引きたいと思って単純に
(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)/2
のところに線を挽けばいいと思ったんですが、モニタのピクセルの半分のところに線を引くと
フォームの上の -□× のあるバーの下から0ピクセルになるから20ピクセルほどが下にずれてしまいます。
フォームの中央に線を引く方法ってないでしょうか?
84:デフォルトの名無しさん
18/06/11 21:10:24.16 hXpDig4+p.net
枠無しフォームでやれ。
85:デフォルトの名無しさん
18/06/11 21:11:16.03 R9cSput30.net
>>82
フォームの中央なのか画面の中央なのかまずはっきりしてくれ
スクリーン座標←→クライアント座標の変換を行うには?
URLリンク(www.atmarkit.co.jp)
86:デフォルトの名無しさん
18/06/11 21:12:11.98 aKalcs2L0.net
フォームの中央なのかディスプレイの中央なのかどっちだよ
87:デフォルトの名無しさん
18/06/11 21:44:14.69 TLX2q1MD0.net
自分でもどっちでいいかわからなくなったw
最初単純にフォーム最大化してるんだから、モニタの真ん中が真ん中だろと思ったら、
windowsって下にタスクバーあるわ、モニタの下に非表示領域20ピクセルほど隠れてるわ、フォームにフォームバーあるわで、
モニタの真ん中が真ん中に見えない。
たぶん無意識化でフォームの真ん中が人は真ん中と認識しているので気持ち悪い。
ということでフォームの真ん中にしました。
88:デフォルトの名無しさん
18/06/11 22:15:41.36 kexbIBuK0.net
>>86
タスクバーの位置なんて自由に変えられるんだけど
89:デフォルトの名無しさん
18/06/11 22:24:08.10 xa0hP702a.net
>モニタの下に非表示領域20ピクセルほど隠れてるわ
そんなものはないと思うけど...
今時CRT使っててオーバースキャン表示でもやってるなら別かもしれんけどw
90:デフォルトの名無しさん
18/06/11 22:37:51.73 VLKc0T550.net
フォームバーってタイトルバーのことかな
非クライアント領域もあるぞ
91:前スレ976
18/06/12 07:25:05.60 qsxFIdydM.net
どうにかイベントを発生させることができました。ここから5バイトの受信データを分解して処理を分岐したいんですが、どのような手法、便利な関数がありますでしょうか。
オペコード1バイト+データ4バイトという形式です。データは4バイトで表現する数値だったり、1ビットごとのフラグだったりします。
昔ながらのswich~caseで分岐って使うんでしょうか
オペコードが増えたり、データの予約ビットが変わると変更が大変そうです
92:デフォルトの名無しさん
18/06/12 08:46:58.51 awfOgDQGa.net
switchでいいよ
たかがイベント一個作るのに何日もかかるようなレベルで今どんな凝った設計しようが、結局後で全部やり直しになる
今は余計な手間をかけないこと、シンプルに保つこと、それだけ考えてりゃいい
93:デフォルトの名無しさん
18/06/12 08:51:11.88 l+dIOx6V0.net
デバイスドライバーみたいに処理をチェーンさせるってのもあり
94:デフォルトの名無しさん
18/06/12 09:12:16.14 HMj9ZmCFM.net
スクリプト言語のインタプリタなんかでも巨大switchが普通だぞ
断言するが、先を見通せない状況でヘタにコマンドパターンとか入れても、後で横断的な変更が多発して
すべてのコマンドクラスに手を入れて回るアホみたいな作業に追われることになるだけ
95:デフォルトの名無しさん
18/06/12 10:49:11.67 Blmm4zE90.net
コード増加はともかく予約を変更すんな・・・
96:デフォルトの名無しさん
18/06/12 11:04:17.10 O2DKnY7ra.net
>>90
どっちにしろ「便利な関数なんかないでしょうw
ちっとも汎用的じゃない処理をエレガントに書く方法なんか用意されてるはずがないw
泥臭い物は泥臭く書くしかないかと
オペコードがそれ以上分解できない前提で
(1) オペコードをenumにキャストしてswith、でも
(2) ジャンプテーブル(デリゲートの配列)を使う、でもお好みで
もし仮に受信するデータが常にこちらから要求したデータである、
つまり、どういうデータが送信されてくることをこちら側が期待しているか事前に分かっている場合は
別の方法論もあると思う
その場合はこちらがリクエストを出す段階で、期待する種類のデータだけを読解できるオブジェクトを
生成してタイムアウト付きで待機させればいい
97:デフォルトの名無しさん
18/06/12 12:12:37.91 yJ6G/fgzM.net
>>93
横断的な変更を最小限の労力でやるために最初にほんのすこしだけ投資する
これがシステム開発のコツな
98:デフォルトの名無しさん
18/06/12 14:41:16.06 dH3jUIiRp.net
それより、データの先頭を識別できるフォーマットにしたか?
99:デフォルトの名無しさん
18/06/12 15:40:05.30 wFgJsw9E0.net
固定長なら先頭コード種類分のデリゲートを割り付けるってのもあるが、こればっかしは好みだな。
100:前スレ976
18/06/12 20:18:08.93 qsxFIdydM.net
ありがとうございます。
ベタベタに書いてみます。
1バイトが1ビットごとのフラグになっている場合はビットマスクで一つずつ抽出するのが一般的でしょうか?
101:デフォルトの名無しさん
18/06/13 22:29:58.82 T96Fk9Se0.net
SQLについて質問ですが
INSERT INTO T_USER (
ID, PASSWORD
) VALUES (
@ID, @PASSWORD
);
のINSERT分を
INSERT INTO T_USER (
ID = @ID,
PASSWORD = @PASSWORD
);
のように書く場合はどのようにしたらよいでしょうか。
102:デフォルトの名無しさん
18/06/13 22:33:15.48 8SXHgjst0.net
スレチ
103:デフォルトの名無しさん
18/06/13 22:40:13.78 dwe0uTDh0.net
そういうメソッド作ったらいいじゃん
setInsert(new dictionary略);
みたいなの
104:デフォルトの名無しさん
18/06/14 08:40:57.01 tUkyOm+Z0.net
クラスの構造体(ただint型のデータが複数個しかない)をXMLに変換したいのだが
XMLSerializer以外に何かないかな?
XMLSerializerは以前にバグを起こしたことがあって使いたくないんだ
105:デフォルトの名無しさん
18/06/14 09:14:05.32 o3acK5Uh0.net
>>100
UPDATEじゃないんだから・・・
106:デフォルトの名無しさん
18/06/14 09:54:39.43 A8NrLUZ4M.net
クラスの構造体…?
107:デフォルトの名無しさん
18/06/14 11:31:35.89 /+f4Bre90.net
>>103
全手動
108:デフォルトの名無しさん
18/06/14 12:02:09.33 cv0ACSdK0.net
最終的に配列を書きだしたいのですが
それまでに色んなクラスのインスタンスからその配列の読み書きがされるのですが
どういうふうにクラスを作ればいいですか?
その配列はグローバルでstaticで宣言するか、インスタンス作るごとに参照を引き渡すのですか?
109:デフォルトの名無しさん
18/06/14 13:20:39.46 NMzxKZ+IM.net
>>107
日本語でおk
110:デフォルトの名無しさん
18/06/14 14:19:07.38 KBTpBKAkM.net
>>107
グローバルなpublic staticでいい
良い悪いを問題にするのであれば、あちこちから共通の配列をいじくるという前提の時点で設計に問題があるので、正解なし、が答えになる
111:デフォルトの名無しさん
18/06/14 15:31:16.28 fa4YRdZnp.net
アクセス関数を作ってインスタンス取得用に一つスタティック関数を用意するだけ。
アクセス関数介さないと、排他処理とかいちいち入れるの面倒だぞ。
112:デフォルトの名無しさん
18/06/14 17:22:37.66 Omv9hEYDd.net
初歩的な質問なんだけど
プロパティ?(get;set;)ついてるやつと、ついていないやつの差がわからないから教えてほしい
プロパティつけててもprivateはアクセスできないみたいだから
結局、両方ともpublicになって何が違うん?ってなってる
113:デフォルトの名無しさん
18/06/14 17:40:33.14 T0JMmz9y0.net
>>111
プロパティにするとメソッドを組み込めたりgetとsetでアクセスレベル変えられたり
あと取りあえずこの辺とか
URLリンク(docs.microsoft.com)
特定のソースで何が変わるの?って言う話なら書いた人に聞かないと分からない
114:デフォルトの名無しさん
18/06/14 17:41:27.02 im2Z0uooa.net
クラスのメンバーでプロパティじゃない変数はフィールドと言う
フィールド (C# プログラミング ガイド)
URLリンク(docs.microsoft.com)
プロパティ (C# プログラミング ガイド)
URLリンク(docs.microsoft.com)
フィールドは代入も参照も同じ制限になる
プロパティは別々に設定できる
しかもgetだけ setだけというのも可能
フィールド (メンバ変数) とプロパティはここが違う
URLリンク(code.msdn.microsoft.com)
115:8cde
116:デフォルトの名無しさん
18/06/14 18:59:14.79 UejGuppF0.net
クラスのプロパティに「型」を変数みたいにおけますか?
外部から「型」をセットして、クラスの中でその型を使って new して実体を作って利用したいのです。
117:デフォルトの名無しさん
18/06/14 19:03:10.93 UejGuppF0.net
気持ちをコードで表すと
public class Test
{
public <T> PersonClass;
public void Unko()
{
var p = new PersonClass();
p.unko();
}
}
ってな感じです。
※PersonClass にメソッド unko() がある前提
118:デフォルトの名無しさん
18/06/14 19:09:01.39 Cyktia16d.net
>>115
これ使えば?
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
119:デフォルトの名無しさん
18/06/14 19:15:40.41 5YiZsxt70.net
>>115
unkoを定義するインターフェイス作って、
Tをwhereでそのインターフェイスとnew()で絞った上で、default(T)でインスタンス作って、呼べばよいのでは?
120:デフォルトの名無しさん
18/06/14 19:19:58.23 w+8RUA83a.net
>>114
賭けてもいい
初心者がこの手の処理が必要だと思う時、それは100%勘違いw
121:デフォルトの名無しさん
18/06/14 19:26:49.09 dsNhKni40.net
>>99
enumにFlagsAttributeを付ける
[Flags]
enum Hoge : byte
{
Bit0 = 1 << 0,
Bit1 = 1 << 1,
Bit2 = 1 << 2,
Bit3 = 1 << 3,
Bit4 = 1 << 4,
Bit5 = 1 << 5,
Bit6 = 1 << 6,
Bit7 = 1 << 7,
}
var hoge = Hoge.Bit1 | Hoge.Bit4;
if ( hoge.HasFlag( Hoge.Bit3 ) )
{
122:デフォルトの名無しさん
18/06/14 23:44:33.25 rYhQU2t8a.net
>>119
そんな見てて痒くなる書き方しなくても今のC#は2進数リテラル使えるぞ
123:デフォルトの名無しさん
18/06/14 23:56:40.66 9S9/LeJo0.net
1
2
4
8
16
32
64
128
でいいよ。
124:デフォルトの名無しさん
18/06/15 00:31:01.58 UuMD2cf2a.net
>>119みたいなのならHexで書くのが一番だろうねw
少なくとも俺ならそうする
125:デフォルトの名無しさん
18/06/15 01:23:47.16 hh/0fz+KM.net
10進よりマシだが一番ではない
2進があるならどう考えても2進が一番
126:デフォルトの名無しさん
18/06/15 01:34:20.89 UuMD2cf2a.net
書いてみりゃ分かるよw
単に一つのビットだけ立っている値を列挙するなら2進リテラルは冗長過ぎる。
そもそも何のためにHexなんかあると思ってるの
2進リテラルっていうのは、例えば組み込みで7セグのパターンのテーブルを定義する時とか、
bit5-bit7みたいにニブル単位じゃないビット範囲のビットマスクを定義する時とかに使う
127:デフォルトの名無しさん
18/06/15 02:40:57.81 3RK99arqM.net
君にとってはCが頭に染み付いてるからそうかもしれないけど、
現に>>119にとっては分かりにくいからわざわざこんな書き方をしてるんだろう
今時のプログラマはC経験ない人も多いんだから実情に合わせることも必要
そういう連中を見下すのもいいけど老害呼ばわりされないように気をつけてね
128:デフォルトの名無しさん
18/06/15 03:02:28.24 UuMD2cf2a.net
>>125
しょうもな
偉そうにするな!と偉そうに言うバカw
どこが偉そうにしてるのか。
そもそも俺は>>119を必ずしも否定してない。
少なくとも10進表記や2進数リテラルよりマシだ
129:デフォルトの名無しさん
18/06/15 03:07:31.98 UuMD2cf2a.net
どーでもいいけど、こういう自分を客観視できない単細胞な奴がネトウヨとかなるんだろうね
130:デフォルトの名無しさん
18/06/15 03:33:39.61 /sL5C1h/0.net
ネトウヨってつまりどういう定義なんですか
マンコ吸わせてくださいs
131:デフォルトの名無しさん
18/06/15 06:19:02.91 9gOvrFZ50.net
5分かけて最後に煽っていくというだけで
自分が嫌ってる
132:ゴミと大差なくなっているというね
133:デフォルトの名無しさん
18/06/15 07:16:26.72 Cd+XXhnVM.net
今どきビット演算なんてしてるやつはゴミ
134:デフォルトの名無しさん
18/06/15 07:16:57.07 Cd+XXhnVM.net
これまで歩んだ人生がゴミ
135:前スレ976
18/06/15 07:27:20.01 A2l2tHW6M.net
>>119
ありがとうございます
bitarrayってのがあるらしいんですけど、これって共用体とかに一括で代入できないんですかね
3バイトデータの内の下位1バイトは1bitごとのフラグなのでbitarrayで分解できそうなんですが
136:デフォルトの名無しさん
18/06/15 09:16:33.32 rymWY0Tx0.net
そういえばちょっと疑問なんだけど、enum定義する時に>>119みたいにbyteとか指定するのは何か意味があるの?
指定したところでbyte型の変数に代入しようとしたらキャストしなきゃいけないし、やる意味がわからないんだけど
137:デフォルトの名無しさん
18/06/15 09:22:49.39 BTgSia3a0.net
>>133
え?キャスト?
138:デフォルトの名無しさん
18/06/15 09:45:21.99 rymWY0Tx0.net
>>134
え?
139:デフォルトの名無しさん
18/06/15 10:04:23.68 BTgSia3a0.net
ああ、enumで作った型なんだからenum型になってるだろ。
受ける変数も同じ型じゃないとダメなのは当たり前。
140:デフォルトの名無しさん
18/06/15 11:52:41.04 jCp8kGwY0.net
>>133
シリアライズとかネイティブとの相互運用目的
141:デフォルトの名無しさん
18/06/15 11:58:42.21 6Dx/uRsOp.net
動的にenumで作った型のsizeof求めりゃいいんだが、静的に解決しなきゃならない時は指定するしか無いって話だよな?
142:デフォルトの名無しさん
18/06/15 12:03:59.97 AMC7cROI0.net
>>116-117
コンパイル時点で型が定まらない(実行時に型が決まる)ものを new する手段という風ですよね?
使えそうです。ありがとうございました。
あとは、外部から「型」を受け取って new するまでの間、保管しておきたいのですが
型を変数(プロパティ)に格納するにはどうしたらいいんでしょ
143:デフォルトの名無しさん
18/06/15 12:20:55.24 NFN3YtCpd.net
>>139
117はジェネリクスなのでコンパイル時には一応定まってるハズ。
型を変数に入れたいならインスタンス.GetType()か、typeof(型)で、Type型の値が取れるけど…
本当にやりたい事と、実装の方法(型を受け取ってインスタンスを作ってそのメソッドを呼ぶ)がズレてないか心配。
144:デフォルトの名無しさん
18/06/15 12:25:49.54 rymWY0Tx0.net
>>137-138
なるほど、さんくす
145:デフォルトの名無しさん
18/06/15 12:48:48.68 AMC7cROI0.net
>>140
ありがとうございます。
「型」を格納する変数の型は System.Type なんですね!!
やりたいことが出来ました!!
System.Type t = typeof(××フォーム); ← ここのところを公開して外部からセット
var f = (System.Windows.Forms.Form)System.Activator.CreateInstance(t);
f.ShowDialog();
146:デフォルトの名無しさん
18/06/15 12:57:15.01 PdS4cleJa.net
>>142
それさあ、キャストしてる時点で何の意味があるんだと思わなきゃw
147:デフォルトの名無しさん
18/06/15 13:10:18.30 VuRl2MkoM.net
>>143
Showなどのフォーム共通の操作をしたいんだろう
基底クラスにキャストする分には意味はある
設計として正しいかどうかは別問題であり今の情報だけでは何とも言えないが、
君は自分の個人的な好みを一般常識であるかのように主張して相手の事情を理解しようとせず人を一方的に批判する傾向があるようだね
148:デフォルトの名無しさん
18/06/15 13:16:34.24 AMC7cROI0.net
本当は自作インターフェースを持った「なにか」から派生するクラスなのですが
そこまで書くと行数が凄いことになるので、Form を例にさせてもらいました。
149:デフォルトの名無しさん
18/06/15 13:30:43.12 /HLz/tc50.net
>>145
本当は何がしたいの?
150:デフォルトの名無しさん
18/06/15 13:36:49.24 PdS4cleJa.net
>>144
そういうのはFafcoty Method的な方法でやればいい。
最初から質問者が何か勘違いしてるだけだと言ってるが、
>>114-115みたいな方法論を取る必要は何もない。
お前ごときに俺の何が分かるんだアホか
その批判、お前自身にちゃんと向けているか?
自己分析一つできない奴に限って安易に他人を批判したがるから笑える
151:デフォルトの名無しさん
18/06/15 14:16:21.09 AMC7cROI0.net
>>146
基底クラスから派生したクラスを動的に生成します。
142 みたいな方法が出来ることを知らなかったので
switch ~ case でクラスの種類だけ new() やってたところをキレイにします。
152:デフォルトの名無しさん
18/06/15 15:03:37.25 NFN3YtCpd.net
>>145
それは自作インターフェイスに「『自作インターフェイスをもった何かのインスタンス』を返す関数」を定義しておいて、
何かの方で「その関数」を実装して、
呼び出す側では普通に「その関数」を使えば良いのではなかろうか。
抽象クラスと静的関数の方がキレイかな。
「その関数」のリストが作りたいなら、そこでやっとリフレクションで取ったらいいし。
いきなりCreateInstanceは宜しくないというか危ないし、後々、各小クラスでコンストラクタがどうしようもない状況に陥ると思うよ。
153:デフォルトの名無しさん
18/06/16 00:47:26.32 i9Db63x30.net
Dynamicは黒歴史ですか
154:デフォルトの名無しさん
18/06/16 08:04:12.32 axPFqDQY0.net
いいえ
155:デフォルトの名無しさん
18/06/16 08:10:11.50 YoGVHqI7d.net
うんにゃ
156:デフォルトの名無しさん
18/06/16 08:34:15.67 eKBdC14eM.net
むしろ.NETのメインストリームがWebに移ってからはdynamic使われまくってる
JSONデータをたくさん扱ってるといちいち型付けてられない場面が多い
157:デフォルトの名無しさん
18/06/16 09:57:30.72 fkqp7HMy0.net
自作のインタプリタ作った時に
Dynamic使った記憶がある
意図は・・忘れたww
158:デフォルトの名無しさん
18/06/16 10:02:21.77 v/kjTt9Bd.net
>>153
jsonからクラスへの変換なんてVisualStudio使えば一瞬じゃない?
159:デフォルトの名無しさん
18/06/16 10:04:46.66 ayiE9VmyM.net
大規模プロジェクトなら連想配列禁止は納得できる
160:デフォルトの名無しさん
18/06/16 12:20:07.70 omCaDuHT0.net
教えてください。
戻り値が async Task のメソッドで await を使わないと↓のような警告が出ます。
> CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
> 'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を
> 使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。
独立したメソッドなら、await が必要ないなら async Task をやめて void にすればいいのですが、
仮想呼び出しなどの関係で戻り値を変更したくない場合の解決策に悩んでいます。
とりあえず、
[1] 警告を抑制する
[2] async だけ外して Task.CompletedTask を返す
という二つの解決策を思いついたのですが、どちらも到底正しい方法とは思えません。
いいアイディアがあれば教えてもらえると嬉しいです。
161:デフォルトの名無しさん
18/06/16 12:52:10.42 Ws4rvThPa.net
>>157
2が正しい
162:デフォルトの名無しさん
18/06/16 12:56:37.78 dmQidkOU0.net
同期的に結果が分かるものを非同期にして結果が欲しいとか、コールバックでも仕込んで別処理で結果得ないと正しい結果なんて分からないだろうに。
163:デフォルトの名無しさん
18/06/16 13:16:07.05 omCaDuHT0.net
>>158
レスありがとうございます。やはり他に正しい方法はないのですね。
非同期が必要になるまでは同期
164:実行できるのが async の効果だと思っていたので 非同期が全く必要ないときに async が使えないのは逆のような気がして 違和感が拭えないのですが、とりあえず [2] の方法でやっていこうと思います。 >>159 申し訳ないのですが、同期ついて理解不足で仰っていることが理解できないので もう少し詳しく説明していただけないでしょうか。
165:デフォルトの名無しさん
18/06/16 13:59:46.72 VCIrJNT80.net
await Task.Run(()=>やりたいこと)
で済ますのはどうなんだろ。
166:デフォルトの名無しさん
18/06/16 14:16:04.53 Ws4rvThPa.net
>>161
無駄にスレッド消費するしマルチスレッドによる不要なトラブルを持ち込む可能性もある最低最悪の方法
awaitを外したくないなら await Task.CompletedTask の方がクリーン
167:デフォルトの名無しさん
18/06/16 14:42:27.67 omCaDuHT0.net
>>161
レスありがとうございます。せっかくなのですが、私もその方法はあまり良くないと思います。
ご存知でしたら失礼を許していただきたいのですが、以下の2つの効果は同じではないのです。
async Task X() => Thread.Sleep(1000);
async Task Y() => await Task.Run(() => Thread.Sleep(1000));
>>162
確かに await Task.CompletedTask をどこかに挟むだけなら
変な副作用もなさそうですね。
ただ、警告を抑制するためだけに意味のないコードを加えるのは正しくないように思います。
私がそんなコードを見たら、await Task.Yield() のような効果を期待しているのかなと
誤解してしまいそうです。
(もちろん、 await Task.CompletedTask を勧めてくださっているわけではなく、
「await を外したくないなら」という無理のある前提に合わせて話してくださっていることは
理解しています)
168:デフォルトの名無しさん
18/06/16 14:59:09.83 ext5YZxs0.net
これあえて警告出しっぱなしじゃ駄目なのかね
IDEがasyncメソッドをawait無しで実行しているから警告しているだけであって、意図的に同期実行するのならコメントとかで明示しておけば良いような気もするけど
169:デフォルトの名無しさん
18/06/16 15:23:38.22 omCaDuHT0.net
>>164
レスありがとうございます。
たかが警告を消すために実際のコードを書き換える必要があるのかという考えは
実にごもっともだと思います。
ただその場合、警告を抑制するだけでも意図は十分に伝わると思うのですが、
やはり警告はそのままにしてコメントなどで説明を行うべきなのでしょうか。
170:デフォルトの名無しさん
18/06/16 15:24:59.98 gQX30pFpa.net
#pragma warningディレクティブ使って警告を抑止するのが一番素直のような気がする。
知らんけど
っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...
171:デフォルトの名無しさん
18/06/16 15:35:00.89 omCaDuHT0.net
>>166
レスありがとうございます。やはり警告の抑制も選択肢になりますよね。
警告を抑制することに対する考え方は人それぞれということもあると思いますので、
その都度状況に応じた対処法を考えるのが一番でしょうか。
> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...
申し訳ありません。これについてよく意味が理解できませんでした。
詳しくご説明していただけないでしょうか。
172:デフォルトの名無しさん
18/06/16 15:46:13.12 gQX30pFpa.net
>>167
ごめん後者アホなこと言いましたw
よく考えてみたら、asyncが付くかどうかはただのメソッドの中の実装によって決まる話であって、
ベースクラスやインターフェイスによってそれが強制されることはないよねw
普段深く考えずに使ってることがばれちゃったw
173:デフォルトの名無しさん
18/06/16 16:13:25.34 dmQidkOU0.net
なぜ同期させているのかが根本的に分かって無いから、警告を解く事だけに注意が向いてるんだな。
同期が必要ならコードどころか構造を変えるくらいしないてならないだろうに。
174:デフォルトの名無しさん
18/06/16 17:10:20.97 b9GFXH4k0.net
状況把握しきれていないが
async()=>{}という形でラムダにasyncつけることで解決できるケースもあるんじゃね?
175:デフォルトの名無しさん
18/06/16 17:13:04.67 omCaDuHT0.net
>>167
ご説明ありがとうございます。 >>166 で仰っていた意味が理解できました。
async/await は糖衣構文なので確かにベースクラスなどで使用が強制されることはありませんが、
深く考えずに使えるところが糖衣構文のいいところですし、
async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。
これを踏まえて、改めて >>166 にお返事したいと思います。
> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...
文法上は async なしでも問題ありませんが、コードの一貫性を考えると async を意図した
メソッドのオーバーライドで async なしは問題だと思います。
それにもかかわらず、たまたま実装上 await を全く使わなかっただけで
async の使用をとがめるような警告が表示されてしまうので悩んでいるのです。
>>169
レスありがとうございます。他の方のご意見も聞かせていただいて、
やはりこの警告は不適切で、警告を解くことだけに注意を向ければいいように感じてきています。
それに対して異論を唱えてくださっているようなのですが、勉強不足で仰っていることが
よく理解できていないので、申し訳ないのですが詳しく説明していただけないでしょうか。
176:デフォルトの名無しさん
18/06/16 17:18:42.84 omCaDuHT0.net
>>170
レスどうもありがとうございます。
このような返しばかりで情けないのですが、理解力が足りず仰っていることがよくわかりませんでした。
申し訳ありませんが詳しいご説明をお願いできないでしょうか。
177:デフォルトの名無しさん
18/06/16 18:03:54.76 AoXX/TDlp.net
先ず、同期と非同期で何が違うのか、
同期は目的の処理を完了して戻って来る事が大前提で作られている。
非同期は目的の処理を行う指示だけをして戻って来る。
だから戻り値も自ずと意味が違って来るのが普通。
同期の戻り値は実行結果、非同期の戻り値は指示出来たかどうかで結果はまだ分からない。
そこを根本的に間違えているから、問題なんだよ。
178:デフォルトの名無しさん
18/06/16 18:08:04.04 40YgBCHOM.net
>>173
基底クラスやインターフェイスに合わせるためであったり、
後でDB使った実装に変更する予定で今はハードコードしておくみたいなときには普通にあるケースだよ
後で非同期に変えるのは影響が大きいからね
179:デフォルトの名無しさん
18/06/16 21:30:40.09 omCaDuHT0.net
>>173
レスどうもありがとうございます。
同期処理と非同期処理の違いは、一般論としてはおっしゃるとおりだと思うのですが、
それが >>174 でご指摘いただいているような目的を達成する上で障害になっていて、
そのような問題を解消するために async/await 構文が作られたのではないでしょうか。
だとすると、同期処理と非同期処理の違いを理由に await なしの async を
否定することは本末転倒のように感じてしまうのですがいかがでしょうか。
>>174
ご説明どうもありがとうございます。
具体例を含めてとてもわかりやすく感じたのでこのレスの前半で引用させていただきました。
私にはこれだけ要領よく説明することはできそうにないので助かりました。
180:デフォルトの名無しさん
18/06/16 21:44:52.43 dmQidkOU0.net
まあ、メイン処理止めていいなら待てばいいじゃない。
止めたく無いならポーリングやコールバックで終わったの知ればいいじゃない。
コーディングでワーニング出るから構造を弄るって手法そのものが間違いって言ってるの。
181:デフォルトの名無しさん
18/06/16 22:10:42.86 omCaDuHT0.net
>>176
メイン処理を止めたくないならポーリングやコールバックを明示的に記述する以外に
選択肢がないというように読めてしまったのですが、この部分に間違いはないでしょうか。
もしそうなら async/await 構文についてあまりお詳しくないようにお見受けしますので、
よろしければ一度お触りになってみてください。
非同期処理の大変さをご存知であればこそ、便利さを実感できるのではないかと思います。
(ちなみに、今の問題は非同期処理を行うことも可能なメソッドをオーバーライドする際に
非同期処理を全く使わないと警告が出てしまうということですので、
何かに妥協してメイン処理を止めるというわけではありません)
182:デフォルトの名無しさん
18/06/17 00:16:30.35 hCSOxZ9X0.net
そもそもasync修飾子そのものには、たんにawaitする目印としての意味しかないわけで
awaitしないメソッドをasyncにするのが根本的におかしいとしか思えんのだが
183:デフォルトの名無しさん
18/06/17 04:27:25.92 f8Zp6PCK0.net
wpfのフォームってhtmlとcssが合わさったようなもん?
184:デフォルトの名無しさん
18/06/17 05:09:52.71 w8cOZ/cU0.net
>>178
async Task Hoge() { }
↑は警告は出るもののコンパイルできますが
Task Fuga() { }
↑はコンパイルすらできないので、async がたんに awaitするための目印というのは語弊があるのではないでしょうか。
185:デフォルトの名無しさん
18/06/17 10:24:51.50 g+98DwlT0.net
> async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
> 事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。
TAPはTaskを返す関数の実装にasync/awaitを強要せんし使う側も関知せんじゃろ
AsyncサフィックスなんてそれこそEAPの頃からの慣例でしかない
awaitを使わず何故か付いてるasyncよりTask.CompletedTaskを返すコードの方がよほど明確だと思うがね
186:デフォルトの名無しさん
18/06/17 11:46:32.45 IxLGC6rAM.net
>>180
ただの目印と理解していいよ
asyncって目印を見つけたらメソッド内だけ文法をちょっと変えますねっていう取り決めなの
目印もなしに勝手に文法を変えられたら仕事にならん
だから目印が必要なの
目印を付けただけでエラーになると言うけど
目印を付けたら文法が変わるのだから同じコードでエラーが出たってなにもおかしくないだろう?
187:デフォルトの名無しさん
18/06/17 12:14:10.68 w8cOZ/cU0.net
>>181
レスどうもありがとうございます。
async Task SayHello3() { await SayHello(); await SayHello(); await SayHello(); }
async Task SayHello2() { await SayHello(); await SayHello(); }
async Task SayHello1() { await SayHello(); }
は問題ないのに
async Task SayHello0() { }
ではなく
Task SayHello0() { return Task.CompletedTask; }
と書かなければならないことに不自然さを感じていたのですが、
2つ目の SayHello0() を単独で見れば、おっしゃる通り何をしているかは明確ですし、
async に固執するのもあまり良くなさそうですね。
async はそのままにして警告を抑制する方法を提案してくださる方もいらっしゃいますし
私としてもそちらの選択肢を完全に切り捨てるまでの確信は持てていないのですが、
Task.CompletedTask を返す方法も決して悪いものではないと分かりとても勉強になりました。
>>182
確かにそのとおりですね。失礼いたしました。
ただ問題なのは、「目印を付けただけでエラーになる」のではなく、
「目印を付けないとエラーになるのに目印を付けても警告が残る」という点でして、
せっかくの目印の機能を気持ちよく使うことができず、どうしたものかと考えております。
188:デフォルトの名無しさん
18/06/17 12:46:14.26 JpLAIDLea.net
結局質問者の疑問はこういうこと?
(1) サブクラスで非同期メソッドとして実装される可能性があるメソッドの名前は
Asyncでサフィックスすべきか?
(2) (1)がYesの場合、そのメソッドが非同期で実装されなくても(awaitを含まなくても)
asyncで修飾すべきか?
正解はYes-No?
理由は、非同期メソッドは使う側がそれを非同期メソッドだと理解している必要があるのに対し、
非同期メソッドじゃないものを非同期メソッドと誤認しても弊害はないから
もちろん不要な混乱を避けるために、「このメソッドは多態の都合上Asyncでサフィックスされてるけど
非同期メソッドじゃないよ」みたいなコメントは必要か?
189:デフォルトの名無しさん
18/06/17 13:22:22.85 w8cOZ/cU0.net
>>184
整理していただきどうもありがとうございます。
(1) については実は疑問であるという認識をもっていたわけではなく、
ご指摘をいただくまで当然そうするべき事柄であると考えておりました。
(2) がまさに疑問点でして、(1) が Yes/No のどちらであっても
答えが得られると嬉しいと思っています。
> 非同期メソッドは使う側がそれを非同期メソッドだと理解している必要があるのに対し、
> 非同期メソッドじゃないものを非同期メソッドと誤認しても弊害はない
おっしゃる通りだと思います。(もちろん細かなオーバーヘッドが問題にならない場合の話ですが)
> 「このメソッドは多態の都合上Asyncでサフィックスされてるけど
> 非同期メソッドじゃないよ」みたいなコメントは必要か?
インターフェース等を介さずにメソッドを呼び出す可能性がある場合は
そのようなコメントがあると親切だと思いますが、
私としては、必ずしも必要ではないように思います。
190:デフォルトの名無しさん
18/06/17 14:33:41.38
191:IxLGC6rAM.net
192:デフォルトの名無しさん
18/06/17 21:01:18.97 6Wp8R37qa.net
・スレッド生成
勉強してから言えよって思う
193:デフォルトの名無しさん
18/06/17 21:08:29.24 rRGqqoATM.net
あーこれゴミクズにありがちな燃えるコメントの仕方だわ
言い争いが始まるので、賢明な諸兄は3日ほどスレを閉じておくのがよろしい
194:デフォルトの名無しさん
18/06/17 21:15:10.69 Z+AbfkC70.net
静的メソッドの中で動的メソッドって呼び出せないってあるけど、自分のクラスのインスタンスのメソッドは呼び出せるの?教えて雑魚
195:デフォルトの名無しさん
18/06/17 21:27:50.40 6Wp8R37qa.net
> async Task SayHello3() { await SayHello(); await SayHello(); await SayHello(); }
> async Task SayHello2() { await SayHello(); await SayHello(); }
> async Task SayHello1() { await SayHello(); }
と書くより引数nで実行回数を渡してforループで制御したらいい
n=0でasync awaitのペアがあるにかかわらず一度も実行されないawaitのついたメソッドができる
勿論警告もでないし誰かの言う一貫性のある美しいコードじゃないか
196:デフォルトの名無しさん
18/06/17 21:32:42.49 6Wp8R37qa.net
わかってると思うけどawaitがついたメソッドに突入した時点で
内部が自動的に別のスレッドで実行されるわけじゃない
中に入っても最終的にタスクにたどり着かないと別スレッドはスタートしない
System.Threading.Thread.CurrentThread.ManagedThreadIdでスレッドIDがでるから確認したらいい
197:デフォルトの名無しさん
18/06/17 21:38:25.64 7lB5BPvGa.net
>>191
await後に書いた処理って元のスレッドに同期されると思ってたけど、awaitで実行されたスレッドのまま進むよね?
Formアプリであれ?invokeしなくていいの?って思った記憶ある。思い違いだったらすまぬ
198:デフォルトの名無しさん
18/06/17 21:42:03.70 62NxCwPo0.net
非同期自体が複雑だし、(当時は)新しい構文ってことで、混乱を少しでも減らすために警告にしてるだけっぽいね
抑止しちゃっていいと思うよ
199:デフォルトの名無しさん
18/06/17 22:13:20.40 g+98DwlT0.net
>>193
Formが作成された所謂UIスレッドでは同期されるが、コンソールアプリ等では同期されない
もうちょい突っ込むと、await文が実行されるスレッドにSynchronizationContextへの仕込みがあるかどうかで違ってくる
await後に実行されるスレッドはSynchronizationContext.Postの実装により決定される
Winformsは最初のフォーム作成時にWindowsFormsSynchronizationContextを現在のスレッドに設定し
WindowsFormsSynchronizationContext.Postはメッセージループを仲介してUIスレッドでawaitの続きを実行する
具体的な実装はReference SourceやmonoのWindowsFormsSynchronizationContextを読むのが良い
200:194
18/06/17 22:18:16.07 g+98DwlT0.net
安価まちげーた>>192
なんかテキトーに書いたら分かりにくいな・・・
要はWinforms(WPFも同様)のスレッドでawaitするとその後の文は裏で勝手にControl.Invokeされてると思えばええねん
201:デフォルトの名無しさん
18/06/18 03:16:27.74 tq92Vuqu0.net
>>180
>Task Fuga() { } はコンパイルすらできない
それは戻り値のチェックで、int Fuga...でもコンパイルできないだろ
Taskもasync/awaitも関係ない話
むしろ、async Task Hoge() { } がタスク戻さないのにコンパイル通ることのほうが問題じゃね
つかほんとにこれ警告だけで通って正常に動くの?
そのときHoge()で何が帰ってきてるんだ?
202:デフォルトの名無しさん
18/06/18 03:36:27.38 tq92Vuqu0.net
まあその例で統一したやり方でやりたいなら
async Task SayHello0() { await Task.CompletedTask; }
で良いんじゃないのか
203:デフォルトの名無しさん
18/06/18 07:05:52.53 5zfP7m4zM.net
>>196
最適化してCompletedTaskでも返すのかなとも思ったけど
IL見ると他と同じようにコード生成して実行してんね
このオーバーヘッドが必要な処理なら警告を無視してasync使えばいいと思う
204:デフォルトの名無しさん
18/06/18 10:59:47.44 ubyRHWyfa.net
どう考えても質問者の方がよく分かってるのに
何も分かってない奴に限って上から目線で偉そうに何か言ってるのは滑稽過ぎるねw
気付いてないのは本人だけ(とすら気づいてない)のも何とも笑いを誘う
205:デフォルトの名無しさん
18/06/18 11:33:39.78 jfMWOsL40.net
質問者のドメイン知識の話だろ。
質問者以外に、このスレどんなエスパーいるのか?
206:デフォルトの名無しさん
18/06/18 12:52:58.18 omBcANz0a.net
実際にawaitされることで呼び出し側が想定されることが実現されるなら
たとえ何もしない無駄なスレッドを使用したとしてもそれが一番いい
最適化されて何もしないとなればUIスレッドなどの副作用を期待していた呼び出し側が困る
実際はそういうことはおこらないので問題ない
上に書いてあったawait Task.CompletedTask;が一番いい答えだと思う
207:デフォルトの名無しさん
18/06/18 17:06:03.17 wetnizJS0.net
プログラミングってさあ、基本を使い倒すほうがいいの?
208:デフォルトの名無しさん
18/06/18 18:38:53.61 rGsHjxJX0.net
皆さんレスどうもありがとうございます。
>>186
スレッド生成はともかく、無駄をなくすという観点は重要ですね。
>>198 に書いていただいてあることも踏まえると、
> しかし文法上の間違いではないのでエラーと断言することもできない
> 間をとって警告を出すってのが妥当な落とし所じゃないかな
というご意見は実に的を射たものであるように感じました。
>>190
> forループで制御したらいい
同じメソッドを繰り返し呼ぶ例は不適切でしたね。失礼いたしました。
ただ、for ループ版に n = 0 を渡しても何の問題もないのに
async Task SayHello0() { } では警告が出るというのも
やはり腑に落ちない感じがします。
>> 191
> 中に入っても最終的にタスクにたどり着かないと別スレッドはスタートしない
やはりそこが重要なポイントですよね。
だからこそ、最終的にタスクにたどり着かない選択肢がある方が
自然だと思うのですがいかがでしょうか。
>>193
> 非同期自体が複雑だし、(当時は)新しい構文ってことで、混乱を少しでも減らすために警告にしてるだけっぽいね
> 抑止しちゃっていいと思うよ
言われてみると、構文に不慣れな方向けの警告であるという考えは
とても納得ができました。
あとは、「自分は構文を十分に理解しているから警告を抑制しても構わないのだ」
という主張をいかにして人様に受け入れて貰うかが課題でしょうか(汗
209:デフォルトの名無しさん
18/06/18 18:39:23.10 rGsHjxJX0.net
>>196
> むしろ、async Task Hoge() { } がタスク戻さないのにコンパイル通ることのほうが問題じゃね
> つかほんとにこれ警告だけで通って正常に動くの?
> そのときHoge()で何が帰ってきてるんだ?
確かに一見すると不思議ですよね。
このあたりの詳しい話は TaskAwaiter で検索するとお知りいただけると思います。
>>197 >>201
> await Task.CompletedTask
>>162 に書いていただいていることを仰っているのだと思いますが、
>>162 は >>161 の方法の不味さを説明するために await Task.CompletedTask を
引き合いに出されただけで、実際にこの方法を推奨されているわけではないと思います。
私自身も、async Task Hoge() { } と Task Hoge() => Task.CompletedTask; は
それぞれメリットがあるのに対して sync Task Hoge() => await Task.CompletedTask; は
すべての面で上 2 つに劣っていると考えておりますが、いかがでしょうか。
>>198
> 最適化してCompletedTaskでも返すのかなとも思ったけど
> IL見ると他と同じようにコード生成して実行してんね
大変ためになる情報をどうもありがとうございます。
私も確認してみましたが、async Task Hoge() { } と
Task Hoge() => Task.CompletedTask; との間にこれだけ IL のコードに差があると
前者
210:を使うのは躊躇してしまいますね。そもそも私は > このオーバーヘッドが必要な処理 になる状況が分からず、CompletedTask を返すように最適化が行われるべきだと思うのですが、 「await なしの async」と「CompletedTask 返し」との間の違いに気づいていらっしゃるようであれば ぜひお教えいただけないでしょうか。
211:デフォルトの名無しさん
18/06/18 18:46:20.98 XI+GT1Uo0.net
>>202
何が聞きたい
旅行ってさあ
車で行ったほうがいいの?
→目的地や条件による
212:デフォルトの名無しさん
18/06/18 20:44:23.89 /4T5LZMPM.net
>>202が一を聞いて十を知る頭の良い人間なら先に一通り言語をマスターした方が効率的
そうでないなら最初から高度な機能を覚えてもそれが何の役に立つのか理解できないから、まずは基本だけで身をもって苦労したほうがいい
213:デフォルトの名無しさん
18/06/19 05:31:43.83 R/zbDFZs0.net
>>204
そもそもawait なしの asyncが必要な理由も場面も思い浮かばんが
自分一人でやってるなら好きにすればいいんじゃね
最適化うんぬんを言うなら、Taskを返すどころかそんな呼び出しそのものが不要じゃね
214:デフォルトの名無しさん
18/06/19 08:14:05.91 qYFKlpQqM.net
そもそものそもそもasyncやawaitで気軽にスレッドを立ててるような処理はだいたいバグってる
スレッドを立てるってそれ自体の処理より
立てても大丈夫なぐらいの前準備のが遥かに手間がかかる
気軽に立ててあるとこはまず間違いなくバグってるので安心していい
215:デフォルトの名無しさん
18/06/19 08:47:25.71 XF2Gjt0sa.net
asyncとスレッドって直接関係ないだろ
スレッドは非同期処理を実装する手段の一つに過ぎない
最近のazureなんか「上司にメール送って添付URLのページにある承認ボタンが押されるまで待つ」みたいな非同期処理ですらawaitできるんだぞw
216:デフォルトの名無しさん
18/06/19 10:49:26.69 2YKCyXH1a.net
誰に向かって説教してるつもりなのかねw
馬鹿過ぎる
217:デフォルトの名無しさん
18/06/19 17:36:20.33 ygjnsczhH.net
google検索で
@it async await
これ読んでわかった気になった。
シンプルな実装では使えたけど、応用でつまずく。最近プログラム組んでないので頭固い……
218:デフォルトの名無しさん
18/06/19 17:40:54.18 B+3+LOal0.net
固ければジューサーに入れてみる?
219:デフォルトの名無しさん
18/06/19 18:44:23.63 eWtmWHlOM.net
普通のジューサーでは>>211の固い頭は砕けません
そこでショップジャ〇ンのマジックブレッドデラックスを使えば楽チンに下ごしらえができます
220:デフォルトの名無しさん
18/06/19 19:56:40.35 0sn0Q0vo0.net
C♯を勉強するのにおすすめのサイトありますか?
何かを作りなが勉強したいなと思ってるんですが。
221:デフォルトの名無しさん
18/06/19 20:10:42.40 kAXRFxrM0.net
>>214
URLリンク(dobon.net)
URLリンク(www.atmarkit.co.jp)
URLリンク(ufcpp.net)
URLリンク(docs.microsoft.com)
ここで勉強するというかやりたいことを「C#」に続けてググるとだいたいこのあたりがヒットする
222:デフォルトの名無しさん
18/06/19 20:12:26.56 ygjnsczhM.net
>>213
そこで、トゥルースリーパーとパチもんハズキルーペ買った。
パチもんの方はメガネにLEDライトが付いてたからつい。薄暗いとこであれはめちゃ便利(稀にしか使わないけど…orz)。(100金の老眼鏡でいいと思う。しょ�
223:ケん凸レンズの一種だから。) トゥルースリーパーは半年くらいたってまだ箱の中orz
224:デフォルトの名無しさん
18/06/19 21:01:02.40 RAxnAMrUr.net
c#のコーティング方法で検索すること多いけど、なぜかLINQで解説しているサイトがほとんどない
日本語サイトも海外サイトも
なんで?
225:デフォルトの名無しさん
18/06/19 21:02:44.86 LBhs/jk2M.net
>>217
実践的なアプリ開発で使われる機能だから、コピペTips系サイトのサンプルコードで必要になることはほとんど無い
226:デフォルトの名無しさん
18/06/19 21:53:01.39 EPHYIqEL0.net
素人に使われると価値が下がるからね
素人は年収300万で死ぬまでくだらないコードを書いていればいいんだよ
227:デフォルトの名無しさん
18/06/19 22:04:52.94 kI3CAS1L0.net
>>217
ほとんどないわけねーよwww
228:デフォルトの名無しさん
18/06/19 22:16:45.72 EE12WGu0M.net
>>217
LINQは手段であって目的じゃないからじゃないかなああああ
229:デフォルトの名無しさん
18/06/20 09:42:33.52 +y79X+880.net
FileSystemWatcherのChangedイベントの発生条件は、監視しているディレクトリ内のファイルまたはディレクトリのサイズ、システム属性、最後の書き込み時刻、最後のアクセス時刻、またはセキュリティ アクセス許可の変更のようですが、
このうちのどれが変更されたか種痘するにはどうすればよいでしょうか?
230:デフォルトの名無しさん
18/06/20 11:51:07.40 ZYBHUW1Qr.net
>>218
そういうもんなの?
>>220
スタックオーバーでたまに外人さんがLINQで答えてるのあるくらい
割合的に3%くらいな印象
みんな使わないんだね
>>221
手段でも目的でもどっちでもいいの
231:デフォルトの名無しさん
18/06/20 12:05:31.86 7vWN9rvKa.net
>>222
使ったことないけど、イベントハンドラで受け取れる引数(FileSystemEventArgs)
で普通に分かるんじゃなくって?
URLリンク(msdn.microsoft.com)
232:デフォルトの名無しさん
18/06/20 12:06:45.48 5eL+NvGEa.net
>>222
あらかじめ情報をどこかに持っておいて比較するしかないかな
>>224
変ったという情報しかくれない
233:デフォルトの名無しさん
18/06/20 12:14:29.61 7vWN9rvKa.net
>>225
いやいや、ちゃんと提示したリンクよく先見ました?
234:デフォルトの名無しさん
18/06/20 12:16:40.94 7vWN9rvKa.net
>>225
あー失礼。
よく見ると結局詳細な情報は得られないみたいね
235:デフォルトの名無しさん
18/06/20 12:22:49.35 7vWN9rvKa.net
ちょっとググって見た感じ、結構面倒だけど、
知りたい変更の数だけ適切にNotifyFilterプロパティを設定したFileSystemWatcherを作れば
一応可能な感じはするね
236:デフォルトの名無しさん
18/06/20 12:29:31.18 4Nq0pqOcd.net
>>223
みんな使ってるよ
237:デフォルトの名無しさん
18/06/20 22:31:23.62 hTxlP2+IM.net
ググり方を知らない典型
238:デフォルトの名無しさん
18/06/21 21:35:06.03 hmU1hN6P0.net
エクセルbook1を開かずにsheet2の2列目に入ってる項目をコンボボックスに入れたいのですが、どうやるんですか?
239:デフォルトの名無しさん
18/06/21 21:41:20.00 vdaQuC2wp.net
中身を見ずに言い当てる手品のやり方なんか知らねーよ。
240:デフォルトの名無しさん
18/06/21 21:43:13.77 pTjgD9kkM.net
地�
241:魔ノ落ちろ
242:デフォルトの名無しさん
18/06/21 21:51:22.49 lTKRVfWU0.net
Excel.exe使わずにって意味ならいくらでもあるだろ
243:デフォルトの名無しさん
18/06/21 22:32:53.55 7/J4zdhU0.net
御託はいいから答えろゴミクズ
244:デフォルトの名無しさん
18/06/21 23:11:39.87 HAta7DXc0.net
xlsxならclosedxmlつかえば
245:デフォルトの名無しさん
18/06/22 00:26:01.32 /gqu33js0.net
ファイル開かずにならもちろん無理。
見えないだけなら可視しなければいいだけやん。
246:デフォルトの名無しさん
18/06/22 00:49:53.36 OqpGVa7ea.net
日本人のエクセルスキーは異常
海外にも神エクセルってあるんだろうか
247:デフォルトの名無しさん
18/06/22 01:45:41.77 fZhhlNhQ0.net
>>231
コンボボックスとは?
248:デフォルトの名無しさん
18/06/22 03:12:37.07 XVd2TvDg0.net
どんなものを作ればいいのかわからない
何をつくればいいんだ
教えてお前↓
249:デフォルトの名無しさん
18/06/22 03:21:00.63 6eBOmsiI0.net
JavaMachine
250:デフォルトの名無しさん
18/06/22 06:50:27.01 PzKWFNpyd.net
会社が未だにxpが数台あって、数多くあるエクセルを開いて処理して閉じる開いて処理して閉じるってやると重いけどなんか早くなる方法ってある?
database?SQL?
VB6でそうやってエクセルファイルを扱って処理してるんだけど
251:デフォルトの名無しさん
18/06/22 06:57:20.38 6eBOmsiI0.net
5万円のPCを買ってくる
252:デフォルトの名無しさん
18/06/22 07:07:33.30 Fs6DCFa0a.net
>>238
外人はそもそも罫線をあまり使わない
方眼紙に文字を詰め込むのは日本猿特有の習性
253:デフォルトの名無しさん
18/06/22 07:09:51.33 6eBOmsiI0.net
私は猿なのでVSの枠がはっきりしないフラットデザインが馴染めません。
254:デフォルトの名無しさん
18/06/22 07:20:32.82 Y47lTZ4XM.net
日本猿も江戸時代はプレーンテキストだったのに、どこで間違えたんだろうな
255:デフォルトの名無しさん
18/06/22 09:37:09.99 bJJwlRlwM.net
>>231
開かないとわかりません
256:デフォルトの名無しさん
18/06/22 09:59:49.98 atRhX3PgM.net
>>245
同意
各項目の意味付けが曖昧になってすごく見づらい。退化と言いたいくらい。
そのうち立体的にするとわかりやすいやろって波が来ると思う。
257:デフォルトの名無しさん
18/06/22 10:09:55.10 lIRytxFLM.net
そもそも細々としたアイコンやメニューを大量に配置するのに適したUIではないわ
Azureコンソールとか見てても思うけど、マイクロソフトにUXデザイナーがいないってのは恐らく本当
258:デフォルトの名無しさん
18/06/22 10:13:34.27 etP9oQEYM.net
VSCodeのUIは使いやすいけどな
本家VSもボタン全部無くしてコマンドにするべきだわ
259:デフォルトの名無しさん
18/06/22 10:18:33.53 KB00qr+FM.net
web service(asmx)について教えてください。
利用する複数のアプリで使い回したいものをstatic変数に保持したいのですが、寿命が尽きるタイミングは分からないでしょうか?
具体的にはデータベースのconnectionでして、セッションをケチるために1つだけを使い回そうと考えています。寿命が尽きる時にdisposeしたいのですが、できない場合問題でしょうか?
260:デフォルトの名無しさん
18/06/22 10:26:12.51 xMgX8Fdkr.net
C#の設計思想とか、どういう設計でコード書いたらいいかみたいなのがわかりやすい書籍ってある?
261:デフォルトの名無しさん
18/06/22 10:51:01.98 32SF4tM80.net
>>244
値を縦に並べて合計との間に一本横線引いてあるだけとか、海外の資料じゃ良くあるよね
>>245
馴染めないという程じゃないけど、もうちょっと境界をはっきりして欲しいな
Windowsのデザインからしても最近のMSのトレンドなんだろうけど
262:デフォルトの名無しさん
18/06/22 12:00
263::58.68 ID:fAckkxP+p.net
264:デフォルトの名無しさん
18/06/22 12:11:16.45 mIOgjjA8a.net
フラットデザインは最近はやりのユニバーサルデザインとは真逆
265:デフォルトの名無しさん
18/06/22 12:11:51.14 U+1NZIRBr.net
>>254
よさげ
とりあえずKindle版ぽちった。
ありがとう!
266:デフォルトの名無しさん
18/06/22 12:19:03.29 D0ZAUiXgM.net
第2版が出てたんだな
ステマか
267:デフォルトの名無しさん
18/06/22 14:40:02.21 +QjyPCKBM.net
ダイレクトやろ
268:デフォルトの名無しさん
18/06/22 17:59:11.25 32SF4tM80.net
むしろサードパーティマーケティング
269:デフォルトの名無しさん
18/06/22 18:01:56.90 v3P4scZFM.net
今年独り社内SEとして入社しC#を選んだ者ですが、コンストラクタをオーバーロードして引数が有るものと無いものを作りました
よくよく考えると引数が無いコンストラクタのインスタンスを作って引数有りを前提にしたメソッドをコールすると最悪例外を出してしまうのですが、これは設計不良として検討し直しでしょうか?よくある事として許容されるでしょうか?
270:デフォルトの名無しさん
18/06/22 18:07:20.69 j0bZxxMK0.net
>>260
>引数が無いコンストラクタのインスタンスを作って(コンストラクタの)引数有りを前提にしたメソッド
人に聞くまでもなく作り直さないとだめだろう
271:260
18/06/22 18:21:23.38 v3P4scZFM.net
やっぱり設計の問題ですよね
フィールドに初期値入れれば例外は起きないと思いますが、引数必須のインスタンスを作られたら無意味なメソッドが完成するというのは設計者失格ですよね
272:デフォルトの名無しさん
18/06/22 18:35:58.53 j0bZxxMK0.net
>無意味なメソッドが完成する
メソッド書き直すとかないんだ・・・
普通は条件が違えば呼ばれないようにするとかメソッド内部で分岐させるとかいろいろあると思うんだが
273:デフォルトの名無しさん
18/06/22 19:36:18.31 fkpP2SFC0.net
>>251
>寿命が尽きるタイミングは分からないでしょうか
基本的には分からない
つかキャッシュ使え
そもそもDBコネクションならほとんどの場合でドライバ側でプーリングされてると思うが
274:デフォルトの名無しさん
18/06/22 19:43:22.50 RGVBxohIa.net
>>260
設計不良は大げさ過ぎw
普通に考えて
(1) 引数ありのメソッドは廃止。代わりにそのデータはプロパティでセットできるようにする。
(2) 引数なしのコンストラクタが呼ばれた時はプロパティの値は規定値が設定されるようにする
こんだけでしょう
275:デフォルトの名無しさん
18/06/22 19:58:18.66 KB00qr+FM.net
>>264
データベース管理者から、なるべく接続を増やすなと言われてます。複数のPCから複数のアプリでアクセスするので、窓口を一本化するイメージです。
なのでプーリングはアプリ分の接続が残るので逆効果。
キャッシュを使うとは具体的にはどうするのですか?ググるヒントをもう少しください。
276:デフォルトの名無しさん
18/06/22 20:38:24.35 fkpP2SFC0.net
>>266
>複数のPCから複数のアプリでアクセスするので
それサーバ側の話?
アクセスって何に?DBにアクセスするのは誰?
つか、そもそもそれWEBサービスに同時アクセスあったときにどうする気?
277:デフォルトの名無しさん
18/06/22 20:58:02.81 atRhX3PgM.net
>>260
使う側からすると、引数に渡す値ね~よのときは、引数なしのほうがいいな。
(なしのときは null渡すとかにしたくないな。私見)
278:デフォルトの名無しさん
18/06/22 22:05:33.33 rFBnrjcr0.net
>>266
接続ユーザー分排他でもするのかよw
279:デフォルトの名無しさん
18/06/22 23:04:03.86 TC2xExz/0.net
4msのインターバルタイマを実現するのにおすすめの方法を教えてください
280:デフォルトの名無しさん
18/06/22 23:08:50.34 6eBOmsiI0.net
リアルタイムOSをインストールする
281:デフォルトの名無しさん
18/06/23 00:01:03.09 9nwowUkH0.net
USBシリアル付きマイコンから適当にパルスを送ってもらう
数百円ぐらい
282:デフォルトの名無しさん
18/06/23 00:04:23.96 4A65Q
283:ZOx0.net
284:デフォルトの名無しさん
18/06/23 00:07:55.71 OXSP1qkx0.net
>>271
CreateWaitableTimerなるものを見つけました
試してみます
>>272
URLはよ!はよ!
285:デフォルトの名無しさん
18/06/23 00:27:06.35 YVqCYnTIa.net
>>273
データアクセスのためのAPI作れば
286:デフォルトの名無しさん
18/06/23 01:52:54.43 OXSP1qkx0.net
>>272
Arduino Nano互換 でいいのね?
よーし、パパがんばっちゃうぞー
287:デフォルトの名無しさん
18/06/23 02:29:38.11 RCtrcOsy0.net
>>273
>クライアントPCからデータベースに接続します。webサービスで排他処理します。
webサービスは何をもらって何を返す気なんだ
なんにしても俺には想像もつかない方式を検討してそうだ
288:デフォルトの名無しさん
18/06/23 06:55:53.26 DOoRmJ6HM.net
>>273
webサービスの中で普通にコネクションを開いて使い終わったらすぐにDisposeすればいいよ
ライブラリがいい感じにコネクション数を調整してくれる
どうしてもマニュアルでコネクションの数を制御したいならDB要求をループで処理し続けるスレッドを走らせて、他のスレッドとはキューで連携させる
289:デフォルトの名無しさん
18/06/23 07:53:25.35 5eZj9LlZM.net
web側でmax connection pool sizeを設定するだけの話に見えるが
そういう設定が無いからどうしたらいいかって話なの?
290:デフォルトの名無しさん
18/06/23 09:10:53.59 kilEB0fc0.net
tes
291:デフォルトの名無しさん
18/06/23 11:25:15.28 kilEB0fc0.net
test
292:デフォルトの名無しさん
18/06/23 11:28:34.91 kilEB0fc0.net
fwくぇ
293:デフォルトの名無しさん
18/06/23 11:42:17.32 kilEB0fc0.net
fwq
294:デフォルトの名無しさん
18/06/23 11:44:04.15 kilEB0fc0.net
fwqef
295:デフォルトの名無しさん
18/06/23 12:01:17.59 AshQdjwf0.net
よそでやれ
296:デフォルトの名無しさん
18/06/23 12:23:56.69 RL7TWjJda.net
>>262
引数なしのコンストラクタをprivateに
297:デフォルトの名無しさん
18/06/23 17:51:20.90 RCtrcOsy0.net
>>286
それだと(外部から)引数必須なインスタンスしか作れなくなる
それが設計通りならそれでいいけど
引数必須なインスタンスと引数なしのインスタンスが同一クラスである必要あるのか疑問だ
引数なしのクラスを継承して引数ありのクラス作れば良い気がするぞ
298:デフォルトの名無しさん
18/06/23 18:04:38.51 61tHQZae0.net
引数一個で騒々しいソースコードですね
299:デフォルトの名無しさん
18/06/23 22:33:46.94 RCtrcOsy0.net
動けば良いってなら好きにすればいいさ
設計論として考えるとどうしても大仰になるのはしかたない
300:デフォルトの名無しさん
18/06/23 22:44:50.08 AshQdjwf0.net
クレデンシャルを持ってる場合だけ一部の関数が使えるとか
別に珍しい設計じゃないと思うけどね
301:デフォルトの名無しさん
18/06/24 00:05:43.76 LwX9ZOYW0.net
>>289
動けばいいことの他に何を気にしてるの?
実行速度?
302:デフォルトの名無しさん
18/06/24 00:10:47.78 tHXuj/n7a.net
ああ、なんか質問を読み違えてたけど、
要は現実の使われ方として、特定のプロパティがまったく必要とされないケースがあるってことね。
単純に考えると>>287がシンプルで分かりやすいように思うけど
ケースバイケースではあるが、一つのプロパティを追加しただけのサブクラスってのも
存在意義がはっきりしないというか、名前付けに困るようなクラスになりがちのようにも思う
コンストラクタで明示的に指定されない場合はプロパティの値が規定値としておくのが
無難なケースの方が多いと思うけどね
303:デフォルトの名無しさん
18/06/24 01:25:17.80 GW8ybopf0.net
>>291
設計論だっていってるんだから、設計の美しさだよ
美しさ�
304:フ基準は人によって違うからほとんど宗教論なんだがなw >>291 >コンストラクタで明示的に指定されない場合はプロパティの値が規定値 コンストラクタで指定するものが、プロパティで指定できるようなものなら確かにそれが一番無難 ただそれなら引数つきコンストラクタの存在意義がなぁ たんにコードが短くなるぐらいだが、オブジェクト初期化子でプロパティ設定するのと大差ない気がするし
305:デフォルトの名無しさん
18/06/24 23:01:38.61 euoTg7OM0.net
webBrowser1.documentText=hoge;
で生成したHTML中にページ内リンクがあります。
(<span id="xxx"></span>)
クリック操作をせずにこのアンカーにジャンプすることはできるのでしょうか?
306:デフォルトの名無しさん
18/06/24 23:35:19.41 +Dnac0xs0.net
webBrowser1.Document.GetElementById("xxx").InvokeMember("Click");
307:デフォルトの名無しさん
18/06/24 23:43:26.59 euoTg7OM0.net
エラーは出ないのですが、ジャンプはしてくれませんでした。
単なるアンカーなので、直接それをクリックしても意味はなくて、
<a href="#xxx">XXX</a>をクリックするようにしないとジャンプしないのではないでしょうか?
(なお、ページ内に↑を用意していないので、これをクリックすることはできません)
308:デフォルトの名無しさん
18/06/25 10:34:01.89 CeO6DCCqM.net
GetElementById(...).ScrollIntoView(...)
309:デフォルトの名無しさん
18/06/25 11:16:30.33 sIr2ygWz0.net
>>297
いけました!
ありがとうございます!
310:デフォルトの名無しさん
18/06/25 16:58:03.78 L8J9ADJ70.net
ListVIewでクリックされたアイテムのインデックスを取得するにはどうしたらいいでしょうか?
例えば、以下の画像だと、"ListSubItem 3"がクリックされた時に、1,2 (1は列,2は行)といった値を取得したいです。
URLリンク(www.planetsourcecode.com)
311:260
18/06/25 17:57:14.07 TcWThoAPM.net
引数有り無しのコンストラクタで相談した者ですが色々とご意見ありがとうございます
先輩無しの独り開発なので参考になります
何が正しいかはプロジェクトの性質に左右されそうなので突き詰めませんが、驚き最小の法則的に見ると、無意味なメソッドをコール出来るとかどんな気持ちでしょうか?
私は後々混乱しそうなので避けたいのですが、さほど驚かれないならこのまま実装しようかとも
312:デフォルトの名無しさん
18/06/25 21:33:53.83 1sQ+cvRC0.net
>>299 HitTest
313:デフォルトの名無しさん
18/06/25 21:56:47.71 lw6peYFv0.net
暇つぶしにunityでプチゲームを作ろうとしているのですが
以下のような処理をしています。
URLリンク(dotnetfiddle.net)
スキルが増えるごとにSkillFactoryとTypeToParameterに分岐が増えていってしまって
なんだかなあという感じなのですが、もうちょっとマシな方法はないでしょうか。
SkillParamが諸悪の根源のような気もしていますがほかにうまい方法がおもいつかず。。
314:デフォルトの名無しさん
18/06/25 22:01:12.17 XS6tlG59d.net
githubでC#で書かれたソースコードを見るとVisual Studioで作成したファイルが見当たらないんですが、
Visual Studioを使わないほうがいいんでしょうか?
315:デフォルトの名無しさん
18/06/25 22:10:35.49 XRDiWZAB0.net
ワークシート1のb2から空になる最終行までフォーム1のコンボボックスに入れにはどうしたらいいですか?
316:デフォルトの名無しさん
18/06/25 22:15:12.37 Bspx7Xiu0.net
>>303
VisualStudioで作成したファイルって具体的には何のこと?
317:デフォルトの名無しさん
18/06/25 22:30:53.83 QLHuH/320.net
ListでKey値が一致する要素を探
318:して 内容を更新するにはどうすればいいの ループで検索するしかない?
319:デフォルトの名無しさん
18/06/25 22:41:13.84 DXP13toJ0.net
>>306
DictionaryならともかくListでKey値って何よ
320:デフォルトの名無しさん
18/06/25 22:49:08.14 QLHuH/320.net
>>307
2次元にしてキー項目を自分で作ったのよIndex用に
321:デフォルトの名無しさん
18/06/25 23:11:47.70 cq0DHw7f0.net
KeyedCollectionクラス
322:デフォルトの名無しさん
18/06/26 09:16:48.94 UPxy/vlK0.net
なぜDictionaryにしなかったのか
323:デフォルトの名無しさん
18/06/26 09:21:11.66 A+/Pd/Nq0.net
君は何故全力を尽くしても駄目なのか
324:デフォルトの名無しさん
18/06/26 09:58:06.77 1CiOys6I0.net
object型のメンバ?の値を文字列型に代入したいのですが
どのように書けば良いでしょうか?
static void Main(string[] args)
{
var obj = new { a = "a", b = "b" };
Hoge(obj);
}
static void Hoge(object obj)
{
string fuga = obj.b.ToString(); //この書き方で怒られてしまいました
}
object型は基本のようなので、根本的な所を理解していないのかも知れませんが
よろしくお願いします。
325:初心者
18/06/26 10:22:41.47 d46l513VM.net
>>312
Hogeのobjはbを知らないから……かな?
326:デフォルトの名無しさん
18/06/26 12:16:48.98 U/nLOHiUM.net
>>312
objectをdynamicに変えるといいよ
327:デフォルトの名無しさん
18/06/26 12:22:10.81 yFHnMB/La.net
>>312
つdynamic
328:デフォルトの名無しさん
18/06/26 13:31:04.74 oxIIJc6mM.net
便乗質問していいですか?
> var obj = new { a = "a", b = "b" };
これってクラスとして扱われるんですか?
329:デフォルトの名無しさん
18/06/26 13:38:08.33 ZA95aSE/M.net
扱われるよ
330:デフォルトの名無しさん
18/06/26 14:41:15.83 yB7+BiTZ0.net
インスタンスメソッドとstaticメソッドの使い分けがいまいちわからないので教えてください
public class Hoge {
private string Name { get; } = "piyo";
public Hoge(string name) {
Name = name;
}
}
上記のようなクラスがあり、これをvar hoge = new Hoge("foo"); とインスタンス化したとして、
public bool IsPiyo(){
return Name == "piyo";
}
上記のようなインスタンスメソッドを書いて、hoge.IsPiyo()とするのと、
public static bool IsPiyo(Hoge hoge){
return hoge.Name == "piyo";
}
上記のようなstaticメソッドを書いて、Hoge.IsPiyo(hoge)とするのでは、どう違い、どちらにするべきでしょうか?
なんとなく、staticの方が入力と出力がはっきりしてるのでわかりやすいのかなと思うのですが、オブジェクト指向ではないですよね
331:デフォルトの名無しさん
18/06/26 14:59:10.81 FPh9h90J0.net
インスタンスが必要かどうか。
stringクラスのCompareメソッドとCompareToメソッドが良い例。
前者はパラメータがnullでも通るが、後者はインスタンスが無いとダメ。
332:デフォルトの名無しさん
18/06/26 15:53:58.50 B40aLJ4va.net
インスタンスメンバーを参照してないならstaticにしてる
でも必ずすべきとは思わない
仮に日本語にして考えてみる
人間クラスに "はピヨです()"メソッドをそれぞれ実装すると
if(人間.はピヨです(彼)) {~}
と
if(彼.はピヨです()) {~};
これを見るとstatic はおかしいと思うがstaticにすることが多い
333:デフォルトの名無しさん
18/06/26 16:01:01.51 B40aLJ4va.net
誤解を招くような書き方だけど上のHogeなら間違いなくインスタンスメソッドにする
334:デフォルトの名無しさん
18/06/26 19:39:44.60 2rJMn7sUa.net
あー、ちょっとわかってきたかもです
主語というか、意味的に、表現したい意図に近い方を選ぶ感じですかね
とりあえず今回の例で言うと、インスタンスメソッドにすることにします
335:デフォルトの名無しさん
18/06/26 22:41:11.75 oc0D76610.net
RuntimeHelpers.PrepareMethod(RuntimeMethodHandle)の挙動が理解できない・・・
336:このコードでm2にPrepareMethodを使うことは不可能ですか? == using System.Runtime.CompilerServices; class B<T> { public void M() { } } class C1 : B<int> { } class C2 : B<string> { } class Program { static void Main(string[] args) { var m1 = typeof(C1).GetMethod("M").MethodHandle; var m2 = typeof(C2).GetMethod("M").MethodHandle; RuntimeHelpers.PrepareMethod(m1); // 問題なし RuntimeHelpers.PrepareMethod(m2); // System.ArgumentException: '指定されたジェネリックのインスタンス化は無効です。' } } ==
337:デフォルトの名無しさん
18/06/26 22:44:20.11 QRnSOnuU0.net
>>322
別にそんなとこ気を使っても一円の利益にもならんというアドバイスも
心の片隅においておいてくれ
338:デフォルトの名無しさん
18/06/27 06:43:38.75 ZicgrVNId.net
Cでエクセルを扱っていろいろするときはやっぱcsvにしておいた方がいいのかね?
339:デフォルトの名無しさん
18/06/27 09:40:20.28 UGstrjJ10.net
>>316
匿名型、で調べてみるといい
340:デフォルトの名無しさん
18/06/27 13:28:49.32 kZGjx8UI0.net
>>325
何をやりたいか次第だけども、
csvで完結出来るのならcsvがいい
341:デフォルトの名無しさん
18/06/27 15:48:14.07 VkL9wLVWp.net
下手にxls使うと勝手に型変換してくれるからめちゃくちゃになるんだよな。
342:デフォルトの名無しさん
18/06/27 19:05:45.76 Eyd8ciC/M.net
複数のアプリで1つのserial portを使いたくて、dllで受けて受信データによって別々のイベントを発生させ、複数のアプリに受信させようと考えました。
dll内のSerialPortをstaticで持てば共有できるかと思ったのですが、staticで宣言しても呼び出し元が別プロセスだと共有されないようですね。
何かいい手はないでしょうか。
343:デフォルトの名無しさん
18/06/27 19:33:53.09 cLV89PFx0.net
シリアルポートと通信するサーバを作って
必要な数だけクライアントを待ち受けるのが楽なんじゃないの
プロセス間通信はソケットやパイプとか適当なものを使う
344:デフォルトの名無しさん
18/06/27 20:12:38.21 4yQE+Bm50.net
>>323
コレじゃダメかい?
URLリンク(stackoverflow.com)
345:デフォルトの名無しさん
18/06/27 22:11:07.14 VkL9wLVWp.net
複数のアプリにどうやって通信データを振り分けるかの方が興味あるわ。
346:デフォルトの名無しさん
18/06/27 22:41:58.18 ezuUhY+H0.net
つ MSMQ
347:デフォルトの名無しさん
18/06/27 23:21:02.53 KXFiZVY30.net
そもそもWindowsのシリアルポートって複数のアプリで共有(同時オープン)できるのか?
348:デフォルトの名無しさん
18/06/27 23:25:13.59 YJH26+lwa.net
シリアルポートはなんかが掴んでたらだめだよね
349:デフォルトの名無しさん
18/06/27 23:39:03.37 kv/Gz/3da.net
だから質問してるんでしょw
質問者は他のアプリが占有中でも無理矢理割り込む方法を聞いてるわけじゃなく、
自作アプリの複数のプロセスで共有する方法を聞いてる
350:デフォルトの名無しさん
18/06/27 23:42:52.29 lEu9Ds2F0.net
ない
351:デフォルトの名無しさん
18/06/27 23:50:05.06 KXFiZVY30.net
だからそもそもシリアルポートは複数のプロセスで共有できないでしょって言ってるんだが
どうすべきかは>>330さんがとっくに示してるわ
352:デフォルトの名無しさん
18/06/27 23:57:16.85 kv/Gz/3da.net
馬鹿にも程があるな...
353:デフォルトの名無しさん
18/06/28 00:02:45.40 o5j8xzNra.net
言ってるんだが
いつも思うけど、こういう口調って馬鹿の間で流行ってるのかねw
354:デフォルトの名無しさん
18/06/28 00:39:46.48 M7FH9WysM.net
シリアルポートに限らずdllのstatic変数が共有できないのですが、共有したい需要ってないのでしょうか?共有したい場合はどうするのがよいのでしょうか?
355:デフォルトの名無しさん
18/06/28 01:01:35.03 wDYBzoR70.net
>>332
俺も�
356:アれが疑問だ 仮にサーバーが受けたとして どうやって俺宛か判断するんだ?
357:デフォルトの名無しさん
18/06/28 01:12:05.63 5aYb43f30.net
dllのstatic云々はおいといてメモリマップトファイルならC#でも使えたかな
C++ならデータセグメントを共有メモリにできる
どちらにしろプロセス間の排他制御が必要
358:デフォルトの名無しさん
18/06/28 01:31:16.24 o5j8xzNra.net
>>342
宛先なんかなく、単に全部のアプリに同じデータがブロドキャストされれば
十分って場合もあるでしょ
例えばシリアル経由で計測器か何かのデータが送られてくるとして、
(1) 画面表示だけするアプリ
(2) エクセルにログを保存するアプリ
(3) 計測データを使って何か他の機器を制御するアプリ
何かの都合でこんな風に複数のアプリに分けて作る必要があるのかもしれない
359:デフォルトの名無しさん
18/06/28 01:38:37.90 KZQYx/g/0.net
C#でのSelenium操作についても質問していいですか?
360:デフォルトの名無しさん
18/06/28 05:25:02.37 mpKH796a0.net
>>331
レスどうもです!下のようにして上手くいきました
こうなってくるとm1に対する方法はたまたま問題が起きないだけで
m2やm3の方法のほうが望ましいように思えてきましたがそういう認識であってますか?
==
using System.Runtime.CompilerServices;
class B<T> { public void M() { } }
class C1 : B<int> { }
class C2 : B<string> { }
class C3 : B<int> { }
class Program
{
static void Main(string[] args)
{
var m1 = typeof(C1).GetMethod("M").MethodHandle;
var m2 = typeof(C2).GetMethod("M").MethodHandle;
var m3 = typeof(C3).GetMethod("M").MethodHandle;
RuntimeHelpers.PrepareMethod(m1); // 問題なし
RuntimeHelpers.PrepareMethod(m2, new[] { typeof(string).TypeHandle }); // 問題なし
RuntimeHelpers.PrepareMethod(m3, new[] { typeof(int).TypeHandle }); // 問題なし
}
}
==
361:331
18/06/28 07:24:39.78 TtGcC5rD0.net
>>346
(確固たるソースに基づく訳じゃないので推測だけど)値型か、参照型かじゃない?
参照型の場合は TypeHandleを指定する必要がある、ってこと。
362:デフォルトの名無しさん
18/06/28 07:34:23.33 wMDqdzUG0.net
>>341
よく解らんけどdllってアプリごとにメモリに個別に展開されて初期化されるからソースコード上で同じ変数名にアクセスしても実態は違うので共有できないのは当たり前なきがする
363:デフォルトの名無しさん
18/06/28 08:01:29.47 M7FH9WysM.net
Cとかって共有されなかったっけ?よく覚えてないけど。
364:デフォルトの名無しさん
18/06/28 08:16:48.89 h/Ekqdxpa.net
されるわけないだろ
何のためにプロセスがあると思ってるんだ
365:デフォルトの名無しさん
18/06/28 09:27:13.22 9GisGdyJ0.net
ないって言ってんのにな
死ぬまで悪あがきしてればいいよ
366:デフォルトの名無しさん
18/06/28 10:06:45.02 uTPw2MsS0.net
何がしたいのか知らんけど、Win2k時代にシリアル通信のロガー作ったことある。あんときは、DLLをフックしてCreateFile,ReadFile,WriteFileのデータをトレースしたが、ハッキリ言ってやめたほうが良い。