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

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

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part137
https://mevius.5ch.net/test/read.cgi/tech/1523004019/
■コードを貼る場合は↓を使いましょう。
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: checked:vvvvv:1000:512:----: EXT was configured

(*゚∀゚)b

デコーダーがイベント監視してる時点でなんかおかしいって気が付かなきゃダメだよ
クラスの責務は1つなのだからデコーダーはデコードすることに集中しなきゃならん
なのでイベントの購読、デコーダーへのデータ供給は別のクラスの仕事というわけだ
どうしてもデコーダーにイベントソースを掴ませたいならより抽象化されたストリームを渡すべきだろうね

前スレ>>999

酷い言い掛かりだなw
この人、自分の議論が

(1) FrameDecoderは使い捨てされるオブジェクトである(CommunicationPortより寿命が短い)

(2) FrameDecoderを使う側(メインクラス?)はプログラムと同じ寿命

っていう自分勝手な前提に立ってることに気付いてるのかな。
そんな勝手な前提を置いたらどんなイチャモンでも言えるよw


既に書いたが、結局抽象的に言えるのは
----
使い捨てのオブジェクトが自分より長寿のオブジェクトのイベントに
メソッドを紐づけする場合は、イベント購読解除を忘れるとリークする
----

これ以上でも以下でもない。

だから俺の書いたコードhttps://mevius.5ch.net/test/read.cgi/tech/1523004019/985
に対して、「FrameDecoderがプログラムと同じ寿命じゃない、使い捨てされるオブジェクトなら
いらなくなったタイミングでイベント購読解除するようにしないとリークするよ」と質問者にアドバイスするのなら
意味があると思う

イベント発行側を引数でもらったらイカンとか、そんな訳わかんない
俺様ルールを他人にごり押ししてどうすんの。

それとさあ、、これも繰り返しになるけど、
だから俺は質問者の参考になるかもしれんコードの骨組みのサンプルを書いてるだけであって、
そんな細かい別の話をしてるんじゃないってばw

何でもっと建設的になれないかな

死なないと分かんねーのかな

>>4
分かってないなあ
FrameDecoderの寿命はFrameDecoder自身が決めることではなくてそれを使う側が決めることでしょ
引数をはじめとして、自分の管理外にあるものに対して自分自身を登録することは、その了解を破ってるという点で好まれない
OSSのソースとか読んだことないかもしれないけど、実際滅多にないよ?
FormやTimerのようにGCRoot持って自分自身で寿命を制御してる例外も無くはないが、
それはフォームはXボタン、タイマなら一定時間経過、というように自分自身の性質が寿命を決めているからそれが自然なんだよ

>>4
分かってないなあ
FrameDecoderの寿命はFrameDecoder自身が決めることではなくてそれを使う側が決めることでしょ
引数をはじめとして、自分の管理外にあるものに対して自分自身を登録することは、その了解を破ってるという点で好まれない
OSSのソースとか読んだことないかもしれないけど、実際滅多にないよ?
FormやTimerのようにGCRoot持って自分自身で寿命を制御してる例外も無くはないが、
それはフォームはXボタン、タイマなら一定時間経過、というように自分自身の性質が寿命を決めているからそれが自然なんだよ

>>7
分かってないのは君

だから、君は勝手に「FrameDecoderを使う側の寿命はCommunicationPortと同じが
それより長い」という前提に立っている。

何度も言うが、そんな勝手な前提を置いたら何でも言える。
じゃあFrameDecoderを使うオブジェクトの寿命がCommunicationPortより短い場合はどうするのか。

>>9
なるほど、そんな初歩的なところを勘違いしてたのか
イベントを使うにしろ何にしろ、CommunicationPortから引数の受け渡しによってデータを受け取る以上、
当然、CommunicationPortからFrameDecoderへは参照を辿って到達可能でなければならないよ
問題にしてるのはその参照を登録したり解除したりする責任の話ね

11デフォルトの名無しさん (ワッチョイ fa9d-/lNa)2018/06/06(水) 01:39:09.20ID:CmtfArYj0
つか、シリアル通信クラスって標準のがあった気がするけど
それが合わないとしても、それを模倣して作れって言うのが普通じゃないのか

12前スレ976 (ワッチョイ 4e99-fUxx)2018/06/06(水) 06:26:27.44ID:z0q6WK6V0
すいません
回答ありがとうございました
何か揉める原因になってすいません

ttps://dobon.net/vb/dotnet/vb2cs/event.html#section3のデータを返す方法がやりたいことになるのかなと思って調べてました。

13デフォルトの名無しさん (ワッチョイ d681-gTal)2018/06/06(水) 09:37:08.80ID:e5dRgfnV0
彼らは病気だから気にしなくていい
いつものことさ

>>10
何を言ってるのかさっぱり分からない
だれか分かる人がいたら解説してw
「CommunicationPortからFrameDecoderへは参照を辿って到達可能でなければならない」
必要なんかどこにあんのw

しかし、こういう「俺様ルール」を正当化するために
勝手な前提条件を設定してかつその自覚がない人ってのは困っちゃうね

>>12
別にもめてるわけじゃw

プログラミングは技術の一種なんだから質問スレであっても
議論に発展することがあるのは当たり前で、それを異常なことのように
感じる人間の方が病気で、そういう人間こそ無視していいと思う

以前「マウンティング」って言葉が好きな御仁がおったけど、
ようするに彼はそんなくだらないことでマウントを取りたい自分を
表出することで何かを語るに落ちてることにも気が付かない素朴なお方だw

16デフォルトの名無しさん (ワッチョイ fa11-W/zB)2018/06/06(水) 12:28:24.14ID:v+YVHC4y0
>>1読め

17デフォルトの名無しさん (ワッチョイ fae0-kPLI)2018/06/06(水) 20:12:00.38ID:Xjc53mAM0
どうでもいい質問ですがvisual studioの初期設定で
C#が中括弧だけで1行使うのはなにか理由があるんでしょうか?
C++他の言語だと最初の中括弧の前では改行しないスタイルの方が多いと思うんですが

18デフォルトの名無しさん (ラクッペ MM35-gTal)2018/06/06(水) 20:17:07.10ID:yVrgGFaDM
ない

https://ja.m.wikipedia.org/wiki/字下げスタイル

20デフォルトの名無しさん (ワッチョイ d681-R6Ha)2018/06/06(水) 21:13:23.87ID:5ce/nrvV0
>>17
波動拳みたいでいいだろ?

21デフォルトの名無しさん (ワッチョイ fae0-kPLI)2018/06/06(水) 21:13:34.77ID:Xjc53mAM0
>>19
どうも、よく分かりました

パイソンスタイルが至高
波カッコとか要らん

23デフォルトの名無しさん (ワッチョイ 5db3-7ot6)2018/06/06(水) 23:07:52.15ID:+PcIhiGy0
俺はブロックが解り易くて良いと思うけどな
縦に長くなるのが嫌だって人がいるのも理解しない事はないが

>>17
C++は { だけで一行使うスタイルの方が一般的だと思うぞ
C#はもともとC++開発者の取り込みを狙って作られた言語なので、ソースのスタイルも含め、意図的に全体的な雰囲気をC++に似せている

25デフォルトの名無しさん (ワッチョイ eb81-lRLg)2018/06/07(木) 00:32:23.12ID:8RMVvRLY0
>>22
C#はコード畳めるんだぜ?

26デフォルトの名無しさん (ワッチョイ 81b3-9mJg)2018/06/07(木) 00:35:34.59ID:gtRPAC9i0
言いたい事は解るけど、それは言語仕様でなくIDEの機能では……

27デフォルトの名無しさん (ワッチョイ e9e3-oEJ7)2018/06/07(木) 07:22:06.46ID:7v9jTo8H0
あのコード畳める機能って極悪だよな。
もうそろそろ終わりだなぁと思ったら畳まれているコードが数百行隠れてましたとか泣いたよ。

28デフォルトの名無しさん (ワッチョイ 1311-V68u)2018/06/07(木) 08:14:21.51ID:w0rLP4AV0
畳まれてるコードがあって泣くってどういう状態だよ・・・

29デフォルトの名無しさん (スッップ Sd33-fSec)2018/06/07(木) 08:49:08.48ID:acA4rAind
どうせ20000行のメソッドとかなんだろ

クラスの作成について教えてください。
内部でstring程度の情報しか持たない場合でも、Disposeは実装しなければならないですか?実際、何もやる事ないですが。

31デフォルトの名無しさん (ワッチョイ eb81-XZeD)2018/06/07(木) 08:59:41.46ID:jTBAfznK0
しなければならないと言った人に聞いてくださいよ
一般的に、決定権がある人が必要ないと判断すればしません

すみません、聞き方が悪かったです。
しなければならないと言われた訳ではないのですが、作法としてどうなのかな?と心配になって質問しました。
自分だけで使うならどうでもいいのですが、他人にも公開するものなので、恥ずかしくないものを作りたくて。

33デフォルトの名無しさん (ワッチョイ 1306-EqDK)2018/06/07(木) 09:41:25.22ID:NVuYCS+k0
作法というかIDisposableは主にアンマネージリソース解放の用途だよ
OS機能を直接扱うとか、メンバーが使用してるとか。インスタンス解放ではない
むしろ実装の仕方に作法があるのでMicrosoft DocsなりMSDNなりを

>>32
やることが無いならDisposeやファイナライザを実装してはいけない
それらを実装するのは例外的なケースであり、無いのが普通

>>33
>>34
レスありがとうござます。完全に勉強不足でした。
IDisposableが実装されてないクラスなんて山ほどあるのに何を勘違いしてたんでしょうか。聞いてよかったです。

36デフォルトの名無しさん (ブーイモ MMeb-lRLg)2018/06/07(木) 19:28:36.25ID:6Ugs28PiM
>>27
行数表示してないのかよw

37デフォルトの名無しさん (ワッチョイ 897f-LHz9)2018/06/07(木) 19:55:09.68ID:GcMnTqlg0
コントロールが表示されないのですがなぜでしょう
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("http://www.yahoo.co.jp/");

>>35
アンマネージなシステムリソースを確実に解放するときに使うよ

39デフォルトの名無しさん (ワッチョイ 09c3-Ihiv)2018/06/07(木) 21:25:32.22ID:HziEaPXa0
どういう考え方をすればできるようになるんだよ!教えろお前ら!!ホラホラホラホラ!!!!

40デフォルトの名無しさん (ワッチョイ eb81-lRLg)2018/06/07(木) 21:27:36.16ID:8RMVvRLY0
プロセスゾンビを確実にkillするにはどうすればよい?

41デフォルトの名無しさん (ワッチョイ b1b5-pwhw)2018/06/07(木) 21:43:03.21ID:muNvrUxm0
シャットダウン

kill -9 プロセス番号

43デフォルトの名無しさん (ワッチョイ a98a-Duqg)2018/06/08(金) 12:54:58.48ID:sQqhvtlW0
init 0

>>17
私は { は単独にしない派ですね。
理由は、少しでも多く画面内にソースを表示して見通しやすくするためと、昔からの Basicの名残で、ifなら thenに相当する { は行末。endifの } は単独という位置づけですね。

今はideの進化で { } のペアの書き忘れがほとんどないというのもあるかな。

45デフォルトの名無しさん (ワッチョイ 137f-6+Fv)2018/06/08(金) 14:44:00.50ID:6WR6CtyO0
>>37
試してないけど、対応OSで実行してないとか?

46デフォルトの名無しさん (スップ Sd73-fSec)2018/06/08(金) 15:03:45.94ID:QSVDv9Gwd
>>44
その言語の流儀に素直に従った方がいいんじゃないかと

47デフォルトの名無しさん (ワッチョイ 1311-V68u)2018/06/08(金) 16:55:43.13ID:3Fn0oPLQ0
流儀に従うなら、どっちでもいい、では?

48デフォルトの名無しさん (ワッチョイ d360-X4KX)2018/06/08(金) 17:50:11.32ID:wbtEeseM0
int c = 5;
for(c = 1; c < 61; c++)
{
        //処理
}
Console.WriteLine(c.ToString());

これで一番最後でCが62になるのですが
C<61の判定後でも++のインクリメントは行われているってことでいいのですか?

49デフォルトの名無しさん (ワッチョイ eb9a-DGJA)2018/06/08(金) 17:59:23.80ID:3yCOErp00
>>48
新規でコンソールアプリ用のプロジェクト作ってそれをコピペして実行してみたら?
処理の中身に問題が無ければ62になるはずがない


つーか、この程度の検証もせずに他人に質問を投げる神経が分からんマジで

52デフォルトの名無しさん (スップ Sd73-fSec)2018/06/08(金) 18:35:49.98ID:QSVDv9Gwd
>>47
パブリックなAPIかそうでないかによって違う

53デフォルトの名無しさん (ワッチョイ 897f-4qwh)2018/06/08(金) 19:21:59.01ID:TU3718TC0
>>45
OSのバージョンは問題なさそうなんですよね。

54デフォルトの名無しさん (ワッチョイ 1311-V68u)2018/06/09(土) 10:20:18.22ID:iRP9QLJz0
>>52
え、何が?
{の位置にそんなこと関係ある?

55デフォルトの名無しさん (ワッチョイ 13b3-3s1o)2018/06/09(土) 11:11:10.00ID:3S5Pjg6F0
構造化制御文はインデントされた行を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) {
で始めて、( の前のスペースの有無と { の前の改行の有無のどちらでも前者と後者で
違いをつけた方が、すんなりと見分けられて良い。

56 ◆QZaw55cn4c (ワッチョイ d360-EqDK)2018/06/09(土) 11:28:17.50ID:BV3WmSRm0
>>55
if (cond) {
}
と書くのだったら、関数の場合も
int func(int arg) {
}
とするのが統一がとれていいんじゃない?なぜ関数と if 文とで書き分けるのか、その理由がわからない

57デフォルトの名無しさん (ワッチョイ 81b3-9mJg)2018/06/09(土) 11:40:22.30ID:kOHnqaQt0
その自己主張要る?

58デフォルトの名無しさん (ワッチョイ 81b3-9mJg)2018/06/09(土) 11:41:04.90ID:kOHnqaQt0
あ、>>57>>55宛てね
宗教論争は他所でやって頂きたい

59デフォルトの名無しさん (ワッチョイ ebc9-LHz9)2018/06/09(土) 11:42:25.58ID:4y2IVpvw0
メソッドとif文に差付けなくてもインデント違う時点で判別付くんじゃないのか
と思ったが、ローカル関数出てきたんだっけか

if (cond) statement;

if (cond) call();

if (notcond) return;
statement;
statement;
statement;

{}がなくても見やすいね

61デフォルトの名無しさん (ワッチョイ 13b3-3s1o)2018/06/09(土) 12:03:48.88ID:3S5Pjg6F0
>>56
それぞれの制御文 (if, for, whileなど) 同士は機能が似通っているが、
関数は全く違うから、見た目も書き分けた方が良い。

Pascalだと関数は
 function func(arg: integer): integer;
 begin
で、制御文は
 if cond then begin
で始まり、前者は begin の前に ; が入り、関数頭部を書いて一旦区切ってから
関数本体を書く格好になるので、頭部の行の独立性が比較的高い。これに倣い、
C系でも関数は頭部だけで改行した方がすんなり読める。

>>58
じゃあ、スレ立ててよ。

62デフォルトの名無しさん (ワッチョイ 13b3-3s1o)2018/06/09(土) 12:05:40.33ID:3S5Pjg6F0
>>60
1行if文は否定しないし、自分自身も割とよく使うよ。

63 ◆QZaw55cn4c (ワッチョイ d360-EqDK)2018/06/09(土) 12:18:17.45ID:BV3WmSRm0
>>61
pascal に習う必要はないと思いますが…なぜ pascal を持ち出してきたのでしょうか?
私は関数と if/for/while を別にする必要性はないと思っています
{
}
とかスペースの無駄にみえてしまいます

構造がクリーンなコードを心がければ自然と{}を使わないコードになる
まあ俺から言わせてもらうと{}は綺麗なコードが浮かばない時に仕方なく使う苦肉の策ってところだね

65デフォルトの名無しさん (ワッチョイ 13b3-3s1o)2018/06/09(土) 12:43:14.79ID:3S5Pjg6F0
>>63
Pascalの悪い所、例えば条件を ( ) で囲まないので条件が目立たないのは真似する
必要はないが、良い所は参考にすべきだろう。C#は開発主導者がTurbo Pascalの
作者だったこともあり、Pascalからもいくらかの影響を受けていて、赤の他人ではない。

関数と制御文は機能が違うし、関数の方がより大きなブロックだから、書き分けた方が
すんなり読める。自然言語で小さな区切りには , を、大きな区切りには ; を使って
書き分けるのに似ている。あるいは章や節の見出しのスタイルに視覚的な差を
つけるようなもの。

66 ◆QZaw55cn4c (ワッチョイ d360-EqDK)2018/06/09(土) 12:49:18.67ID:BV3WmSRm0
>>65
>>61
昔のpascalのif 文は
if cond
 begin
  ..;.
 end;
が主流だった気がします
if cond begin
end;
はむしろCの影響を受けているのでは?

67デフォルトの名無しさん (ワッチョイ 13d2-fSec)2018/06/09(土) 13:02:16.97ID:ufdIEzvk0
>>54
うん。C#のコーディング規約はあくまでもパブリックなライブラリに関するものだから。
プライベートなものについてはお好きにどうぞって感じ。

68デフォルトの名無しさん (ワッチョイ b1b5-pwhw)2018/06/09(土) 13:06:52.76ID:oQlrsJoz0
改行コードが構文に影響を与えない言語仕様なんだから、好きにすればいいんだよ。

69デフォルトの名無しさん (ワッチョイ 0b33-T1fc)2018/06/09(土) 13:12:22.07ID:Tjb3C0On0
pascal流はマジキモイな
func() {
}
if () {
}
else {
}
が一番利に適ってる

70デフォルトの名無しさん (ブーイモ MM33-EqDK)2018/06/09(土) 13:27:36.34ID:VOfp/P7BM
これ以上続けても宗教の違いみたいな話で
なにも建設的なハナシにはならないからここらで終わりにしておけば?

71デフォルトの名無しさん (ワッチョイ ebc9-LHz9)2018/06/09(土) 13:29:19.91ID:4y2IVpvw0
いくら議論したところで、お仕事なら我が社のコーディング規約で終わっちゃう話だしな

72デフォルトの名無しさん (オッペケ Srdd-HQUw)2018/06/09(土) 14:24:17.49ID:fpkuA4ugr
どうでもいいしキモい

この手の嗜好がただの慣れと思い込みにすぎないっていい歳こいて気付かない人は
プログラマとしてかなり筋が悪いと思うw
たぶん知能もあんまり高くないw

2週間も違う書式で作業してたらすっかりそっちが「普通」になるw
人間なんてそんなもの。
これフォントにも言えるね

74 ◆QZaw55cn4c (ワッチョイ d360-EqDK)2018/06/09(土) 14:28:38.55ID:BV3WmSRm0
>>70
泥仕合にならないかぎり、意義があると思っています、これから泥仕合になるのかもしれませんが…

75デフォルトの名無しさん (ワッチョイ 13b3-Chll)2018/06/09(土) 14:28:44.98ID:d5fCz/GJ0
エディタとコーディングスタイルの話はしないのが紳士のたしなみ

>>73
フォントは目に優しいのを使った方がいい
カッコの位置などというくだらない問題とは違う

77デフォルトの名無しさん (ワッチョイ 137f-6+Fv)2018/06/09(土) 15:20:12.02ID:JwKFPqLV0
>>61
ふらっと C#,C♯,C#(議論用)
http://mevius.5ch.net/test/read.cgi/tech/1469538912/

78デフォルトの名無しさん (ワッチョイ eb81-XZeD)2018/06/09(土) 15:35:33.03ID:a58WBe6r0
>>75
よい習慣をお持ちですね。素晴らしい

79デフォルトの名無しさん (ワッチョイ 1981-DGJA)2018/06/11(月) 12:25:35.64ID:6xD/x26k0
VisualStudio2017 でコンソールアプリケーションを作っています。
System.Windows.Forms.Clipboardクラスを使いたいのですが
ビルドの設定をReleaseにしているとエラーはでないのに
Debugにすると FormsがSystem.Windowsに存在しないといわれてしまいます。
(アセンブリ参照はしています)
どなたか原因分かる方いないでしょうか。

https://i.imgur.com/sgkx4HK.png
https://i.imgur.com/Tr2VkYB.png

80デフォルトの名無しさん (スッップ Sd33-fSec)2018/06/11(月) 12:35:57.40ID:bN46fGFrd
>>79
csprojファイル晒して

8179 (ワッチョイ 1981-DGJA)2018/06/11(月) 13:13:19.40ID:6xD/x26k0
>>80
新しいソリューションを作成してコードをコピペしたら問題が発生しなかったので
とりあえず解決したということにします。

ありがとうございます

82デフォルトの名無しさん (ワッチョイ eb96-LHz9)2018/06/11(月) 21:03:57.62ID:TLX2q1MD0
フォームアプリで画面の真ん中に線を引きたいと思って単純に

(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)/2

のところに線を挽けばいいと思ったんですが、モニタのピクセルの半分のところに線を引くと
フォームの上の -□× のあるバーの下から0ピクセルになるから20ピクセルほどが下にずれてしまいます。
フォームの中央に線を引く方法ってないでしょうか?

枠無しフォームでやれ。

84デフォルトの名無しさん (ワッチョイ eb9a-DGJA)2018/06/11(月) 21:11:16.03ID:R9cSput30
>>82
フォームの中央なのか画面の中央なのかまずはっきりしてくれ
スクリーン座標←→クライアント座標の変換を行うには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html

85デフォルトの名無しさん (ワッチョイ 8917-LHz9)2018/06/11(月) 21:12:11.98ID:aKalcs2L0
フォームの中央なのかディスプレイの中央なのかどっちだよ

86デフォルトの名無しさん (ワッチョイ eb96-LHz9)2018/06/11(月) 21:44:14.69ID:TLX2q1MD0
自分でもどっちでいいかわからなくなったw
最初単純にフォーム最大化してるんだから、モニタの真ん中が真ん中だろと思ったら、
windowsって下にタスクバーあるわ、モニタの下に非表示領域20ピクセルほど隠れてるわ、フォームにフォームバーあるわで、
モニタの真ん中が真ん中に見えない。
たぶん無意識化でフォームの真ん中が人は真ん中と認識しているので気持ち悪い。
ということでフォームの真ん中にしました。

87デフォルトの名無しさん (ワッチョイ 13d2-fSec)2018/06/11(月) 22:15:41.36ID:kexbIBuK0
>>86
タスクバーの位置なんて自由に変えられるんだけど

>モニタの下に非表示領域20ピクセルほど隠れてるわ
そんなものはないと思うけど...
今時CRT使っててオーバースキャン表示でもやってるなら別かもしれんけどw

89デフォルトの名無しさん (ワッチョイ 0b33-T1fc)2018/06/11(月) 22:37:51.73ID:VLKc0T550
フォームバーってタイトルバーのことかな
非クライアント領域もあるぞ

90前スレ976 (ブーイモ MMeb-tDoJ)2018/06/12(火) 07:25:05.60ID:qsxFIdydM
どうにかイベントを発生させることができました。ここから5バイトの受信データを分解して処理を分岐したいんですが、どのような手法、便利な関数がありますでしょうか。
オペコード1バイト+データ4バイトという形式です。データは4バイトで表現する数値だったり、1ビットごとのフラグだったりします。
昔ながらのswich~caseで分岐って使うんでしょうか
オペコードが増えたり、データの予約ビットが変わると変更が大変そうです

switchでいいよ
たかがイベント一個作るのに何日もかかるようなレベルで今どんな凝った設計しようが、結局後で全部やり直しになる
今は余計な手間をかけないこと、シンプルに保つこと、それだけ考えてりゃいい

92デフォルトの名無しさん (ワッチョイ a98a-Duqg)2018/06/12(火) 08:51:11.88ID:l+dIOx6V0
デバイスドライバーみたいに処理をチェーンさせるってのもあり

93デフォルトの名無しさん (ブーイモ MM05-BJSQ)2018/06/12(火) 09:12:16.14ID:HMj9ZmCFM
スクリプト言語のインタプリタなんかでも巨大switchが普通だぞ
断言するが、先を見通せない状況でヘタにコマンドパターンとか入れても、後で横断的な変更が多発して
すべてのコマンドクラスに手を入れて回るアホみたいな作業に追われることになるだけ

94デフォルトの名無しさん (ワッチョイ 1311-V68u)2018/06/12(火) 10:49:11.67ID:Blmm4zE90
コード増加はともかく予約を変更すんな・・・

>>90
どっちにしろ「便利な関数なんかないでしょうw
ちっとも汎用的じゃない処理をエレガントに書く方法なんか用意されてるはずがないw
泥臭い物は泥臭く書くしかないかと

オペコードがそれ以上分解できない前提で

(1) オペコードをenumにキャストしてswith、でも
(2) ジャンプテーブル(デリゲートの配列)を使う、でもお好みで

もし仮に受信するデータが常にこちらから要求したデータである、
つまり、どういうデータが送信されてくることをこちら側が期待しているか事前に分かっている場合は
別の方法論もあると思う

その場合はこちらがリクエストを出す段階で、期待する種類のデータだけを読解できるオブジェクトを
生成してタイムアウト付きで待機させればいい

>>93
横断的な変更を最小限の労力でやるために最初にほんのすこしだけ投資する
これがシステム開発のコツな

それより、データの先頭を識別できるフォーマットにしたか?

98デフォルトの名無しさん (ワッチョイ 53c3-jpFx)2018/06/12(火) 15:40:05.30ID:wFgJsw9E0
固定長なら先頭コード種類分のデリゲートを割り付けるってのもあるが、こればっかしは好みだな。

99前スレ976 (ブーイモ MMeb-tDoJ)2018/06/12(火) 20:18:08.93ID:qsxFIdydM
ありがとうございます。
ベタベタに書いてみます。

1バイトが1ビットごとのフラグになっている場合はビットマスクで一つずつ抽出するのが一般的でしょうか?

100デフォルトの名無しさん (ワッチョイ 9361-6Jh4)2018/06/13(水) 22:29:58.82ID:T96Fk9Se0
SQLについて質問ですが

INSERT INTO T_USER (
ID, PASSWORD
) VALUES (
@ID, @PASSWORD
);

のINSERT分を

INSERT INTO T_USER (
ID = @ID,
PASSWORD = @PASSWORD
);

のように書く場合はどのようにしたらよいでしょうか。

101デフォルトの名無しさん (ワッチョイ 8917-LHz9)2018/06/13(水) 22:33:15.48ID:8SXHgjst0
スレチ

102デフォルトの名無しさん (ワッチョイ e9e3-HWv4)2018/06/13(水) 22:40:13.78ID:dwe0uTDh0
そういうメソッド作ったらいいじゃん

setInsert(new dictionary略);

みたいなの

103デフォルトの名無しさん (ワッチョイ c68a-3+MO)2018/06/14(木) 08:40:57.01ID:tUkyOm+Z0
クラスの構造体(ただint型のデータが複数個しかない)をXMLに変換したいのだが
XMLSerializer以外に何かないかな?
XMLSerializerは以前にバグを起こしたことがあって使いたくないんだ

104デフォルトの名無しさん (ワッチョイ c211-jgxh)2018/06/14(木) 09:14:05.32ID:o3acK5Uh0
>>100
UPDATEじゃないんだから・・・

105デフォルトの名無しさん (ラクッペ MM61-h/p3)2018/06/14(木) 09:54:39.43ID:A8NrLUZ4M
クラスの構造体…?

106デフォルトの名無しさん (ワッチョイ 42a4-/RsH)2018/06/14(木) 11:31:35.89ID:/+f4Bre90
>>103
全手動

107デフォルトの名無しさん (ワッチョイ 2260-BQKd)2018/06/14(木) 12:02:09.33ID:cv0ACSdK0
最終的に配列を書きだしたいのですが
それまでに色んなクラスのインスタンスからその配列の読み書きがされるのですが
どういうふうにクラスを作ればいいですか?
その配列はグローバルでstaticで宣言するか、インスタンス作るごとに参照を引き渡すのですか?

108デフォルトの名無しさん (ブーイモ MMb6-OAOp)2018/06/14(木) 13:20:39.46ID:NMzxKZ+IM
>>107
日本語でおk

109デフォルトの名無しさん (ブーイモ MM62-l11B)2018/06/14(木) 14:19:07.38ID:KBTpBKAkM
>>107
グローバルなpublic staticでいい
良い悪いを問題にするのであれば、あちこちから共通の配列をいじくるという前提の時点で設計に問題があるので、正解なし、が答えになる

アクセス関数を作ってインスタンス取得用に一つスタティック関数を用意するだけ。
アクセス関数介さないと、排他処理とかいちいち入れるの面倒だぞ。

111デフォルトの名無しさん (スプッッ Sd61-3+MO)2018/06/14(木) 17:22:37.66ID:Omv9hEYDd
初歩的な質問なんだけど
プロパティ?(get;set;)ついてるやつと、ついていないやつの差がわからないから教えてほしい

プロパティつけててもprivateはアクセスできないみたいだから
結局、両方ともpublicになって何が違うん?ってなってる

112デフォルトの名無しさん (ワッチョイ 2e9a-gvEZ)2018/06/14(木) 17:40:33.14ID:T0JMmz9y0
>>111
プロパティにするとメソッドを組み込めたりgetとsetでアクセスレベル変えられたり
あと取りあえずこの辺とか
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/properties
特定のソースで何が変わるの?って言う話なら書いた人に聞かないと分からない

クラスのメンバーでプロパティじゃない変数はフィールドと言う

フィールド (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/fields

プロパティ (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/properties

フィールドは代入も参照も同じ制限になる
プロパティは別々に設定できる
しかもgetだけ setだけというのも可能

フィールド (メンバ変数) とプロパティはここが違う
https://code.msdn.microsoft.com/windowsdesktop/5-5f828cde

114デフォルトの名無しさん (ワッチョイ d2eb-hrcC)2018/06/14(木) 18:59:14.79ID:UejGuppF0
クラスのプロパティに「型」を変数みたいにおけますか?

外部から「型」をセットして、クラスの中でその型を使って new して実体を作って利用したいのです。

115デフォルトの名無しさん (ワッチョイ d2eb-hrcC)2018/06/14(木) 19:03:10.93ID:UejGuppF0
気持ちをコードで表すと

  public class Test
  {
    public <T> PersonClass;

    public void Unko()
    {
      var p = new PersonClass();
      p.unko();
    }
  }

ってな感じです。
※PersonClass にメソッド unko() がある前提

116デフォルトの名無しさん (スップ Sdc2-bwM/)2018/06/14(木) 19:09:01.39ID:Cyktia16d
>>115
これ使えば?
https://msdn.microsoft.com/ja-jp/library/0hcyx2kd(v=vs.110).aspx

117デフォルトの名無しさん (ワッチョイ 0699-pByW)2018/06/14(木) 19:15:40.41ID:5YiZsxt70
>>115
unkoを定義するインターフェイス作って、
Tをwhereでそのインターフェイスとnew()で絞った上で、default(T)でインスタンス作って、呼べばよいのでは?

>>114
賭けてもいい
初心者がこの手の処理が必要だと思う時、それは100%勘違いw

119デフォルトの名無しさん (ワッチョイ 41da-4dYe)2018/06/14(木) 19:26:49.09ID:dsNhKni40
>>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 ) )
{

>>119
そんな見てて痒くなる書き方しなくても今のC#は2進数リテラル使えるぞ

121デフォルトの名無しさん (ワッチョイ 31b5-8opj)2018/06/14(木) 23:56:40.66ID:9S9/LeJo0
1
2
4
8
16
32
64
128
でいいよ。

>>119みたいなのならHexで書くのが一番だろうねw
少なくとも俺ならそうする

123デフォルトの名無しさん (ブーイモ MM62-l11B)2018/06/15(金) 01:23:47.16ID:hh/0fz+KM
10進よりマシだが一番ではない
2進があるならどう考えても2進が一番

書いてみりゃ分かるよw
単に一つのビットだけ立っている値を列挙するなら2進リテラルは冗長過ぎる。
そもそも何のためにHexなんかあると思ってるの

2進リテラルっていうのは、例えば組み込みで7セグのパターンのテーブルを定義する時とか、
bit5-bit7みたいにニブル単位じゃないビット範囲のビットマスクを定義する時とかに使う

125デフォルトの名無しさん (ブーイモ MM62-l11B)2018/06/15(金) 02:40:57.81ID:3RK99arqM
君にとってはCが頭に染み付いてるからそうかもしれないけど、
現に>>119にとっては分かりにくいからわざわざこんな書き方をしてるんだろう
今時のプログラマはC経験ない人も多いんだから実情に合わせることも必要
そういう連中を見下すのもいいけど老害呼ばわりされないように気をつけてね

>>125
しょうもな
偉そうにするな!と偉そうに言うバカw

どこが偉そうにしてるのか。

そもそも俺は>>119を必ずしも否定してない。
少なくとも10進表記や2進数リテラルよりマシだ

どーでもいいけど、こういう自分を客観視できない単細胞な奴がネトウヨとかなるんだろうね

128デフォルトの名無しさん (ワッチョイ ddc3-ttgq)2018/06/15(金) 03:33:39.61ID:/sL5C1h/0
ネトウヨってつまりどういう定義なんですか
マンコ吸わせてくださいs

129デフォルトの名無しさん (ワッチョイ 2e81-h/p3)2018/06/15(金) 06:19:02.91ID:9gOvrFZ50
5分かけて最後に煽っていくというだけで
自分が嫌ってるゴミと大差なくなっているというね

今どきビット演算なんてしてるやつはゴミ

これまで歩んだ人生がゴミ

132前スレ976 (ブーイモ MM62-C226)2018/06/15(金) 07:27:20.01ID:A2l2tHW6M
>>119
ありがとうございます


bitarrayってのがあるらしいんですけど、これって共用体とかに一括で代入できないんですかね
3バイトデータの内の下位1バイトは1bitごとのフラグなのでbitarrayで分解できそうなんですが

133デフォルトの名無しさん (ワッチョイ c211-jgxh)2018/06/15(金) 09:16:33.32ID:rymWY0Tx0
そういえばちょっと疑問なんだけど、enum定義する時に>>119みたいにbyteとか指定するのは何か意味があるの?
指定したところでbyte型の変数に代入しようとしたらキャストしなきゃいけないし、やる意味がわからないんだけど

134デフォルトの名無しさん (ワッチョイ 31b5-8opj)2018/06/15(金) 09:22:49.39ID:BTgSia3a0
>>133
え?キャスト?

135デフォルトの名無しさん (ワッチョイ c211-jgxh)2018/06/15(金) 09:45:21.99ID:rymWY0Tx0
>>134
え?

136デフォルトの名無しさん (ワッチョイ 31b5-8opj)2018/06/15(金) 10:04:23.68ID:BTgSia3a0
ああ、enumで作った型なんだからenum型になってるだろ。
受ける変数も同じ型じゃないとダメなのは当たり前。

137デフォルトの名無しさん (ワッチョイ e227-hwPK)2018/06/15(金) 11:52:41.04ID:jCp8kGwY0
>>133
シリアライズとかネイティブとの相互運用目的

動的にenumで作った型のsizeof求めりゃいいんだが、静的に解決しなきゃならない時は指定するしか無いって話だよな?

139デフォルトの名無しさん (ワッチョイ d2eb-hrcC)2018/06/15(金) 12:03:59.97ID:AMC7cROI0
>>116-117
コンパイル時点で型が定まらない(実行時に型が決まる)ものを new する手段という風ですよね?
使えそうです。ありがとうございました。

あとは、外部から「型」を受け取って new するまでの間、保管しておきたいのですが
型を変数(プロパティ)に格納するにはどうしたらいいんでしょ

140デフォルトの名無しさん (スフッ Sd62-pByW)2018/06/15(金) 12:20:55.24ID:NFN3YtCpd
>>139
117はジェネリクスなのでコンパイル時には一応定まってるハズ。
型を変数に入れたいならインスタンス.GetType()か、typeof(型)で、Type型の値が取れるけど…
本当にやりたい事と、実装の方法(型を受け取ってインスタンスを作ってそのメソッドを呼ぶ)がズレてないか心配。

141デフォルトの名無しさん (ワッチョイ c211-jgxh)2018/06/15(金) 12:25:49.54ID:rymWY0Tx0
>>137-138
なるほど、さんくす

142デフォルトの名無しさん (ワッチョイ d2eb-hrcC)2018/06/15(金) 12:48:48.68ID:AMC7cROI0
>>140
ありがとうございます。
「型」を格納する変数の型は System.Type なんですね!!
やりたいことが出来ました!!

System.Type t = typeof(××フォーム);  ← ここのところを公開して外部からセット

var f = (System.Windows.Forms.Form)System.Activator.CreateInstance(t);
f.ShowDialog();

>>142
それさあ、キャストしてる時点で何の意味があるんだと思わなきゃw

144デフォルトの名無しさん (ブーイモ MM6d-l11B)2018/06/15(金) 13:10:18.30ID:VuRl2MkoM
>>143
Showなどのフォーム共通の操作をしたいんだろう
基底クラスにキャストする分には意味はある
設計として正しいかどうかは別問題であり今の情報だけでは何とも言えないが、
君は自分の個人的な好みを一般常識であるかのように主張して相手の事情を理解しようとせず人を一方的に批判する傾向があるようだね

145デフォルトの名無しさん (ワッチョイ d2eb-hrcC)2018/06/15(金) 13:16:34.24ID:AMC7cROI0
本当は自作インターフェースを持った「なにか」から派生するクラスなのですが
そこまで書くと行数が凄いことになるので、Form を例にさせてもらいました。

146デフォルトの名無しさん (ワッチョイ c2d2-bwM/)2018/06/15(金) 13:30:43.12ID:/HLz/tc50
>>145
本当は何がしたいの?

>>144
そういうのはFafcoty Method的な方法でやればいい。

最初から質問者が何か勘違いしてるだけだと言ってるが、
>>114-115みたいな方法論を取る必要は何もない。

お前ごときに俺の何が分かるんだアホか
その批判、お前自身にちゃんと向けているか?

自己分析一つできない奴に限って安易に他人を批判したがるから笑える

148デフォルトの名無しさん (ワッチョイ d2eb-hrcC)2018/06/15(金) 14:16:21.09ID:AMC7cROI0
>>146
基底クラスから派生したクラスを動的に生成します。

142 みたいな方法が出来ることを知らなかったので
switch 〜 case でクラスの種類だけ new() やってたところをキレイにします。

149デフォルトの名無しさん (スフッ Sd62-pByW)2018/06/15(金) 15:03:37.25ID:NFN3YtCpd
>>145
それは自作インターフェイスに「『自作インターフェイスをもった何かのインスタンス』を返す関数」を定義しておいて、
何かの方で「その関数」を実装して、
呼び出す側では普通に「その関数」を使えば良いのではなかろうか。
抽象クラスと静的関数の方がキレイかな。

「その関数」のリストが作りたいなら、そこでやっとリフレクションで取ったらいいし。
いきなりCreateInstanceは宜しくないというか危ないし、後々、各小クラスでコンストラクタがどうしようもない状況に陥ると思うよ。

150デフォルトの名無しさん (ワッチョイ c29d-zq67)2018/06/16(土) 00:47:26.32ID:i9Db63x30
Dynamicは黒歴史ですか

151デフォルトの名無しさん (ワッチョイ 9d17-Bw3Y)2018/06/16(土) 08:04:12.32ID:axPFqDQY0
いいえ

152デフォルトの名無しさん (スップ Sdc2-bwM/)2018/06/16(土) 08:10:11.50ID:YoGVHqI7d
うんにゃ

153デフォルトの名無しさん (ブーイモ MM6d-l11B)2018/06/16(土) 08:34:15.67ID:eKBdC14eM
むしろ.NETのメインストリームがWebに移ってからはdynamic使われまくってる
JSONデータをたくさん扱ってるといちいち型付けてられない場面が多い

154デフォルトの名無しさん (ワッチョイ 892b-z7gc)2018/06/16(土) 09:57:30.72ID:fkqp7HMy0
自作のインタプリタ作った時に
Dynamic使った記憶がある

意図は・・忘れたww

155デフォルトの名無しさん (スップ Sdc2-bwM/)2018/06/16(土) 10:02:21.77ID:v/kjTt9Bd
>>153
jsonからクラスへの変換なんてVisualStudio使えば一瞬じゃない?

大規模プロジェクトなら連想配列禁止は納得できる

157デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 12:20:07.70ID:omCaDuHT0
教えてください。
戻り値が async Task のメソッドで await を使わないと↓のような警告が出ます。

> CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
> 'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を
> 使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。

独立したメソッドなら、await が必要ないなら async Task をやめて void にすればいいのですが、
仮想呼び出しなどの関係で戻り値を変更したくない場合の解決策に悩んでいます。

とりあえず、

[1] 警告を抑制する
[2] async だけ外して Task.CompletedTask を返す

という二つの解決策を思いついたのですが、どちらも到底正しい方法とは思えません。
いいアイディアがあれば教えてもらえると嬉しいです。

>>157
2が正しい

159デフォルトの名無しさん (ワッチョイ 31b5-8opj)2018/06/16(土) 12:56:37.78ID:dmQidkOU0
同期的に結果が分かるものを非同期にして結果が欲しいとか、コールバックでも仕込んで別処理で結果得ないと正しい結果なんて分からないだろうに。

160デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 13:16:07.05ID:omCaDuHT0
>>158
レスありがとうございます。やはり他に正しい方法はないのですね。
非同期が必要になるまでは同期実行できるのが async の効果だと思っていたので
非同期が全く必要ないときに async が使えないのは逆のような気がして
違和感が拭えないのですが、とりあえず [2] の方法でやっていこうと思います。

>>159
申し訳ないのですが、同期ついて理解不足で仰っていることが理解できないので
もう少し詳しく説明していただけないでしょうか。

161デフォルトの名無しさん (ワッチョイ 0699-pByW)2018/06/16(土) 13:59:46.72ID:VCIrJNT80
await Task.Run(()=>やりたいこと)
で済ますのはどうなんだろ。

>>161
無駄にスレッド消費するしマルチスレッドによる不要なトラブルを持ち込む可能性もある最低最悪の方法
awaitを外したくないなら await Task.CompletedTask の方がクリーン

163デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 14:42:27.67ID:omCaDuHT0
>>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 を外したくないなら」という無理のある前提に合わせて話してくださっていることは
 理解しています)

164デフォルトの名無しさん (ワッチョイ 2ec9-Bw3Y)2018/06/16(土) 14:59:09.83ID:ext5YZxs0
これあえて警告出しっぱなしじゃ駄目なのかね
IDEがasyncメソッドをawait無しで実行しているから警告しているだけであって、意図的に同期実行するのならコメントとかで明示しておけば良いような気もするけど

165デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 15:23:38.22ID:omCaDuHT0
>>164
レスありがとうございます。
たかが警告を消すために実際のコードを書き換える必要があるのかという考えは
実にごもっともだと思います。
ただその場合、警告を抑制するだけでも意図は十分に伝わると思うのですが、
やはり警告はそのままにしてコメントなどで説明を行うべきなのでしょうか。

#pragma warningディレクティブ使って警告を抑止するのが一番素直のような気がする。
知らんけど

っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...

167デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 15:35:00.89ID:omCaDuHT0
>>166
レスありがとうございます。やはり警告の抑制も選択肢になりますよね。
警告を抑制することに対する考え方は人それぞれということもあると思いますので、
その都度状況に応じた対処法を考えるのが一番でしょうか。

> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...

申し訳ありません。これについてよく意味が理解できませんでした。
詳しくご説明していただけないでしょうか。

>>167
ごめん後者アホなこと言いましたw

よく考えてみたら、asyncが付くかどうかはただのメソッドの中の実装によって決まる話であって、
ベースクラスやインターフェイスによってそれが強制されることはないよねw

普段深く考えずに使ってることがばれちゃったw

169デフォルトの名無しさん (ワッチョイ 31b5-8opj)2018/06/16(土) 16:13:25.34ID:dmQidkOU0
なぜ同期させているのかが根本的に分かって無いから、警告を解く事だけに注意が向いてるんだな。
同期が必要ならコードどころか構造を変えるくらいしないてならないだろうに。

170デフォルトの名無しさん (ワッチョイ 4206-Bw3Y)2018/06/16(土) 17:10:20.97ID:b9GFXH4k0
状況把握しきれていないが
async()=>{}という形でラムダにasyncつけることで解決できるケースもあるんじゃね?

171デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 17:13:04.67ID:omCaDuHT0
>>167
ご説明ありがとうございます。 >>166 で仰っていた意味が理解できました。
async/await は糖衣構文なので確かにベースクラスなどで使用が強制されることはありませんが、
深く考えずに使えるところが糖衣構文のいいところですし、
async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。
これを踏まえて、改めて >>166 にお返事したいと思います。

> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...

文法上は async なしでも問題ありませんが、コードの一貫性を考えると async を意図した
メソッドのオーバーライドで async なしは問題だと思います。
それにもかかわらず、たまたま実装上 await を全く使わなかっただけで
async の使用をとがめるような警告が表示されてしまうので悩んでいるのです。


>>169
レスありがとうございます。他の方のご意見も聞かせていただいて、
やはりこの警告は不適切で、警告を解くことだけに注意を向ければいいように感じてきています。
それに対して異論を唱えてくださっているようなのですが、勉強不足で仰っていることが
よく理解できていないので、申し訳ないのですが詳しく説明していただけないでしょうか。

172デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 17:18:42.84ID:omCaDuHT0
>>170
レスどうもありがとうございます。
このような返しばかりで情けないのですが、理解力が足りず仰っていることがよくわかりませんでした。
申し訳ありませんが詳しいご説明をお願いできないでしょうか。

先ず、同期と非同期で何が違うのか、
同期は目的の処理を完了して戻って来る事が大前提で作られている。
非同期は目的の処理を行う指示だけをして戻って来る。
だから戻り値も自ずと意味が違って来るのが普通。
同期の戻り値は実行結果、非同期の戻り値は指示出来たかどうかで結果はまだ分からない。
そこを根本的に間違えているから、問題なんだよ。

174デフォルトの名無しさん (ブーイモ MM6d-l11B)2018/06/16(土) 18:08:04.04ID:40YgBCHOM
>>173
基底クラスやインターフェイスに合わせるためであったり、
後でDB使った実装に変更する予定で今はハードコードしておくみたいなときには普通にあるケースだよ
後で非同期に変えるのは影響が大きいからね

175デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 21:30:40.09ID:omCaDuHT0
>>173
レスどうもありがとうございます。
同期処理と非同期処理の違いは、一般論としてはおっしゃるとおりだと思うのですが、
それが >>174 でご指摘いただいているような目的を達成する上で障害になっていて、
そのような問題を解消するために async/await 構文が作られたのではないでしょうか。
だとすると、同期処理と非同期処理の違いを理由に await なしの async を
否定することは本末転倒のように感じてしまうのですがいかがでしょうか。

>>174
ご説明どうもありがとうございます。
具体例を含めてとてもわかりやすく感じたのでこのレスの前半で引用させていただきました。
私にはこれだけ要領よく説明することはできそうにないので助かりました。

176デフォルトの名無しさん (ワッチョイ 31b5-8opj)2018/06/16(土) 21:44:52.43ID:dmQidkOU0
まあ、メイン処理止めていいなら待てばいいじゃない。
止めたく無いならポーリングやコールバックで終わったの知ればいいじゃない。
コーディングでワーニング出るから構造を弄るって手法そのものが間違いって言ってるの。

177デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/16(土) 22:10:42.86ID:omCaDuHT0
>>176
メイン処理を止めたくないならポーリングやコールバックを明示的に記述する以外に
選択肢がないというように読めてしまったのですが、この部分に間違いはないでしょうか。
もしそうなら async/await 構文についてあまりお詳しくないようにお見受けしますので、
よろしければ一度お触りになってみてください。
非同期処理の大変さをご存知であればこそ、便利さを実感できるのではないかと思います。

(ちなみに、今の問題は非同期処理を行うことも可能なメソッドをオーバーライドする際に
 非同期処理を全く使わないと警告が出てしまうということですので、
 何かに妥協してメイン処理を止めるというわけではありません)

178デフォルトの名無しさん (ワッチョイ c29d-zq67)2018/06/17(日) 00:16:30.35ID:hCSOxZ9X0
そもそもasync修飾子そのものには、たんにawaitする目印としての意味しかないわけで
awaitしないメソッドをasyncにするのが根本的におかしいとしか思えんのだが

179デフォルトの名無しさん (ワッチョイ 2ee8-xBpi)2018/06/17(日) 04:27:25.92ID:f8Zp6PCK0
wpfのフォームってhtmlとcssが合わさったようなもん?

180デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/17(日) 05:09:52.71ID:w8cOZ/cU0
>>178
async Task Hoge() { }
↑は警告は出るもののコンパイルできますが
Task Fuga() { }
↑はコンパイルすらできないので、async がたんに awaitするための目印というのは語弊があるのではないでしょうか。

181デフォルトの名無しさん (ワッチョイ edd3-Bw3Y)2018/06/17(日) 10:24:51.50ID:g+98DwlT0
> async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
> 事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。

TAPはTaskを返す関数の実装にasync/awaitを強要せんし使う側も関知せんじゃろ
AsyncサフィックスなんてそれこそEAPの頃からの慣例でしかない

awaitを使わず何故か付いてるasyncよりTask.CompletedTaskを返すコードの方がよほど明確だと思うがね

>>180
ただの目印と理解していいよ
asyncって目印を見つけたらメソッド内だけ文法をちょっと変えますねっていう取り決めなの

目印もなしに勝手に文法を変えられたら仕事にならん
だから目印が必要なの

目印を付けただけでエラーになると言うけど
目印を付けたら文法が変わるのだから同じコードでエラーが出たってなにもおかしくないだろう?

183デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/17(日) 12:14:10.68ID:w8cOZ/cU0
>>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
確かにそのとおりですね。失礼いたしました。
ただ問題なのは、「目印を付けただけでエラーになる」のではなく、
「目印を付けないとエラーになるのに目印を付けても警告が残る」という点でして、
せっかくの目印の機能を気持ちよく使うことができず、どうしたものかと考えております。

結局質問者の疑問はこういうこと?

(1) サブクラスで非同期メソッドとして実装される可能性があるメソッドの名前は
Asyncでサフィックスすべきか?

(2) (1)がYesの場合、そのメソッドが非同期で実装されなくても(awaitを含まなくても)
asyncで修飾すべきか?

正解はYes-No?
理由は、非同期メソッドは使う側がそれを非同期メソッドだと理解している必要があるのに対し、
非同期メソッドじゃないものを非同期メソッドと誤認しても弊害はないから

もちろん不要な混乱を避けるために、「このメソッドは多態の都合上Asyncでサフィックスされてるけど
非同期メソッドじゃないよ」みたいなコメントは必要か?

185デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/17(日) 13:22:22.85ID:w8cOZ/cU0
>>184
整理していただきどうもありがとうございます。

(1) については実は疑問であるという認識をもっていたわけではなく、
ご指摘をいただくまで当然そうするべき事柄であると考えておりました。

(2) がまさに疑問点でして、(1) が Yes/No のどちらであっても
答えが得られると嬉しいと思っています。

> 非同期メソッドは使う側がそれを非同期メソッドだと理解している必要があるのに対し、
> 非同期メソッドじゃないものを非同期メソッドと誤認しても弊害はない

おっしゃる通りだと思います。(もちろん細かなオーバーヘッドが問題にならない場合の話ですが)

> 「このメソッドは多態の都合上Asyncでサフィックスされてるけど
> 非同期メソッドじゃないよ」みたいなコメントは必要か?

インターフェース等を介さずにメソッドを呼び出す可能性がある場合は
そのようなコメントがあると親切だと思いますが、
私としては、必ずしも必要ではないように思います。

>>183
気持ち良い悪いみたいな感覚の話にすると結論が出なくなる

・コードに統一感があったほうが気持ちがいい(俺はこの感覚がよくわからんが)
・使ってないものを使いますと宣言するのは気持ちが悪い

どっちも言い分としては間違いではないしどちらがより正しいかとも言えない
それは見た人によるとしか言えない
君が美しいと思って書いた統一感のあるコードは、俺からすれば必要のない無駄な記述の多い汚いコードに見えるかもしれない



それはさておき
asyncメソッドはTaskインスタンスの生成とスレッドの生成に繋がる可能性がある
インスタンスの生成はともかくスレッドを無駄に消費するってことはOS全体に負荷をかけることにも繋がりかねないので意味がないなら避けるべきだ
しかし文法上の間違いではないのでエラーと断言することもできない
間をとって警告を出すってのが妥当な落とし所じゃないかな

・スレッド生成
勉強してから言えよって思う

188デフォルトの名無しさん (ラクッペ MM61-h/p3)2018/06/17(日) 21:08:29.24ID:rRGqqoATM
あーこれゴミクズにありがちな燃えるコメントの仕方だわ
言い争いが始まるので、賢明な諸兄は3日ほどスレを閉じておくのがよろしい

189デフォルトの名無しさん (ワッチョイ ddc3-ttgq)2018/06/17(日) 21:15:10.69ID:Z+AbfkC70
静的メソッドの中で動的メソッドって呼び出せないってあるけど、自分のクラスのインスタンスのメソッドは呼び出せるの?教えて雑魚

> 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のついたメソッドができる
勿論警告もでないし誰かの言う一貫性のある美しいコードじゃないか

わかってると思うけどawaitがついたメソッドに突入した時点で
内部が自動的に別のスレッドで実行されるわけじゃない
中に入っても最終的にタスクにたどり着かないと別スレッドはスタートしない

System.Threading.Thread.CurrentThread.ManagedThreadIdでスレッドIDがでるから確認したらいい

192デフォルトの名無しさん (アウアウカー Sa69-qcd4)2018/06/17(日) 21:38:25.64ID:7lB5BPvGa
>>191
await後に書いた処理って元のスレッドに同期されると思ってたけど、awaitで実行されたスレッドのまま進むよね?
Formアプリであれ?invokeしなくていいの?って思った記憶ある。思い違いだったらすまぬ

193デフォルトの名無しさん (ワッチョイ e227-Ly5g)2018/06/17(日) 21:42:03.70ID:62NxCwPo0
非同期自体が複雑だし、(当時は)新しい構文ってことで、混乱を少しでも減らすために警告にしてるだけっぽいね
抑止しちゃっていいと思うよ

194デフォルトの名無しさん (ワッチョイ edd3-Bw3Y)2018/06/17(日) 22:13:20.40ID:g+98DwlT0
>>193
Formが作成された所謂UIスレッドでは同期されるが、コンソールアプリ等では同期されない

もうちょい突っ込むと、await文が実行されるスレッドにSynchronizationContextへの仕込みがあるかどうかで違ってくる
await後に実行されるスレッドはSynchronizationContext.Postの実装により決定される

Winformsは最初のフォーム作成時にWindowsFormsSynchronizationContextを現在のスレッドに設定し
WindowsFormsSynchronizationContext.Postはメッセージループを仲介してUIスレッドでawaitの続きを実行する

具体的な実装はReference SourceやmonoのWindowsFormsSynchronizationContextを読むのが良い

195194 (ワッチョイ edd3-Bw3Y)2018/06/17(日) 22:18:16.07ID:g+98DwlT0
安価まちげーた>>192

なんかテキトーに書いたら分かりにくいな・・・
要はWinforms(WPFも同様)のスレッドでawaitするとその後の文は裏で勝手にControl.Invokeされてると思えばええねん

196デフォルトの名無しさん (ワッチョイ c29d-zq67)2018/06/18(月) 03:16:27.74ID:tq92Vuqu0
>>180
>Task Fuga() { } はコンパイルすらできない
それは戻り値のチェックで、int Fuga...でもコンパイルできないだろ
Taskもasync/awaitも関係ない話

むしろ、async Task Hoge() { } がタスク戻さないのにコンパイル通ることのほうが問題じゃね
つかほんとにこれ警告だけで通って正常に動くの?
そのときHoge()で何が帰ってきてるんだ?

197デフォルトの名無しさん (ワッチョイ c29d-zq67)2018/06/18(月) 03:36:27.38ID:tq92Vuqu0
まあその例で統一したやり方でやりたいなら
async Task SayHello0() { await Task.CompletedTask; }
で良いんじゃないのか

>>196
最適化してCompletedTaskでも返すのかなとも思ったけど
IL見ると他と同じようにコード生成して実行してんね
このオーバーヘッドが必要な処理なら警告を無視してasync使えばいいと思う

どう考えても質問者の方がよく分かってるのに
何も分かってない奴に限って上から目線で偉そうに何か言ってるのは滑稽過ぎるねw

気付いてないのは本人だけ(とすら気づいてない)のも何とも笑いを誘う

200デフォルトの名無しさん (ワッチョイ e2c3-LKVd)2018/06/18(月) 11:33:39.78ID:jfMWOsL40
質問者のドメイン知識の話だろ。

質問者以外に、このスレどんなエスパーいるのか?

実際にawaitされることで呼び出し側が想定されることが実現されるなら
たとえ何もしない無駄なスレッドを使用したとしてもそれが一番いい
最適化されて何もしないとなればUIスレッドなどの副作用を期待していた呼び出し側が困る
実際はそういうことはおこらないので問題ない

上に書いてあったawait Task.CompletedTask;が一番いい答えだと思う

202デフォルトの名無しさん (ワッチョイ ddc3-JWO0)2018/06/18(月) 17:06:03.17ID:wetnizJS0
プログラミングってさあ、基本を使い倒すほうがいいの?

203デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/18(月) 18:38:53.61ID:rGsHjxJX0
皆さんレスどうもありがとうございます。

>>186
スレッド生成はともかく、無駄をなくすという観点は重要ですね。
>>198 に書いていただいてあることも踏まえると、
> しかし文法上の間違いではないのでエラーと断言することもできない
> 間をとって警告を出すってのが妥当な落とし所じゃないかな
というご意見は実に的を射たものであるように感じました。

>>190
> forループで制御したらいい
同じメソッドを繰り返し呼ぶ例は不適切でしたね。失礼いたしました。
ただ、for ループ版に n = 0 を渡しても何の問題もないのに
async Task SayHello0() { } では警告が出るというのも
やはり腑に落ちない感じがします。

>> 191
> 中に入っても最終的にタスクにたどり着かないと別スレッドはスタートしない
やはりそこが重要なポイントですよね。
だからこそ、最終的にタスクにたどり着かない選択肢がある方が
自然だと思うのですがいかがでしょうか。

>>193
> 非同期自体が複雑だし、(当時は)新しい構文ってことで、混乱を少しでも減らすために警告にしてるだけっぽいね
> 抑止しちゃっていいと思うよ
言われてみると、構文に不慣れな方向けの警告であるという考えは
とても納得ができました。
あとは、「自分は構文を十分に理解しているから警告を抑制しても構わないのだ」
という主張をいかにして人様に受け入れて貰うかが課題でしょうか(汗

204デフォルトの名無しさん (ワッチョイ c251-G00F)2018/06/18(月) 18:39:23.10ID:rGsHjxJX0
>>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 のコードに差があると
前者を使うのは躊躇してしまいますね。そもそも私は
> このオーバーヘッドが必要な処理
になる状況が分からず、CompletedTask を返すように最適化が行われるべきだと思うのですが、
「await なしの async」と「CompletedTask 返し」との間の違いに気づいていらっしゃるようであれば
ぜひお教えいただけないでしょうか。

205デフォルトの名無しさん (ワッチョイ 067f-s84n)2018/06/18(月) 18:46:20.98ID:XI+GT1Uo0
>>202
何が聞きたい

旅行ってさあ
車で行ったほうがいいの?
→目的地や条件による

206デフォルトの名無しさん (ブーイモ MMb6-l11B)2018/06/18(月) 20:44:23.89ID:/4T5LZMPM
>>202が一を聞いて十を知る頭の良い人間なら先に一通り言語をマスターした方が効率的
そうでないなら最初から高度な機能を覚えてもそれが何の役に立つのか理解できないから、まずは基本だけで身をもって苦労したほうがいい

207デフォルトの名無しさん (ワッチョイ c29d-zq67)2018/06/19(火) 05:31:43.83ID:R/zbDFZs0
>>204
そもそもawait なしの asyncが必要な理由も場面も思い浮かばんが
自分一人でやってるなら好きにすればいいんじゃね

最適化うんぬんを言うなら、Taskを返すどころかそんな呼び出しそのものが不要じゃね

そもそものそもそもasyncやawaitで気軽にスレッドを立ててるような処理はだいたいバグってる
スレッドを立てるってそれ自体の処理より
立てても大丈夫なぐらいの前準備のが遥かに手間がかかる
気軽に立ててあるとこはまず間違いなくバグってるので安心していい

asyncとスレッドって直接関係ないだろ
スレッドは非同期処理を実装する手段の一つに過ぎない
最近のazureなんか「上司にメール送って添付URLのページにある承認ボタンが押されるまで待つ」みたいな非同期処理ですらawaitできるんだぞw

誰に向かって説教してるつもりなのかねw
馬鹿過ぎる

211デフォルトの名無しさん (JP 0H49-B+cT)2018/06/19(火) 17:36:20.33ID:ygjnsczhH
google検索で
@it async await
これ読んでわかった気になった。
シンプルな実装では使えたけど、応用でつまずく。最近プログラム組んでないので頭固い……

212デフォルトの名無しさん (ワッチョイ ad8a-pk7F)2018/06/19(火) 17:40:54.18ID:B+3+LOal0
固ければジューサーに入れてみる?

普通のジューサーでは>>211の固い頭は砕けません
そこでショップジャ〇ンのマジックブレッドデラックスを使えば楽チンに下ごしらえができます

214デフォルトの名無しさん (ワッチョイ 319b-sRUJ)2018/06/19(火) 19:56:40.35ID:0sn0Q0vo0
C♯を勉強するのにおすすめのサイトありますか?
何かを作りなが勉強したいなと思ってるんですが。

215デフォルトの名無しさん (ワッチョイ 2e9a-gvEZ)2018/06/19(火) 20:10:42.40ID:kAXRFxrM0
>>214
https://dobon.net/vb/dotnet/index.html
http://www.atmarkit.co.jp/fdotnet/csharp_abc/index/
http://ufcpp.net/
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/
ここで勉強するというかやりたいことを「C#」に続けてググるとだいたいこのあたりがヒットする

>>213
そこで、トゥルースリーパーとパチもんハズキルーペ買った。
パチもんの方はメガネにLEDライトが付いてたからつい。薄暗いとこであれはめちゃ便利(稀にしか使わないけど…orz)。(100金の老眼鏡でいいと思う。しょせん凸レンズの一種だから。)
トゥルースリーパーは半年くらいたってまだ箱の中orz

217デフォルトの名無しさん (オッペケ Srf1-uwF/)2018/06/19(火) 21:01:02.40ID:RAxnAMrUr
c#のコーティング方法で検索すること多いけど、なぜかLINQで解説しているサイトがほとんどない
日本語サイトも海外サイトも

なんで?

218デフォルトの名無しさん (ブーイモ MM85-l11B)2018/06/19(火) 21:02:44.86ID:LBhs/jk2M
>>217
実践的なアプリ開発で使われる機能だから、コピペTips系サイトのサンプルコードで必要になることはほとんど無い

219デフォルトの名無しさん (ワッチョイ 2e81-7EFb)2018/06/19(火) 21:53:01.39ID:EPHYIqEL0
素人に使われると価値が下がるからね
素人は年収300万で死ぬまでくだらないコードを書いていればいいんだよ

220デフォルトの名無しさん (ワッチョイ c2d2-bwM/)2018/06/19(火) 22:04:52.94ID:kI3CAS1L0
>>217
ほとんどないわけねーよwww

221デフォルトの名無しさん (ブーイモ MMb6-m0US)2018/06/19(火) 22:16:45.72ID:EE12WGu0M
>>217
LINQは手段であって目的じゃないからじゃないかなああああ

222デフォルトの名無しさん (ワッチョイ 428a-5g47)2018/06/20(水) 09:42:33.52ID:+y79X+880
FileSystemWatcherのChangedイベントの発生条件は、監視しているディレクトリ内のファイルまたはディレクトリのサイズ、システム属性、最後の書き込み時刻、最後のアクセス時刻、またはセキュリティ アクセス許可の変更のようですが、
このうちのどれが変更されたか種痘するにはどうすればよいでしょうか?

223デフォルトの名無しさん (オッペケ Srf1-uwF/)2018/06/20(水) 11:51:07.40ID:ZYBHUW1Qr
>>218
そういうもんなの?

>>220
スタックオーバーでたまに外人さんがLINQで答えてるのあるくらい
割合的に3%くらいな印象

みんな使わないんだね

>>221
手段でも目的でもどっちでもいいの

>>222
使ったことないけど、イベントハンドラで受け取れる引数(FileSystemEventArgs)
で普通に分かるんじゃなくって?
https://msdn.microsoft.com/ja-jp/library/system.io.filesystemeventargs.aspx

>>222
あらかじめ情報をどこかに持っておいて比較するしかないかな

>>224
変ったという情報しかくれない

>>225
いやいや、ちゃんと提示したリンクよく先見ました?

>>225
あー失礼。
よく見ると結局詳細な情報は得られないみたいね

ちょっとググって見た感じ、結構面倒だけど、
知りたい変更の数だけ適切にNotifyFilterプロパティを設定したFileSystemWatcherを作れば
一応可能な感じはするね

229デフォルトの名無しさん (スップ Sdc2-bwM/)2018/06/20(水) 12:29:31.18ID:4Nq0pqOcd
>>223
みんな使ってるよ

230デフォルトの名無しさん (ブーイモ MM62-P/8h)2018/06/20(水) 22:31:23.62ID:hTxlP2+IM
ググり方を知らない典型

231デフォルトの名無しさん (ワッチョイ 1f9b-5Tpg)2018/06/21(木) 21:35:06.03ID:hmU1hN6P0
エクセルbook1を開かずにsheet2の2列目に入ってる項目をコンボボックスに入れたいのですが、どうやるんですか?

中身を見ずに言い当てる手品のやり方なんか知らねーよ。

地獄に落ちろ

234デフォルトの名無しさん (ワッチョイ ffc9-GwbS)2018/06/21(木) 21:51:22.49ID:lTKRVfWU0
Excel.exe使わずにって意味ならいくらでもあるだろ

235デフォルトの名無しさん (ワッチョイ ff81-2vzp)2018/06/21(木) 22:32:53.55ID:7/J4zdhU0
御託はいいから答えろゴミクズ

236デフォルトの名無しさん (ワッチョイ 9fe3-Yk5b)2018/06/21(木) 23:11:39.87ID:HAta7DXc0
xlsxならclosedxmlつかえば

237デフォルトの名無しさん (ワッチョイ 1fb3-DXx3)2018/06/22(金) 00:26:01.32ID:/gqu33js0
ファイル開かずにならもちろん無理。
見えないだけなら可視しなければいいだけやん。

日本人のエクセルスキーは異常
海外にも神エクセルってあるんだろうか

239デフォルトの名無しさん (ワッチョイ 7fd2-fhdp)2018/06/22(金) 01:45:41.77ID:fZhhlNhQ0
>>231
コンボボックスとは?

240デフォルトの名無しさん (ワッチョイ 9fc3-zkXu)2018/06/22(金) 03:12:37.07ID:XVd2TvDg0
どんなものを作ればいいのかわからない
何をつくればいいんだ
教えてお前↓

241デフォルトの名無しさん (ワッチョイ 9f83-DJU/)2018/06/22(金) 03:21:00.63ID:6eBOmsiI0
JavaMachine

242デフォルトの名無しさん (スプッッ Sd9f-5Tpg)2018/06/22(金) 06:50:27.01ID:PzKWFNpyd
会社が未だにxpが数台あって、数多くあるエクセルを開いて処理して閉じる開いて処理して閉じるってやると重いけどなんか早くなる方法ってある?
database?SQL?
VB6でそうやってエクセルファイルを扱って処理してるんだけど

243デフォルトの名無しさん (ワッチョイ 9f83-DJU/)2018/06/22(金) 06:57:20.38ID:6eBOmsiI0
5万円のPCを買ってくる

>>238
外人はそもそも罫線をあまり使わない
方眼紙に文字を詰め込むのは日本猿特有の習性

245デフォルトの名無しさん (ワッチョイ 9f83-DJU/)2018/06/22(金) 07:09:51.33ID:6eBOmsiI0
私は猿なのでVSの枠がはっきりしないフラットデザインが馴染めません。

246デフォルトの名無しさん (ブーイモ MM43-STG2)2018/06/22(金) 07:20:32.82ID:Y47lTZ4XM
日本猿も江戸時代はプレーンテキストだったのに、どこで間違えたんだろうな

>>231
開かないとわかりません

>>245
同意
各項目の意味付けが曖昧になってすごく見づらい。退化と言いたいくらい。
そのうち立体的にするとわかりやすいやろって波が来ると思う。

249デフォルトの名無しさん (ラクッペ MM33-2vzp)2018/06/22(金) 10:09:55.10ID:lIRytxFLM
そもそも細々としたアイコンやメニューを大量に配置するのに適したUIではないわ
Azureコンソールとか見てても思うけど、マイクロソフトにUXデザイナーがいないってのは恐らく本当

250デフォルトの名無しさん (ブーイモ MM43-STG2)2018/06/22(金) 10:13:34.27ID:etP9oQEYM
VSCodeのUIは使いやすいけどな
本家VSもボタン全部無くしてコマンドにするべきだわ

web service(asmx)について教えてください。
利用する複数のアプリで使い回したいものをstatic変数に保持したいのですが、寿命が尽きるタイミングは分からないでしょうか?
具体的にはデータベースのconnectionでして、セッションをケチるために1つだけを使い回そうと考えています。寿命が尽きる時にdisposeしたいのですが、できない場合問題でしょうか?

252デフォルトの名無しさん (オッペケ Srf3-x3o9)2018/06/22(金) 10:26:12.51ID:xMgX8Fdkr
C#の設計思想とか、どういう設計でコード書いたらいいかみたいなのがわかりやすい書籍ってある?

253デフォルトの名無しさん (ワッチョイ 7f11-8g2T)2018/06/22(金) 10:51:01.98ID:32SF4tM80
>>244
値を縦に並べて合計との間に一本横線引いてあるだけとか、海外の資料じゃ良くあるよね

>>245
馴染めないという程じゃないけど、もうちょっと境界をはっきりして欲しいな
Windowsのデザインからしても最近のMSのトレンドなんだろうけど

>>252
c#実践開発手法がいいと思う
設計する上で重要な思想が学べるはず

フラットデザインは最近はやりのユニバーサルデザインとは真逆

256デフォルトの名無しさん (オッペケ Srf3-x3o9)2018/06/22(金) 12:11:51.14ID:U+1NZIRBr
>>254
よさげ
とりあえずKindle版ぽちった。
ありがとう!

第2版が出てたんだな
ステマか

258デフォルトの名無しさん (ブーイモ MM43-uoyT)2018/06/22(金) 14:40:02.21ID:+QjyPCKBM
ダイレクトやろ

259デフォルトの名無しさん (ワッチョイ 7f11-8g2T)2018/06/22(金) 17:59:11.25ID:32SF4tM80
むしろサードパーティマーケティング

今年独り社内SEとして入社しC#を選んだ者ですが、コンストラクタをオーバーロードして引数が有るものと無いものを作りました

よくよく考えると引数が無いコンストラクタのインスタンスを作って引数有りを前提にしたメソッドをコールすると最悪例外を出してしまうのですが、これは設計不良として検討し直しでしょうか?よくある事として許容されるでしょうか?

261デフォルトの名無しさん (ワッチョイ ff9a-qn6i)2018/06/22(金) 18:07:20.69ID:j0bZxxMK0
>>260
>引数が無いコンストラクタのインスタンスを作って(コンストラクタの)引数有りを前提にしたメソッド
人に聞くまでもなく作り直さないとだめだろう

262260 (バットンキン MM33-+a6w)2018/06/22(金) 18:21:23.38ID:v3P4scZFM
やっぱり設計の問題ですよね
フィールドに初期値入れれば例外は起きないと思いますが、引数必須のインスタンスを作られたら無意味なメソッドが完成するというのは設計者失格ですよね

263デフォルトの名無しさん (ワッチョイ ff9a-qn6i)2018/06/22(金) 18:35:58.53ID:j0bZxxMK0
>無意味なメソッドが完成する
メソッド書き直すとかないんだ・・・
普通は条件が違えば呼ばれないようにするとかメソッド内部で分岐させるとかいろいろあると思うんだが

264デフォルトの名無しさん (ワッチョイ 7f9d-hF4h)2018/06/22(金) 19:36:18.31ID:fkpP2SFC0
>>251
>寿命が尽きるタイミングは分からないでしょうか
基本的には分からない
つかキャッシュ使え
そもそもDBコネクションならほとんどの場合でドライバ側でプーリングされてると思うが

>>260
設計不良は大げさ過ぎw
普通に考えて

(1) 引数ありのメソッドは廃止。代わりにそのデータはプロパティでセットできるようにする。

(2) 引数なしのコンストラクタが呼ばれた時はプロパティの値は規定値が設定されるようにする

こんだけでしょう

>>264
データベース管理者から、なるべく接続を増やすなと言われてます。複数のPCから複数のアプリでアクセスするので、窓口を一本化するイメージです。
なのでプーリングはアプリ分の接続が残るので逆効果。
キャッシュを使うとは具体的にはどうするのですか?ググるヒントをもう少しください。

267デフォルトの名無しさん (ワッチョイ 7f9d-hF4h)2018/06/22(金) 20:38:24.35ID:fkpP2SFC0
>>266
>複数のPCから複数のアプリでアクセスするので
それサーバ側の話?
アクセスって何に?DBにアクセスするのは誰?

つか、そもそもそれWEBサービスに同時アクセスあったときにどうする気?

>>260
使う側からすると、引数に渡す値ね〜よのときは、引数なしのほうがいいな。
(なしのときは null渡すとかにしたくないな。私見)

269デフォルトの名無しさん (ワッチョイ ffc9-GwbS)2018/06/22(金) 22:05:33.33ID:rFBnrjcr0
>>266
接続ユーザー分排他でもするのかよw

270デフォルトの名無しさん (ワッチョイ ffed-DJU/)2018/06/22(金) 23:04:03.86ID:TC2xExz/0
4msのインターバルタイマを実現するのにおすすめの方法を教えてください

271デフォルトの名無しさん (ワッチョイ 9f83-DJU/)2018/06/22(金) 23:08:50.34ID:6eBOmsiI0
リアルタイムOSをインストールする

272デフォルトの名無しさん (ワッチョイ ff33-mTVk)2018/06/23(土) 00:01:03.09ID:9nwowUkH0
USBシリアル付きマイコンから適当にパルスを送ってもらう
数百円ぐらい

273デフォルトの名無しさん (ワッチョイ 1f06-cOHa)2018/06/23(土) 00:04:23.96ID:4A65QZOx0
>>267
クライアントPCからデータベースに接続します。webサービスで排他処理します。
サーバーの負担を増やしたくないとの事で、とにかく同時期にセッションを増やさないという方針は決定してます。
なので排他処理はどこかでやる事になるのですが、どこかのPCで動くアプリよりやり取りも含めて楽かなと思ったのですが。

新着レスの表示
レスを投稿する