C#, C♯, C#相談室 Part93©2ch.net

■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2デフォルトの名無しさん (ワッチョイ de35-HDOw)2017/04/22(土) 10:57:42.55ID:g8ZT1khs0
■過去スレ
C#, C♯, C#相談室 Part89
http://peace.2ch.net/test/read.cgi/tech/1443271409/
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/
C#, C♯, C#相談室 Part91 (実質Part92)
http://echo.2ch.net/test/read.cgi/tech/1467211515/
C#, C♯, C#相談室 Part92 (実質Part93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/

>>1
ここは、実質Part94

■関連スレ
初心者の質問向けはこちら
ふらっと C#,C♯,C#(初心者用) Part127
http://echo.2ch.net/test/read.cgi/tech/1489498042/

>>2
補足thx。見逃していた

おつかれ
キチガイの人(山口人生)は、複数回線もっていそうだからどこまで効果するかは分からんけれど
何もしないよりマシだね、今後もワッチョイ有りで行こう。
死ねばいいのに・・・・

誰だよ山口人生ってww

正しいスレ番と設定で立てました

C#, C♯, C#相談室 Part94
http://echo.2ch.net/test/read.cgi/tech/1492843013/

>>5
ググッてみてば分かるw
東大出でイリノイ大学で不完全性定理で有名なゲーデルの弟子として著名な
竹内外史先生の弟子になってPh.Dを取るも、神奈川大学で万年講師、研究室の壁を蹴って騒音出していたらクビになってしまったヤツwww
経歴だけ見るとスーパーエリートwwww
学歴荒らしがあるところに山口人生あり、酷い学歴厨の60台後半じぃさん
実家はお金持ち、もう親は鬼籍かな?ビル持っていて資産が一億切っているとか、絶対ヤバそうw
P=NPを主張しているが誰にも相手にされず、学会では芸人扱いw

統失くんいらっしゃい、ってかw

敬意が足らないですね、糖質超教授と読んであげましょうwww
いらっしゃらなくていいです、迷惑なので死んでください

10デフォルトの名無しさん (ワッチョイ bb4c-VP69)2017/04/22(土) 19:18:48.92ID:7MQLYtSw0
本当のその山口ってのなのか?

11デフォルトの名無しさん (ワッチョイ 7ff7-/JtG)2017/04/22(土) 19:41:05.45ID:c4VI05+R0
張り付き方が異常、現役じゃ不可能
発言が山口人生と似ているし話が高齢者臭い、中年ですらない
Delphiを使っていて最近C#に移ってきている
ここまでのマジキチには普通日常で出会うことは無い、希少種

そんなヤツがこの日本に何人もいてたまるかwwww

12デフォルトの名無しさん (ワッチョイ bb4c-VP69)2017/04/22(土) 20:05:29.05ID:7MQLYtSw0
このスレ、自分以外は全部同じ人が書き込んでたりしてw

ちょっとしたホラーだな

なんかワッチョイ付いてると気に入らないみたいよ
俺は付いてるほうが好きだからこっちのスレのがいいな

14デフォルトの名無しさん (ベーイモ MM7f-4iqD)2017/05/03(水) 17:15:57.72ID:crwmH6BQM
こっち使おうぜ

15デフォルトの名無しさん (ワッチョイ 93f7-6g+b)2017/05/05(金) 16:32:19.84ID:bVbNjYk40
今日発見した衝撃の事実
なぜWindowsUpdateの時ファイルがぶっ壊れるのかというのがずっと謎だった
Application.ThreadExit イベントで書き出しスレッドの終了処理していたのだが
手動のシャットダウンだと問題なく呼ばれるのに、リブートするとThreadExitが呼ばれない
それどころか、フォアグラウンドで作成していたスレッドが強制終了させられている上
System.Threading.ThreadAbortExceptionmもSystem.Threading.ThreadInterruptedExceptionも送出されないまま
突然中断で終了しやがってた・・・
ひでぇ終了の仕方だ・・・
なんでリブートに限りこんなシーケンスで強制終了しやがるんだ、この糞が・・・

16デフォルトの名無しさん (ワッチョイ 761f-ExUK)2017/05/05(金) 16:49:33.38ID:tHPUBlll0
セキュリティ的にアプデは大事だからね
多少強引な手段で終了してもいいよね仕方ないね

17デフォルトの名無しさん (ワッチョイ e2d4-Ogwz)2017/05/05(金) 17:01:44.90ID:3XrDrf840
シャットダウンと再起動で違うのか

18デフォルトの名無しさん (ワッチョイ 124f-hLQG)2017/05/05(金) 17:10:34.10ID:pBlqXMv00
もっと詳しく知りたい。

SessionEndingイベントとかで捕まれないんか?
それ

19デフォルトの名無しさん (ワッチョイ 93f7-6g+b)2017/05/05(金) 17:16:16.69ID:bVbNjYk40
>>16
セキュリティは最終的には自分のファイルが壊れないことを目的にやるわけだが
そのセキュリティ対策が破壊してくれるのであれば、本末転倒なのでそんな対策は不必要って思うわけだよ。

20デフォルトの名無しさん (ワッチョイ 93f7-6g+b)2017/05/05(金) 17:17:13.60ID:bVbNjYk40
>>18
SessionEndingイベントが来たときはもう殺された後だねw
ここでは対策出来ない。

21デフォルトの名無しさん (ワッチョイ 124f-hLQG)2017/05/05(金) 18:09:02.57ID:pBlqXMv00
>>20
おおう、そうなんか。

>>15
Windows Updateだろうが何だろうがリブート開始時に
ユーザーに確認なくプロセスの強制終了なんてそもそもされないと思うよw

何か勘違いしてない?

ちょっと調べた感じ
http://news.mynavi.jp/column/windows/270/
にあるような感じでレジストリいじっちゃったんだろうねw

24デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/05(金) 18:43:02.46ID:PzvORh1V0
>>22
EWX_FORCEとかEWX_FORCEIFHUNGを指定してるんでしょ
https://msdn.microsoft.com/ja-jp/library/cc429713.aspx
セキュリティアップデートは確実にリブートする必要あるから多少の犠牲はやむを得ない
って思ってるんじゃね?

25デフォルトの名無しさん (ワッチョイ 72ac-W+y+)2017/05/05(金) 19:11:23.54ID:FiATWWo80
客側でこれを指定されたらたまらないなー

26デフォルトの名無しさん (ワッチョイ df6c-hLQG)2017/05/05(金) 19:58:14.99ID:ueXs9gXt0
ExitWindowExの英文説明では、DWORD dwReservedのとこがdwReasonになってんね。

このへんかな

27(スフッ Sd52-gZQE)2017/05/05(金) 20:10:07.89ID:05XvGSted
プロセスの終了確認はあるだろうか、その結果タイムアウトした時のスレッドの落とし方はものすごい強引だった気がする。
昔shutdown -s -t 01で落として確認した事ある。

28デフォルトの名無しさん (ワッチョイ 7606-7zcB)2017/05/05(金) 20:14:25.56ID:3cKL/0El0
OSの仕様なのか.NET独特の挙動なのか>>23みたいな話なのかはっきりしないな
.NET独特の挙動だったら業務でアプリ作っている人は死活問題じゃね

29デフォルトの名無しさん (ワッチョイ 323c-10U+)2017/05/05(金) 20:27:56.88ID:PzvORh1V0
>>26
日本語版のドキュメントが更新されてないだけみたい
WindowsXPからdwReasonになってる

いやいやデフォではプロセス強制終了なんてないよ絶対w

Winduws Updateはデフォでは自動になってるんだから、Windows Updateが走るたびに
そんな無茶苦茶やってたら世界中で大騒ぎになってるってw

XPの時代はそんな経験したような記憶もあるけど
少なくともVista以降はないと思うよ

31デフォルトの名無しさん (ワッチョイ 7606-7zcB)2017/05/05(金) 20:34:57.11ID:3cKL/0El0
俺は趣味でやっているだけだしアップデートも任意のタイミングでしかやらないからどうでもいいが
VSの有料ライセンス買っている人がいて心配だったら直にMSに聞いた方がいいな

32(スフッ Sd52-gZQE)2017/05/05(金) 20:48:13.06ID:05XvGSted
>>28
業務アプリが走るような環境は、社内でKB単位で配布して、ログイン前に当たるようにしてると思う。
>>30
本人はプロセスじゃなくてスレッドを問題視してるのでは?

33デフォルトの名無しさん (ワッチョイ df6c-hLQG)2017/05/05(金) 22:27:29.53ID:ueXs9gXt0
>>30
言いたい事はわかるw

まーもちつけ

34デフォルトの名無しさん (ワッチョイ 93f7-6g+b)2017/05/06(土) 07:24:56.49ID:KTPtsEWO0
>>30
10以前はWindowsUpdateをするタイミングをこちらの問題の無いタイミングで出来たから
そもそも問題自体が存在しなかったという事実。

35デフォルトの名無しさん (ワッチョイ 27d4-YAN7)2017/05/06(土) 07:54:55.96ID:rojhZA3i0
適度にトラブル起こしてあげないと窓際族の情シスの仕事がなくなっちゃうからね

36デフォルトの名無しさん (ワッチョイ 124f-hLQG)2017/05/06(土) 08:25:02.90ID:2V5tVO5D0
>>27
これは良いこと聞いた。
うちも似たような仕組み作ってるグループあるから、ExitWindowsExも利用して調査してみるよう伝えてみるわ

37(スフッ Sd52-gZQE)2017/05/06(土) 08:57:56.21ID:BE072L/9d
>>36
UIスレッドでメッセージボックス出しとくと、プロセスを落とす正規ルートからはずれて再現できるとか、なんか色々こねくり回したよ。
今だと仮想マシンあるから、マシンが上がってくるの待つ辛さ無いかもね。

38デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 06:03:37.70ID:OZ9w4Yf70
ロック処理についてちょっと相談です

●二つ以上のオブジェクトを同時にロックしたい
片側づつ順を追ってロックしていくのはダメ、デッドロックするので。
ロック出来ない状態である限り、ロックは限りなくしないようにしたい。
ロックに失敗までのタイムアウト処理もしたい。

●例えばこれだと、デッドロックを引き起こすので良くない
lock(obj1) lock(obj2) 処理;

●そこで、言語に以下のような構文があれば理想的なのだが
ないので、それらしいヘルパを作りたい、できれば効率的な物。
lock(obj1,obj2, ... ,timeout=1000) {
 ロック成功の場合の処理
}
timeout {
 タイムアウトした場合の処理
}

39デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 06:03:54.24ID:OZ9w4Yf70
●とりあえず簡単に考えた、しかし無駄が多そうに見える、もっと良いものが欲しい。
DateTime begin = DateTime.Now;
再試行:
bool l1 = Monitor.TryEnter(obj1, 0);
bool l2 = Monitor.TryEnter(obj2, 0);
if (l1 && l2) {
 goto ロック成功;
} else {
 if(l1) Monitor.Exit(obj1); // チェックと共にロックしてしまうので、このコードも残念賞
 if(l2) Monitor.Exit(obj2); // 同上
 if ((DateTime.Now - begin).TotalMilliseconds > 1000) {
  goto タイムアウト;
 } else {
  System.Threading.Thread.Sleep(10); // この待ち方も酷い
  goto 再試行;
 }
}
タイムアウト:
{
 タイムアウト処理
}
ロック成功:

40デフォルトの名無しさん (ワッチョイ 2b75-Muxa)2017/05/25(木) 07:25:50.25ID:zdaQwC0X0
ていうか普通にロック専用のオブジェクト作ってそれをロックすりゃいいんじゃねーの

41デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 07:32:55.17ID:OZ9w4Yf70
>>40
それだとロック粒度が大きくなりすぎて逆にデッドロックの可能性を拡大してしまいますね。

42デフォルトの名無しさん (ワッチョイ 9f7d-yauO)2017/05/25(木) 07:34:38.83ID:ZdIAUNK00
セマフォ使ったらどう?
資源数もタイムアウトもあるし

43デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 07:36:13.98ID:OZ9w4Yf70
>>42
セマフォは重いんですよねぇ
それをやるくらいなら>>39の例の方が効率的ですね。

44デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 07:50:05.84ID:OZ9w4Yf70
>http://article.higlabo.com/ja/thread_locking.html
lock(Monitor.Enter/Monitor.Exit) 同じプロセス 20ns
Mutex 違うプロセスも可能 1000ns
SemaphoreSlim 同じプロセス 200ns
Semaphore 違うプロセスも可能 1000ns
ReaderWriterLockSlim 同じプロセス 40ns
ReaderWriterLock 同じプロセス 100ns

Semaphoreは高機能すぎて、あまり軽々しくは使えない。
そのわりにはlockと違ってスレッドチェックがないので自家中毒を起こしたりするので、別途そのための対処が必要になったりする。
lock 20nsはやはり捨てがたいものです。

45デフォルトの名無しさん (ワッチョイ 4bcd-TmZs)2017/05/25(木) 08:14:43.50ID:CNpknsWj0
見も蓋もないが、設計が間違ってる気がする。

46デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 08:20:40.14ID:OZ9w4Yf70
>>45
そんな事は無いと思うんだけどな、セマフォに標準で実装されているように
これはマルチスレッドデザインパターンとしては基本になるかと。
というか教科書にある典型ですし。
ところが、Monitorにはなかったので、おや何故ない?となっている所。
せっかく高性能なのに有効活用できないのは勿体ないと。

47デフォルトの名無しさん (スプッッ Sd0f-UmYi)2017/05/25(木) 08:30:18.43ID:a8axhl9cd
>>46
そもそもなぜロックが必要なの?

48デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 08:34:06.74ID:OZ9w4Yf70
>>47
分からないならレスしないでもらえますか?
流されては叶いません。

49デフォルトの名無しさん (ワッチョイ 4bcd-yumd)2017/05/25(木) 08:52:37.16ID:CNpknsWj0
>>39
みたいなことをするぐらいならSpinLockを使った自前実装で処理したほうが良いかもしれない。

もしくは
>>lock(obj1) lock(obj2) 処理;
これでもデッドロックしないように、Lockする順番を厳格にしてコーディングするとか

というか、言葉遣いに気を付けたほうが良いと思うよ。

50デフォルトの名無しさん (ワッチョイ 2bd4-WXs4)2017/05/25(木) 08:54:51.29ID:foQMlEN20
そんなにパフォーマンスが大事ならオプティミスティックロックも検討したら?
どうせ滅多に競合なんかしないでしょ

51デフォルトの名無しさん (スプッッ Sd0f-UmYi)2017/05/25(木) 09:01:40.08ID:a8axhl9cd
>>48
そもそもロックが必要という判断に至った理由が明らかでない
ロックがベストな選択肢である保証はどこにもない

52デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 09:04:40.54ID:OZ9w4Yf70
>>49
ここにいる知らなくてもレスしないと死ぬ病気にかかっている奴はどうしょうもない。初心者の上にキチガイなら死ねって感じですが。
とりあえず、スピンロックは使いたくないですね、あれはCPUタイムをすり潰しながら高速動作を確保しようとするものだから
それの主用途は、激重計算タスクを並列処理するための物であって、目的とちょっと違いますね。
あと、排他処理をちゃんと勉強すると、順序等を考えていても意味が無くて
ロックする瞬間に作業に必要になるリソースをすべて確保して、必ず抜けられるという事の方がデッドロックに対する対処としては有用です。
でも、上に書かれているように一つのオブジェクトで粒度を上げてしまったら本末転倒になります。

53デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 09:05:42.97ID:OZ9w4Yf70
>>51
ちゃんとわかっている人を待っているんだから黙ってろ

54デフォルトの名無しさん (ワッチョイ 2bd4-WXs4)2017/05/25(木) 09:12:36.71ID:foQMlEN20
アイデアを募るならもっと広い視野で考えたほうがいいってことでしょ
矮小な問題に限定されすぎていて、マイクロベンチマークレベルの不毛な議論にしかならない
状況によっては工夫すればロックフリーな実装もできるかもしれないよ

うわあ。これは無視すべき奴だw

56デフォルトの名無しさん (ワッチョイ 4bcd-yumd)2017/05/25(木) 09:24:19.81ID:CNpknsWj0
>>52
https://www.jpcert.or.jp/java-rules/lck07-j.html
ソースはそれっぽいものを適当に引っ張ってきた
ロックする順序は意味あると思うんだけど、、、

デッドロックが怖いってことだと思うんだけどさ
親から子へ順番守ってロックすればデッドロックしないじゃん?

57デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 09:24:47.08ID:OZ9w4Yf70
>>55
世の中上には上の奴がいるんだよ、俺なんかよりはるかに知識を持っている奴はいくらでも。
お前より俺の方が知識あるが、そんな俺よりもはるかに凄いやつは山のようにいるんだ。
そろそろ、中二病みたいな全能感は捨てな

58デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 09:32:43.15ID:OZ9w4Yf70
>>56
親子関係があれば、親についている操作ようのメソッドにロック処理をいれれば問題ないですね。
でも、今回のは完全に独立しているオブジェクト間です。
ちょっと難しいですね。
実際問題としては、順序を使う側にすべて守らせるというのは、理屈では語れても実践的ではないかもしれません。
やはり、ロック時間を短くする事が肝要であり、その為には粒度を小さくするのが基本となるかと。
汎用的なやり方としては、この方法がもっとも優れていると思います。
なので、この方法をより高パフォーマンスで実現できるヘルパーを実装して纏めて利用したい訳です。
だから、別の方法は考えていないです。Monitorを使った高速排他処理が今回の最終目標です。

59デフォルトの名無しさん (ワッチョイ 0f75-jnQe)2017/05/25(木) 11:13:36.68ID:5itOJ4P90
楽観的ロックのタイムアウトで、ロールバックするのが確実

人間には絶対にミス・バグがあるから、
デッドロックを100%、起こさないようにする事は、絶対に出来ないから

60デフォルトの名無しさん (ブーイモ MM4f-0Wf4)2017/05/25(木) 11:20:25.49ID:ts6Ek6dYM
これ触っちゃいけないやつじゃん・・・

61デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 11:39:35.31ID:OZ9w4Yf70
>>59-60
だから、もう来るなって、お前には何も聞きたいことは無いし、そんな話は聞かされたところで新たな何かには全くつながらない。
C#スレには、初心者用じゃないもう一本の匿名ゴミすれあるだろ、そっちいけよ。
分かっている人が来たときにコメントがゴミだらけになる。

たぶん質問者の方が俺よりずっと詳しそうだから釈迦に説法だと思うけど、

>●例えばこれだと、デッドロックを引き起こすので良くない
>lock(obj1) lock(obj2) 処理;

これがデッドロックしうるのはこのスレッドがobj1だけをロックした状態で
別のスレッドがobj2をロックして、そのスレッドがobj1を待機してる場合だよね?

この場合このスレッドがobj1をアンロックしない限りobj2もアンロックされないからデッドロック

だから、ネストの内側のock(obj2) だけをタイムアウト付きのMonitor.TryEnterに置き換えれば
効率的かどうかはどうかはともかく、要件は満たせるんじゃいないの?
知らんけど

63デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 12:28:42.96ID:OZ9w4Yf70
>>62
まさにその通りです、それが直下に書いた雑な例です。
このヘルパーを作りたいという訳です、見るからに美しくないので詳しい人の登場をお待ちしているという所です。
必要な全ロック取得に失敗したら即座に全て解放して、乱数時間まって次を伺う。
これはよくある教科書通りです。

64デフォルトの名無しさん (スプッッ Sd0f-UmYi)2017/05/25(木) 13:09:08.98ID:a8axhl9cd
>>62
キチガイに触るなよ

65デフォルトの名無しさん (ブーイモ MM4f-ATwg)2017/05/25(木) 13:35:53.97ID:Gj1BXJi/M
基地外大暴れワロタ

66デフォルトの名無しさん (ワッチョイ 4bcd-yumd)2017/05/25(木) 13:51:23.71ID:CNpknsWj0
http://ideone.com/GHvgKN
勢いで書いた。

67デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)2017/05/25(木) 13:59:41.85ID:OZ9w4Yf70
>>66
いいっすね、いいっすね
Thread.Sleep(100); ← ここがもうちょっとマシな待ち方になるといいんですがw
自分はインターフェイスは、IDispose使ってロック範囲を lock で書いたような雰囲気にしてます。
タイマーは、初ロック失敗の後にスタートさせて、ロック成功(大半のケース)でロスが少ないようにしてます。
なかなか素敵な感じになってくれませんw

68デフォルトの名無しさん (ワッチョイ 1f1b-6//c)2017/07/11(火) 08:22:12.16ID:MCsEtOKi0
↓のテンプレートとジェネリックの違い、にある
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/generics/differences-between-cpp-templates-and-csharp-generics
トップ項目にある
・C# ジェネリック クラスでは、ユーザー定義演算子は呼び出すことができますが、算術演算子を呼び出すことはできません。
"算術演算子を呼び出すことはできません"ってどーいう意味っすか?
算術演算子って+-*/のこと?

遠まわしに制約について言ってるのかな。

算術演算子が使える型のみ受け入れるような制約はできないから
自動的に算術演算子は使えないことになるわけだけど...

70デフォルトの名無しさん (ワッチョイ 5eea-bL4e)2017/07/16(日) 01:54:50.85ID:mMdQfX5s0
楽しそうだな。w

71デフォルトの名無しさん (ワッチョイ 6a90-qWRz)2017/07/29(土) 20:36:18.47ID:Gw88XuqA0
ジェネリックに算術演算子を使うなら、そんなに速度が要求されないんなら
(dynamic)にキャストしてからなら演算子が使える
まあこれキャッシュ付きのリフレクションだから速度は期待しないでよー

72デフォルトの名無しさん (ワッチョイ 331b-z1u6)2017/08/21(月) 18:56:43.94ID:LgNyTwHt0
C++ではテンプレートに焦点をあてた書籍はいくつかあるけど
C#でジェネリックに絞ったオススメ書物ってのはありますか?
C++のテンプレートテクニックのどれが使えないか?ってのは知りたい。

C#のジェネリックって1時間で読める記事で網羅されるぐらいの内容しかないっすよ

74デフォルトの名無しさん (ワッチョイ 11aa-8gPR)2017/08/21(月) 20:02:09.15ID:vP5jpteT0
テンプレートテクニックとか全部忘れてOK

75デフォルトの名無しさん (ワッチョイ 6171-3KK3)2017/08/21(月) 21:10:14.69ID:qdRqCzb30
プレートテクトニクス

76デフォルトの名無しさん (ワッチョイ da1b-KdCs)2017/08/27(日) 02:29:03.34ID:/hywh0UG0
式テンプレートジェネリックでどー書くんだよ

77デフォルトの名無しさん (アウアウウー Sa39-B8PL)2017/10/09(月) 21:40:27.74ID:dzl0TrLma
すみません。ちょっと急いでいます。

C#でクラスを宣言する際に、
class {...} とpublic class {...}
このふたつの違いが判りません。
教えてください。

78デフォルトの名無しさん (ワッチョイ dad2-B8PL)2017/10/09(月) 21:54:29.58ID:rAF1hT8M0
お願いします。同じものですか?

79デフォルトの名無しさん (ワッチョイ 75e8-LiJ6)2017/10/09(月) 21:56:31.06ID:28tAbNEV0
アクセス修飾子を省略したクラスは internal になる
public とか internal とかの意味については↓

アクセス修飾子 (C# プログラミング ガイド) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

80デフォルトの名無しさん (ワッチョイ 469f-N4fM)2017/10/09(月) 21:56:50.83ID:u67WqECL0
>>77
外部から見えるか見えないか

81デフォルトの名無しさん (ワッチョイ dad2-B8PL)2017/10/09(月) 22:03:58.01ID:rAF1hT8M0
ありがとうごぜます。
internalですね。アセンブリ言語レベルの話のようなので
まだそこまで至ってないのでpublic, private, protectedだけ使います。
すみませんでした。

82デフォルトの名無しさん (ワッチョイ 769a-XSap)2017/10/09(月) 22:12:08.58ID:Y4203ffV0
「アセンブリ」ってみて「アセンブリ言語」って理解するのは先が思いやられるな。全然意味が違う話なのに

83デフォルトの名無しさん (ワッチョイ 75e8-LiJ6)2017/10/09(月) 22:16:05.20ID:28tAbNEV0
>>81
上記のページで「アセンブリ」と言ってるのはアセンブリ言語のことではなくて
「exe」とか「dll」とかのファイル単位での機械語のまとまりのことだよ

84デフォルトの名無しさん (ワッチョイ dad2-B8PL)2017/10/09(月) 22:41:05.37ID:rAF1hT8M0
ありがとう。
今自分でも調べていてなんか違うなーって思ってました。

85デフォルトの名無しさん (ワッチョイ 7680-HC+h)2017/10/09(月) 23:04:42.97ID:/pZGRYTm0
bin

バイナリ・ファイル

86デフォルトの名無しさん (ワッチョイ 7d80-Wlpn)2017/10/10(火) 00:40:47.02ID:pliWVB3X0
今となっては、いや初めから忘れてもいい話だったけど
ファイル単位の物理的なまとまりはモジュール(.netmodule)で
モジュールをまとめた論理的まとまりがアセンブリ(.dll/.exe)
Visual Studioが2002の初めから一貫してサポートしてないこのモジュールって単位をMSはどう使うつもりだったんだろう

87デフォルトの名無しさん (ワッチョイ 718a-QWl5)2017/10/10(火) 21:13:43.71ID:9Raz+qz10
最終的に1つのライブラリにしたいものをC#とF#で部分ごとに書き分けるとかそういう例は見た事あるけど
(ものによってはF#のほうが書きやすいとか)
実際それが必要なユーザがどれだけいるのかって話な

88デフォルトの名無しさん (ワッチョイ b66c-XSap)2017/10/10(火) 23:25:11.21ID:I+aeGBiR0
C++/CLIとC#の組み合わせがある。

最終的な呼び出し元はネイティブと同じ口なんだけど、
dynamicやasync/awaitなどを使いたいため、
dllexport付近の薄皮一枚だけ C++/CLI、
残りは全部C#で記述して1つの.dllにってのに.netmoduleを使う。

C#とF#の組み合わせとか、ほとんど無意味に思えるが…

iron python も?

90デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)2017/10/18(水) 13:52:47.94ID:ufsScDVj0
event解除ってnullぶっこんでもいいのかしら?
何処見ても-=でしろってのばかりで全解除の適切なやり方載ってないんだけど
一応null代入で動いてるぽいけどちと不安

まいなすはそれだけ消す、nullはすべて消す
できわるいコードだとnull入れると落ちるw

92デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)2017/10/18(水) 14:18:32.71ID:ufsScDVj0
全解除ってそれなりに需要あると思うんだが何処も扱ってない不思議
+=って内から外へ処理出しする訳だから
インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
nullぶっこめばGC回収されるみたいだけど正しいやり方なのかな

設計次第じゃないの

購読側じゃなく発行側が勝手に解除ってのがちょっと...
むしろどういう場面で必要になるのか想像できないな

> +=って内から外へ処理出しする訳だから
> インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
ここは何を言ってるのかよく分からない

まあ、イベントというかデリゲートのマルキチャストの仕組みが分かりづらいのはわかる

>>92
正しいというかとりあえず安全なのは何もしないの放り込んどく
それでも勝手に消されて困るのがあるかもしれんがw

96デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)2017/10/18(水) 16:11:03.50ID:ufsScDVj0
>>94
例えば非同期通信でデシリアライズ終わったらイベント投げて後は勝手に死ね、って場合
-=だと発行側で解除するのが困難でリークしちまう
最新VerC#ならTaskで後処理書けばいいけど、Unityだとつい最近まで3.5だったから

>>96
俺の理解不足だったらごめん

リークするのはイベントの購読側のオブジェクトLがイベントの購読を解除しないまま
Lを参照する変数がなくなった場合で、発行側のオブジェクトPのイベントに
Lのメソッドが登録されたままPへの参照がなくなってもそれはリークにならないと思うんですが

98デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)2017/10/18(水) 16:39:10.41ID:ufsScDVj0
>>97
そう思ってた時期が俺にもありました
しかし実際はリークしてOutofMemoryが出る
どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい
本当にそういう理屈かは知らんけどnullぶち込むと例外でなくなる

99デフォルトの名無しさん (ワッチョイ 797e-lqEX)2017/10/18(水) 17:26:02.20ID:jNhOnQNR0
思い込みって怖いネー

100デフォルトの名無しさん (ワッチョイ 93b3-meYy)2017/10/18(水) 17:46:05.16ID:GswCLlj60
>>98
>どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい

登録解除してないから購読側は発行側から参照されてて回収されない
その状態で購読側が発行側を参照してるんなら発行側も回収されないよね

101デフォルトの名無しさん (ワッチョイ 7996-lqEX)2017/10/18(水) 19:19:26.31ID:j/PgXgnk0
循環参照しててもルートから到達不能なら回収されるよ
されないなら単に循環参照以外の参照が何かしら残ってるだけ

いいや解放されないね!とかいう思い込みに付き合う気はないから
口ごたえがしたければ、VSのメモリーアナライザーで
リークしているというオブジェクトの参照状態のスナップショットを撮って
ここに貼り付けてから続けるように

102デフォルトの名無しさん (ワッチョイ 93b3-meYy)2017/10/18(水) 21:18:06.23ID:GswCLlj60
>>101
すまんすまん、他の言語と勘違いしてた。

103デフォルトの名無しさん (ワッチョイ 318a-SWEl)2017/11/07(火) 14:20:16.62ID:7CEykIkZ0
WebBrowserコントロールを使うと、レジストリ編集しないと自動的にIE7相当になってしまうんですが、
レジストリ編集無しでIE11相当にするにはどうしたらいいでしょうか?

もしくは、dllファイル1つで済むなら、他のブラウザコンポーネントでもいいです。

104デフォルトの名無しさん (ワキゲー MM8a-9Rqp)2017/11/07(火) 14:42:48.60ID:uJ4GX7RNM
IEは他にはhtmlのmeta要素使うとか
レジストリっていってもHKCUなんだからアプリ起動時に書き込むだけのことだけど

105デフォルトの名無しさん (ワッチョイ 2e81-TtNK)2017/11/07(火) 18:40:38.64ID:MJK6I9RA0
>>103
CefSharpっていうChromiumの実装がNuGetにあるよ
AnyCPUに対応してないんで導入が若干手間だけど気合いでがんばれ

106デフォルトの名無しさん (ワッチョイ 794f-mNd+)2017/11/08(水) 00:31:11.06ID:NuL34q9d0
>>103
CoInternetSetFeatureEnabled

107デフォルトの名無しさん (ワッチョイ dfb3-iA8U)2017/12/18(月) 07:59:20.53ID:mWvJQqvN0
#EntityFrameworkの質問ってここでよいですか?

EFCore+Sqliteで開発してるんですが、".db"ファイルのパス指定で困ってます。

コネクション作成時に、以下でdbパス指定をしています。
var connectionString = new SqliteConnectionStringBuilder { DataSource = @"./app.db" }.ToString();

この場合、理由がよく分かってないのですが、
Update-Databaseを実行した時(CreateDatabaseが発行される時)、プロジェクトフォルダからの相対パスになり、
SaveChangesを実行した時(Insert文が発行される時)、/bin/debugからの相対パスになります。

毎回相対パス指定を変えるのが面倒で、かつ絶対パス指定はしたくないもので。
何か良い方法はありませんでしょうか。

108デフォルトの名無しさん (ブーイモ MM63-9jqv)2017/12/18(月) 13:46:10.03ID:325qmzymM
ここじゃないと思うの

109デフォルトの名無しさん (ワッチョイ 1e9e-rCI4)2017/12/18(月) 14:56:45.39ID:dTBoNCZ50
>>107
で、app.dbはどこに有るのよ、

俺ならexeパス取得して絶対パス作ってそれ使うけど、
絶対パスいやならカレントフォルダ変更したら?

111107 (ワッチョイ dfb3-iA8U)2017/12/18(月) 23:30:30.75ID:mWvJQqvN0
>>109
プロジェクトフォルダにできます。
ただ、プログラム実行時は別のパス見てるからDBないエラーになります。

>>110
あー、それいいかもです。
やってみます。

112デフォルトの名無しさん (ワッチョイ cbb3-RYVm)2017/12/31(日) 15:13:16.63ID:n7dS7ECy0
個々の人ってWinFormとWPFどっちで作ってる?

113デフォルトの名無しさん (ワッチョイ 06ed-FiVz)2017/12/31(日) 15:13:40.84ID:K0nOGJob0
WPF

何度聞かれてもformだ

115デフォルトの名無しさん (ブーイモ MM76-cnjM)2017/12/31(日) 16:16:35.61ID:PdI3PgJiM
オレも2年前からWPFにした。

116デフォルトの名無しさん (ワッチョイ 67f2-RYVm)2017/12/31(日) 16:35:43.42ID:GvxCaHuK0
新規は基本的にWPFだけど、使い捨てのツールはFormsのことも多い。

117デフォルトの名無しさん (アウウィフ FF2f-gocz)2017/12/31(日) 16:54:40.12ID:Jm0z8SXaF
昔はVSが何かっつと即堕ちして使いもんにならんかったが
今はまともになったんかねWPF

118デフォルトの名無しさん (ワッチョイ cbb3-RYVm)2017/12/31(日) 17:32:53.36ID:n7dS7ECy0
WPFって技術資料があんまないから、つっかかりにくいんだよなあ

119デフォルトの名無しさん (ワッチョイ decc-vQtD)2017/12/31(日) 18:07:24.15ID:jSVu2Yi+0
>>118
日本語が変だな
外国人?

120デフォルトの名無しさん (アークセー Sx03-tbBN)2017/12/31(日) 18:22:11.56ID:OKQGXBiEx
>>119
あれだ外人からみれば
そうみえんじゃねw

121デフォルトの名無しさん (ワッチョイ decc-vQtD)2017/12/31(日) 20:17:21.07ID:jSVu2Yi+0
つっかかりにくい→つかえやすいorつっかえやすい
それとも
つっかかりにくい→とりつきにくいorとっつきにくい

あんまない→あまりないorあんまりない

読解力ないな
外国人?

123デフォルトの名無しさん (ワッチョイ 4ae1-uLLi)2017/12/31(日) 20:26:45.27ID:sT88mvz00
読解力が無かったら修正例は書けないと思う

124デフォルトの名無しさん (ワッチョイ 5f81-Ixt9)2017/12/31(日) 21:26:10.60ID:mh0j3eXv0
どこかの田舎もんが書いた文章なんだろ

125デフォルトの名無しさん (ワッチョイ cbb3-RYVm)2018/01/01(月) 08:43:08.79ID:qva7Cn1y0
そんな事にも突っ込まないといけないほど余裕がないんだろうな

126デフォルトの名無しさん (ワッチョイ 7b17-Ogju)2018/01/08(月) 21:07:22.93ID:ff9XOb220
ILMergeについて質問です

例えば自作アプリ X.EXE に外部ライブラリ A.DLL と B.DLL を結合して X2.EXE を作ったとします
この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?

127デフォルトの名無しさん (ワッチョイ 0f9a-+W2v)2018/01/08(月) 21:23:20.13ID:/QyX6ETP0
>>126
それはILMerge関係なくA.DLL と B.DLL のライセンスの問題です
結合が禁止されていなければ添付して配布するのと同じになります
どんなライセンスかによって違うので
【License】ライセンス総合【利用許諾】
https://mevius.5ch.net/test/read.cgi/tech/1266247461/
へどうぞ

128デフォルトの名無しさん (ワッチョイ 9fb3-TPPA)2018/01/08(月) 21:33:00.91ID:7hYpzMEE0
>>126
> この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
各々のライセンスを確認するしかない

129デフォルトの名無しさん (ワッチョイ 7b17-Ogju)2018/01/08(月) 22:13:04.36ID:ff9XOb220
>>127-128
レスありがとうございます

130デフォルトの名無しさん (ワッチョイ bad2-4vN5)2018/01/31(水) 23:46:33.39ID:3zSQiFnB0
ラムダ式から右辺の情報を取得する事は出来ますか?

.net MVC のソースコードを見ていて思ったのだけど、たとえば razor の Html.LabelFor メソッドは第一引数に
m => m.name などと書いて、引数 m で示すクラスインスタンスの name プロパティの DisplayName 属性の値を
ラベルとして表示していたりします。

ということは、ラムダ式 m => model.name から name プロパティの属性情報を取得しているのだと思うのですが、
どうやってるのかさっぱり分からず。
調べるべきキーワードだけでもいいので、ヒントをいただけませんか。

131デフォルトの名無しさん (ワッチョイ d780-miZj)2018/02/01(木) 01:19:13.10ID:7ACR6glp0
ラムダ式を受け取るメソッドの引数を
Func<String>の代わりにExpression<Func<String>>にしたりする
キーワードは式ツリー

132130 (ワッチョイ 9fd2-K3c3)2018/02/02(金) 00:27:05.13ID:eoTWLp2s0
>>131
ありがとー。
軽く見てみましたが、Expression ってよく分からないですね。。
式ツリーでも、もっと調べてみます。

133デフォルトの名無しさん (ワッチョイ 6eed-nHV3)2018/02/13(火) 16:59:47.00ID:KbLCHvlc0
サイズ、位置が固定されているウィンドウを外部プログラムから移動、サイズ変更する方法を教えてください

134デフォルトの名無しさん (ワキゲー MM8a-/z5x)2018/02/13(火) 20:22:55.89ID:ElvL/+ZbM
とりあえず一般的には
FindWindowやEnumWindowsで目的のウィンドウのウィンドウハンドルを手に入れて
SetWindowPosする
>>133のウィンドウがこれでできるかどうかはそのプログラムの作り次第

135デフォルトの名無しさん (ワッチョイ 6eed-nHV3)2018/02/13(火) 20:56:39.50ID:KbLCHvlc0
>>134
ありがとうございます
それで移動、サイズ変更できないウィンドウをどうにかできないかなと思い質問してみました
ユーザーが移動サイズ変更できないウィンドウでも強引にしてしまうプログラムがあるらしいので、どうしてるのかな?と

136デフォルトの名無しさん (ワッチョイ 2e9a-jA6l)2018/02/13(火) 21:00:42.72ID:00bUqpHu0
>>135
とりあえず直接のC#の話でなくWinAPIなんだからそっちで調べた方がいいと思うよ

137デフォルトの名無しさん (ワッチョイ 6eed-nHV3)2018/02/13(火) 21:21:31.71ID:KbLCHvlc0
>>136
ありがとうございます

138デフォルトの名無しさん (ワッチョイ f7e0-T3WU)2018/02/16(金) 06:01:32.86ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

139デフォルトの名無しさん (ワッチョイ c67a-Uf7X)2018/04/09(月) 14:21:53.70ID:hXBdpr6O0
厳密に言うとC#の話じゃないんだけど
TcpClientでコネクション使い回しというか
開けっ放しでデータ送り切るって出来ない?
flushしてもデータ残っててCloseしないと全部送られない

140デフォルトの名無しさん (ワッチョイ 698a-VY9m)2018/04/09(月) 15:36:40.77ID:Cpp6LEO80
ソースで説明してくれ

141デフォルトの名無しさん (ワッチョイ c67a-Uf7X)2018/04/09(月) 15:51:30.50ID:hXBdpr6O0
そんな複雑な話じゃないんだ
GetStream()でストリーム取ってWrite()するだろ
でもClose()しないとケツのいくばくかはいつまで経っても送られない
断続的に送りたいから、いちいちClose()してからConnect()やり直すとかしないで済む方法あるか知りたい

142デフォルトの名無しさん (ワッチョイ c1fa-zXvJ)2018/04/09(月) 15:59:29.12ID:uvdwBq6N0
NoDelay=true

143デフォルトの名無しさん (ワッチョイ c67a-Uf7X)2018/04/09(月) 16:03:49.46ID:hXBdpr6O0
おおサンクスやってみる

144デフォルトの名無しさん (ワッチョイ ffe7-UPLz)2018/04/16(月) 21:16:34.15ID:f86xegYk0
質問です。

非同期実行について勉強中です。

以下のサイトの内容なんですが、

https://ufcpp.wordpress.com/2012/11/12/asyncawait%E3%81%A8%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E5%88%B6%E5%BE%A1/

ページ中ほどにある
"スレッド プール実行"

"一方、内側は、スレッド プール上での実行になりますが、スレッド プール上のコンテキストではawaitしてもスレッド プール上のどこかで実行されるだけで、決してUIスレッドには戻らなくなります。"
の意味が理解できません。プール上のどこかで何が実行されるのでしょうか?


また、その下の”問題となる書き方の例”

”Task.Runの中のawaitでは、単一スレッド実行にはならないので、lockが必要になることがあります。”

理解が出来ませんでした。

2連続someTask()は同時に実行されるという意味でしょうか?

スレッドは使い捨ての領域だから、
その中で遅延実行しても戻り値は受け取れないよ
だって戻る領域が数秒後も存在しているか分からないからね
って意味だと思う

146デフォルトの名無しさん (ワッチョイ cf80-SL3i)2018/04/16(月) 23:04:11.81ID:qlfABgAK0
マルチスレッドなんて、素人がやるものじゃない。
Ruby を作った、Matz でさえ、何十年もやっていないのに

OS・CPU が今、どのプロセスのどのスレッドの、どの実行コードを実行しているのか、
君のプロセスのスレッドから、わかるわけないでしょ

同期処理じゃないのに。
バラバラに、無関係に動いているのに

逆に言えば、バラバラに動くスレッドの、
現在実行中のコードがわかるのなら、それは同期処理になる

これがシングルスレッドおじさん再登場の瞬間であった

148144 (ワッチョイ ffe7-UPLz)2018/04/17(火) 06:32:51.54ID:/3sDS4fX0
どうもありがとう

149デフォルトの名無しさん (ブーイモ MMff-C98h)2018/04/17(火) 08:18:31.78ID:iJwyhGM3M
シングルスレッドだけで出来る仕事って限られてないか。通信なんか絡んだらマルチスレッド必須でしょう。私の現場は.net3.5なんでback|ground work|er使ってるよ。

150デフォルトの名無しさん (ブーイモ MMff-v/YJ)2018/04/17(火) 08:24:21.80ID:AgNOdAZLM
>>149
taskって4.0からだっけ?

151デフォルトの名無しさん (ブーイモ MMff-C98h)2018/04/17(火) 10:03:57.21ID:iJwyhGM3M
>>150
確かそうです。
taskとか使えると楽なんですが4.0強制もできない案件なんで。

152デフォルトの名無しさん (スップ Sd1f-mjbK)2018/04/17(火) 10:50:32.95ID:EhGIAhyrd
どうしても.net3.5を使わないといけないんだったらRxで処理するわん

153デフォルトの名無しさん (ブーイモ MMff-C98h)2018/04/17(火) 11:51:31.97ID:iJwyhGM3M
おっ!
いいこと教えてもらった。
Rxってsilverlightだけじゃないんだ。

そんなの使えるなら.NET4だって使えるでしょw
3.5が使えて4が使えないプラットフォームは存在しないと思うけど

そういう問題じゃないんだよ・・・

156デフォルトの名無しさん (ブーイモ MMff-C98h)2018/04/17(火) 13:03:19.02ID:iJwyhGM3M
お客様のPCがWindows7ならデフォルトで3.5が入ってるでしょう。4.0にしてから使ってくださいとは言いずらい。

157デフォルトの名無しさん (ワッチョイ cf7a-RWFh)2018/04/17(火) 13:07:10.43ID:rojjHsw+0
ちょっと前までUnityも3.5止まりだったから多少はね?

158デフォルトの名無しさん (ブーイモ MMff-v/YJ)2018/04/17(火) 16:37:52.80ID:joazaAE7M
Rxってなんぞや!!

gugure

160デフォルトの名無しさん (ワッチョイ b39f-C98h)2018/04/17(火) 19:00:52.03ID:F4BOoGzu0
ググれは正論だけど、せっかく話題になったんだからここの住民の意見も聞いてみたい。使ってる人の感想とか。

161デフォルトの名無しさん (ブーイモ MMff-v/YJ)2018/04/17(火) 19:14:49.95ID:joazaAE7M
せや!Rxについて詳しく

全然関係ないけど、receiveの略が何でRxなのか昔から結構謎

163デフォルトの名無しさん (ワッチョイ b39f-C98h)2018/04/17(火) 20:38:22.07ID:F4BOoGzu0
それ組み込みの世界だね。送信ポートはTxだ。スレチだね。

インストールされている証明書の読み取り、エクスポートをやりたいんだけどさ
ググるといろいろ出てきてX509とかってのを使うと良いとある
まだ実装とか全然なんだけど、この情報だけだと不安なのでだれかやったことのある人いない?

X509Cartificate.Exportはバイトデータを吐き出してそのままファイルに保存できるるっぽいけど、秘密キーを設定したいとかあったりしてモヤモヤしてる

165デフォルトの名無しさん (ワキゲー MM42-pKnf)2018/05/03(木) 18:58:35.37ID:+FWBwd0JM
ワッチョイなしスレが1000行ったからこっちをage

166デフォルトの名無しさん (ワキゲー MM42-pKnf)2018/05/03(木) 18:59:21.23ID:+FWBwd0JM
ageられてなかった…

167デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 20:04:32.00ID:hRV05sGM0
windowformアプリケーションで

form1 ディスプレイの解像度等を入力する。入力したデータをもとにform2に表示する長方形の大きさ(rx,ry)を算出
form2 form1で算出した(rx,ry)をもとに長方形を表示

ってしたいんだけど

A. rx,ryをpublicで定義してform2.csから参照する
B. form1のrx,ryを求める計算式をクラスにしてform2からインスタンス生成して求める

のどちらがお作法的に正しいんでしょう?

データとUIを分離するとして、データ保持と計算用のクラス、formは入力のみ、表示のみって感じになるのかな
でも、まぁそんなのAでもBでもいいだろ

関係ないが解像度ぐらい自動で取得してくれると楽

169デフォルトの名無しさん (ワッチョイ 1e81-IfVY)2018/05/04(金) 20:14:46.22ID:QSaueu9Z0
なんとなく、こういうのを"お作法"と呼ぶマにはいいイメージがない

170デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 20:20:22.68ID:hRV05sGM0
>>168
ありがとうございます。
解像度は自動取得なのでディスプレイのoサイズでした。

171デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 20:22:53.75ID:hRV05sGM0
>>169
すいません。
プログラミング初めて勉強なので、なるべくへんなコーディングしないように可読性高くと考えてまして、
普通はどう描くんだろうなというところが気になって仕方ない。
public変数作りすぎると、後でどこかで変に触るとわけわからんことになるのかなと極力使わないように心がけてます。

172デフォルトの名無しさん (ワッチョイ 53b3-wAnw)2018/05/04(金) 20:37:07.58ID:HEa1U9rI0
何かフリーソフトを作ってみたくて勉強しているところなのですが、GUI?を学ぶ上で良い本があれば教えていただきたいです

173デフォルトの名無しさん (ワッチョイ bb65-f8tT)2018/05/04(金) 20:55:12.49ID:L0LZvRGB0
>>171
フォームは入力の受付と出力の描画だけをする
内部で使うデータはモデル側で持つ

174デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 21:33:04.91ID:hRV05sGM0
>>173
それでいってみます。
ありがとうございます。

175デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 21:34:38.54ID:hRV05sGM0
連投すいません。

ユーザー側でフォームのサイズを変えたとしても
常にフォーム右端にボタンを固定する方法ってないでしょうか?

176デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)2018/05/04(金) 21:39:42.44ID:EvkA5vHv0
>>175
ボタンのAnchorのプロパティをTop, Rightに変更

177デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 22:00:01.60ID:hRV05sGM0
>>176
Anchorって設定があったんですね。
できました!
ありがとうございます。

178デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 22:18:10.81ID:hRV05sGM0
Form1で作成したmethod1をForm2で使用したい場合どのようにすればいいのでしょう?

Form1.method1();

だとエラーなのですが、form自体がクラスだからインスタンス生成が必要ということでしょうか?
本当に初歩的な質問ばかりですいません。

179デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/04(金) 23:14:52.98ID:hRV05sGM0
駄目だ煮詰まってきた。

Visualstudioで新規ソリューションを作成して、既存のソリューションからフォームを追加したのですが、
フォームデザインでは新規フォームが表示されているだけ、.Designer.csを除くときちんとコードが記載されているのですが、
[デザイン]:の画面では反映されておらず、この画面でコントロールを追加などするとエラーがでてビルドできなくなります。
フォームの追加の仕方が間違ってるのかなぁ。

180デフォルトの名無しさん (ワッチョイ 274a-8sqF)2018/05/04(金) 23:16:00.99ID:o0wzY09D0
煮詰まる=完成する

181デフォルトの名無しさん (ワッチョイ 1ed3-XJxX)2018/05/05(土) 01:05:27.05ID:i9GeFih30
>>179
エラーの内容は?

182デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/05(土) 08:03:54.33ID:CBIAOUw10
>>181

エラー CS0121 次のメソッドまたはプロパティ間で呼び出しが不適切です:
'InitalMonitorSetteing.InitializeComponent()' と 'InitalMonitorSetteing.InitializeComponent()'

エラー CS0111 型 'InitalMonitorSetteing' は、'InitializeComponent'
と呼ばれるメンバーを同じパラメーターの型で既に定義しています。

です。

183デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/05(土) 08:08:30.21ID:CBIAOUw10
ソリューションエクスプローラーで
追加→既存の項目
でフォーム一切合切を取り込むと
フォームの[デザイン]タブのところで新規のフォームが表示され、これをいじると上記エラーが出ます。
フォームの[デザイン]タブをいじらなければ正常に実行されます。

.Designer.csを見るときちんとコードが書かれているので
[デザイン]と.Designer.csが一致していない状態になっているようです。

184デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/05(土) 08:36:55.68ID:CBIAOUw10
地道に

フォームのデザインすべてコピー貼り付け
コードすべてコピー貼り付け

ってやって追加しました。
なんかネットで見ると、

ソリューションエクスプローラーで
追加→既存の項目
でフォーム一切合切を取り込む

ってやると後々まで得体のしれないエラーに悩まされるので、上の方法を推奨している方がいました。
Visual Studioかフォーム自体の持つバグなんですかね…。

〜VS2015しか使ってないが俺はエラー起きたことないよ。原因分からないけど、何かやらかしてるんでしょ

186デフォルトの名無しさん (ワッチョイ 1e98-5GkY)2018/05/05(土) 09:57:21.01ID:+PUGPCx60
無闇にコピペした結果を環境のバグとか
プログラム向いてないよお前

187デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/05(土) 10:00:36.87ID:CBIAOUw10
失礼しました。
私がよく理解していないために、しなければいけない作業をしていないのかもしれませんね。

むしろしちゃいけない作業をしてるような気がする...

189デフォルトの名無しさん (ワッチョイ 1e81-YjVT)2018/05/05(土) 11:08:14.41ID:T9f+iK/r0
>>178
そもそもこの質問の時点でFormsのコード部分が何をやってるのか理解できてない可能性がある

190デフォルトの名無しさん (ワッチョイ 7f23-x94l)2018/05/05(土) 11:25:44.32ID:qEM4shRT0
いきなり難しいことをやろうとするとダメやね

基礎も身につけずに一端のフリして解決しようとして、半端で折れるバカってのはよく聞く話

とりあえず何か入門書籍に頼って動くものを作れ
話はそれからだ

192デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)2018/05/05(土) 20:20:18.85ID:xedbZMvy0
>>184
情報共有する場所なんだからこういったいいかげんなこと書くのやめてほしいな
まずソースをそのまま取り込みたいのならプロジェクトに追加で何も不具合は起こらない
それでデザイナが反映されないのならDesigner.csを直接書き換え(認識できなくなるような書き換え)やっているはず
あとユーザーコントロールを内部で追加している場合は一度ビルドするとデザイナで反映される
プロジェクトでなくソリューションにソース追加しても当然何も起こらない
最初からふらっとにいけばいいのに

WinFormのデザイナは中途半端に内部実行するからしょっちゅうトラブるんだよな
コンストラクタでなんかやってる奴は特に要注意

194デフォルトの名無しさん (ワッチョイ cf17-jSUp)2018/05/05(土) 22:08:57.94ID:1Zee5iE50
デザイナかどうか判断するコードを書くのは飽きた

195デフォルトの名無しさん (ワッチョイ 1e81-YjVT)2018/05/05(土) 22:38:59.04ID:T9f+iK/r0
そんなあなたに!WPF!

196デフォルトの名無しさん (ワッチョイ 1e96-XJxX)2018/05/05(土) 22:40:45.58ID:CBIAOUw10
フォームをコントロール含めて継承すると継承先でコントロールの編集ができなかったり云々
という書き込みを見たので、
そこで提案されていた新規フォーム作成して
そこにコピペとしてみて結果オーライだったのでそれで良しとしたのですが、
私の方でなにか既存のフォームを取り込むのにまずいことをしてたのかもしれません。
記憶にないけどDesigner.csを直接書き換えしたかなぁ・・・。

フォームで作成するかWPFを使うかを悩んでた時にフォームは放置されたバグが多いと警告されていたので、
単純にバグなのかと思いましたが根拠なくソフトのバグと書き込むのはまずかったですね。
失礼しました。

197デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 07:44:34.64ID:8BI4PAGy0
FormかWPFか悩んでるならWPFを推す。
最初は難しいがXAMLはUWPでも使っていて今後につながると思う。

198デフォルトの名無しさん (ワッチョイ bbb5-MrO9)2018/05/06(日) 15:08:05.14ID:gzoDeGmX0
今後ピクセル単位でのUI作成は完全に無くなるからなぁ

多段継承してるカスタムコントロールはぶっ壊れやすい
Winアプリ作らにゃならんならWPFのがマシってのはまあそうだ
でも将来性あるとは思わんな

200デフォルトの名無しさん (ブーイモ MMc7-80IO)2018/05/06(日) 17:34:01.02ID:ZPoK8KSTM
WPFそのものの将来性はともかくとして、その技術のエッセンスが次代に引き継がれると思うんです。
今後もWinアプリを開発することになるんで、なるべく将来性と言うか潰しのきく技術に投資したいと思ってWPFにしたんだけど。

>>199
それはないよw
継承の段数は関係なくて、単にコントロールのカスタマイズは意外と難しいってだけの話

俺も経験があるけど簡単にシステム側のバグを疑いたくなる現象にぶち当たるけど、
ほとんどの場合はプログラマの理解不足によるユーザーコード側のバグが原因

潰しがきくってんならなおさら独自仕様なんぞあかんやろ
WPF出てから何年経ってるよ
他に採用してるとこないのはそういうことだ

203デフォルトの名無しさん (ワッチョイ 23d2-xC2/)2018/05/06(日) 17:39:54.31ID:YMV7ENjt0
>>202
XAML

>>201
いや正確にはシステムがぶっ壊してるんじゃなく
レイアウト決定だの初期化順番だので罠にはまる確率がガンと上がるって話
コントロール1種を少々カスタマイズしたくらいじゃあんまハマらんさ

205デフォルトの名無しさん (ワッチョイ bf8a-+yEv)2018/05/06(日) 17:43:51.97ID:EPydt9+c0
GDIが使えない時点でゴミ
WPFでCADを提供してみろ

206デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 18:14:23.28ID:8BI4PAGy0
>>202
対案示してくれると検討もできるんですけど。

>>206
オプショナル独自仕様なんぞわざわざ覚えんでもC#だけ抑えときゃいいじゃん

formとwpfどっちかじゃなくて、状況に応じてどっちか使えばいい
言語だってそうだ。c#に拘らず、必要に応じてほかの言語も使えば楽になるぞ
縛りプレイとか馬鹿臭くてやってられん

209デフォルトの名無しさん (ワッチョイ 277b-gjEc)2018/05/06(日) 18:18:35.39ID:gpR98zCG0
何でこのスレ来てるの?

210デフォルトの名無しさん (ワッチョイ bbb5-MrO9)2018/05/06(日) 18:21:30.52ID:gzoDeGmX0
xamlが単なるコードトランレート言語だったなんて知らなかったんだよ。

211デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 18:31:06.82ID:8BI4PAGy0
>>207
まさかの浅い答えでしたね。
今時、なんか開発する時は言語だけじゃなくAPIとかプラットホームとのセットじゃないの?

212デフォルトの名無しさん (ワッチョイ 1ec9-XJxX)2018/05/06(日) 18:36:24.83ID:Yj4OtQcz0
最近form触る機会あったけど、WPFになれた後だとバインディングが面倒でならない
formはformでわざわざ部品探したり作る必要ないから良いんだけどね

213デフォルトの名無しさん (ワッチョイ deed-pRpi)2018/05/06(日) 18:49:36.56ID:c85H7Qr90
Bindingが遅すぎて使い物にならない

214デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 19:05:20.38ID:8BI4PAGy0
なんか変なイチャモン付けてる人いるけど。
CAD作れるかとか、Formならできるの?
Windows、.net、C#でGUIアプリ作るならFormかWPFしかないじゃん。
Formは終わった技術で行き止まり、WPFは普及しなくて過渡的な技術になるかも知れないがその先につながりそうでって言ってんです。
もっと論理的に反論して欲しいです。

215デフォルトの名無しさん (ワッチョイ 03c3-m5Zl)2018/05/06(日) 19:06:34.14ID:lPSPWHr00
昔から居ついてるから一々突っからなくて宜しい

216デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 19:13:48.84ID:8BI4PAGy0
>>215
昔から居てもアホな書き込みすると初学者は惑わされるのよ。
自分が理解出来ない技術はみんなダメって言ってないか?
ちゃんと論理的に反論してよ。
出来ないなら駄まってろ。

formでCAD作ってる奴ぐぐると日本人でも複数いるよ

218デフォルトの名無しさん (ワッチョイ 0e33-Tk2U)2018/05/06(日) 19:17:40.07ID:OZSh5wZJ0
>>214
お前さんみたいな銀の弾丸求める奴ぁ先がないぞ
XAMLは文字列だらけで設計の筋がいいとは到底言えない
もし次があるなら全然違うもん出してくるんじゃないの

219デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 19:21:54.60ID:8BI4PAGy0
>>217
FormでできるならWPFでもできるだろう。
Formの優位性は何?

220デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 19:24:56.35ID:8BI4PAGy0
>>218
XAMLは面倒よ、たしかに。
でもね、オレは使ってないがGUIのリソースエディタがあるんじゃないか?
なくても直ぐにできるよ。

221デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 19:27:17.19ID:8BI4PAGy0
>>218
UWPもXAMLだよ。
MSは当面これでいくんじゃないの。
あんたよりMS信じる。

222デフォルトの名無しさん (ワッチョイ 0e33-Tk2U)2018/05/06(日) 19:34:40.78ID:OZSh5wZJ0
XAMLの筋が悪い一例としてIDEサポートがHTMLにすら劣る点が上げられる
今でも時々vsごと落ちる
まあ次が出る前にWinアプリ自体がオワコンになる可能性も低くないけどな
あんたの人生だから好きにしたらいいよ

223デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 19:44:28.98ID:8BI4PAGy0
>>222
XAMLでの開発3年弱だがVS落ちた経験ないよ。
Winアプリがオワコンになるんだったら、早いとこ他の言語・環境に移行したら?
オレはWinアプリだけじゃなくタブレットとかスマホにも適用できると思ってるから、この道行くよ。

224デフォルトの名無しさん (ワッチョイ 23d2-xC2/)2018/05/06(日) 19:47:05.22ID:YMV7ENjt0
>>222
俺も落ちたことないんだけど、どんな環境で何したん?

225デフォルトの名無しさん (ワッチョイ 1e81-YjVT)2018/05/06(日) 19:59:30.59ID:P5UQ0avb0
WPFはもちろん最良ではないけど
すくなくとも現行のUWPと共通のXAML使ってるぶんFormsよりは十倍マシ

226デフォルトの名無しさん (ワッチョイ 0e33-Tk2U)2018/05/06(日) 20:10:59.67ID:OZSh5wZJ0
メモリ8Gで5段くらいネストした奴編集してたらストンと落ちたぞ
vs2015だ

>>225
「現行では」比較論でまあせやな
将来性は怪しいが

227デフォルトの名無しさん (ワッチョイ 23d2-xC2/)2018/05/06(日) 20:17:33.07ID:YMV7ENjt0
>>226
ハードウェアアクセラレーションの問題ではなくて?

228デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 20:19:15.57ID:8BI4PAGy0
>>226
すごいな。なかなか落とせるもんじゃない。
そんなにWinの将来に悲観的なら、本当にどこかに行ってください。
間違った書き込みを堂々と恫喝的にされると初学者の道を誤らせるよ。
それって罪なことです。
このスレタイでは。

229デフォルトの名無しさん (ワッチョイ 23d2-xC2/)2018/05/06(日) 20:22:22.92ID:YMV7ENjt0
>>228
落ちるときは落ちるさ
こんな風にその問題を追及しないのがアレ
https://stackoverflow.com/questions/31021049/visual-studio-2015-crashes/33182194#33182194

230デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 20:28:51.95ID:8BI4PAGy0
>>229
他の環境はそんなに安定してるのか?
VSが特別に酷いとは思わないけど。
MSデスってなんでここにいるの?

231デフォルトの名無しさん (ワッチョイ 23d2-xC2/)2018/05/06(日) 20:30:40.96ID:YMV7ENjt0
>>230
俺がいつMSをデスった?いつ他の環境と比較した?
ID:OZSh5wZJ0と間違えなさんな

232デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 20:37:41.43ID:8BI4PAGy0
>>231
Winアプリはオワコンって言ったろ。
それより、CAD作ってみろ、って恫喝的に書いたろ。
あのフォローをしてくれ。論理的に。

233デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 20:39:01.49ID:8BI4PAGy0
>>213
ごめん。
人違いだった。

234デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 20:40:12.87ID:8BI4PAGy0
>>233
たびたび訂正ですがアンカ間違えた。
すまん。

235デフォルトの名無しさん (ワッチョイ 0e33-Tk2U)2018/05/06(日) 20:46:08.35ID:OZSh5wZJ0
わかりやすく発狂してんなー
初学者どうたら言うんならもっと普及してるもん押すべきじゃあないの?
言っとくけどC#自体は他でも使われてるからなUnityとか

>>229
毎度再現するんでもないからなー
Formでは一回も落ちたことないからXAML関係が比較的不安定なのはそうじゃないの

236デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 20:58:22.97ID:8BI4PAGy0
>>235
見っともないぞ。
昔からいる古狸かも知れないが、もっとちゃんとしろ。
初学者惑わす書き込みを堂々とするのはやめて、自分の考え披露するのは構わないけど。

237デフォルトの名無しさん (ワッチョイ 23d2-xC2/)2018/05/06(日) 21:16:41.42ID:YMV7ENjt0
>>232
だから俺は違うってばwww

238デフォルトの名無しさん (ワッチョイ 1ecc-ALiW)2018/05/06(日) 21:31:09.89ID:JjviwauC0
アンカさえまともに書けないやつがコード書けるのか?

239デフォルトの名無しさん (ワッチョイ 8f9f-80IO)2018/05/06(日) 21:39:39.84ID:8BI4PAGy0
>>237
ごめん。
ちょっと酔っ払って熱くなった。
もうここらで寝ます。
>>238
ご心配いただきありがとうございます。

わたし錯乱某

241デフォルトの名無しさん (ワッチョイ 7bd6-pRpi)2018/05/08(火) 02:53:46.31ID:EHD0XpOQ0
わい、コンソールアプリしか作ってない

242デフォルトの名無しさん (ワッチョイ 0ad2-xC2/)2018/05/08(火) 03:04:56.28ID:wFWfdcvC0
>>241
.NET Core Global Toolsおもしろいよね

243デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/11(金) 22:56:53.52ID:oqUyZvi20
フォームアプリケーションで

A.初期設定画面
表示する円の大きさ、数、表示座標の範囲などの初期値を設定

B.ゲーム画面
初期設定画面からAの初期値を取得し、メンバ変数に代入して
円を表示する
円を消去する
円の当たり判定をする
などの3つぐらいのメソッドで使用しています。
Bのコードが長くなって200行ぐらいになると、
メンバ変数をどこで使ってるのか全部見なければいけないのは
可読性が悪いのかなと思うようになってきました。
3つのメソッドそれぞれのグループ変数として
それぞれ3つのメソッド内でAの初期値を見に行くコーディングをしたほうが良いのでしょうか?

メンバ変数の方が冗長性はないけど可読性が低くて、
メソッドないのグループ変数にしたほうが冗長性が高いが可読性も高い気がします。

独学でコーディングしているので、お仕事でプログラミングされている方のご意見を伺いたいです。

244デフォルトの名無しさん (ワッチョイ 2565-5o/y)2018/05/11(金) 23:05:04.79ID:KxM4SNOx0
>>243
Aが入出力と, モデルのデータ保持という3役を担っているのが良くない。
出力が本業なので可能ならばそれに特化するが, 差し当たってはデータ保持を分離して別クラス(モデル)に切り出す

245デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 08:19:23.20ID:RvuVG0qm0
Aは
public int GetTimeLimit
{
bool resultOfGetTimeLimit = int.TryParse(this.timeLimit.Text, out int timeLimit);
if (resultOfGetTimeLimit)
  return timeLimit;
else
return 0;
}

が10個ぐらいあるだけで、Aの可読性はいいのですが。

Bのクラスから→Aのインスタンス生成→フォーム表示しているので、

Bが
1. Aからの初期値取得
2. 取得した初期値でゲーム画面表示
3. ゲーム中の処理
4. スコアデータとAの初期値テキストファイルへの書き出し

という4つの異なった処理(特に2,3のコードが長い)をしているのと、
Aのコードの量も400行近くになっているのが可読性低下の原因かと思います。

246デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 08:19:38.98ID:RvuVG0qm0
Bの別のクラスを作って分離させたいんだけどBからAのインスタンス生成しているので、
BAの画面処理に基づいた1234はすべてBに入れることになってるんですよね。

これって画面遷移が良くないってことなのかなぁ?

一般的に1234の処理を一つのフォームクラスに押し込んでクラスメンバ変数10個程度、
400行のコードって可読性の観点から許容されるものなんでしょうか?

チームでプログラミングされているプロの方の意見をお伺いできればと思います。
(長文本当に申し訳ありません)

247デフォルトの名無しさん (ワッチョイ cb81-nFcL)2018/05/12(土) 08:45:11.14ID:KCIDKf2Q0
人の話聞いてないねw
じゃあもう好きにしたらいいと思うよ

248デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 09:11:24.66ID:RvuVG0qm0
>>247
私の説明か理解が悪いのでしょうか?

Aは100行未満のコード245のコードの連続なので簡単に読めます。
Bが読みづらいのが問題なので、Aの機能を分離しても解決にはならないような。

BがAが取得したデータ保持とゲーム内でのデータ処理の二つを担っているのがまずいとのご指摘であれば、
それはそうかと思いますが、データ保持と処理が画面と密接に関係しているので分離し難いというか・・・。

コード全部見せないで質問すること自体に無理があるのかもしれませんね。
すいません。

249デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 09:18:34.84ID:RvuVG0qm0
たぶん端的にこう質問すればよかったのかと思います。

フォームを生成しているクラスのコードが400行、メンバ変数が10個、メソッドが8個、で、
メンバ変数はそれぞれのメソッドで3個ぐらい引用しています。

こういうコードってチームで作業してるプロから見て許容できる範囲でしょうか?
処理が多少冗長になってもメンバ変数を少なくして、メソッド内でグローバル変数として定義するべきでしょうか?

>>248
Aを入出力専門のAViewとデータ保持専門のDataHolderに分離
Bをゲーム画面描画専門のBViewと実際の内部処理を行うGameModel, 各種書き出しを行うWriterに分離

Windowのインスタンスの内部で色々な処理を行うのがそもそも間違ってる
描画と変更の通知以外何もさせるな

251デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 10:01:27.82ID:RvuVG0qm0
>>250
ありがとうございます。
理解できました。

フォーム生成するクラスはフォームの描画、変更に特化

A 初期値入力フォームを生成するクラス
B データを保持するクラス
C ゲーム画面表示クラス
D ゲームのルールに基づいてBを更新するクラス

分かりやすい。
これがオブジェクト指向ってやつか・・・。

252デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 10:07:34.76ID:RvuVG0qm0
自分は成り行きでBの機能の一部をCに放り込んでしまったから、
Bを処理するDも必要に迫られてCに入れざるを得なくなってたんですね。

入門書にあったサンプルプログラムはコード数が少なかったから、
BをCに入れてるものが結構あったので無意識にこんなもんだと思ってました。

こういうのって本では学びづらいですね。
勉強になりました。
ありがとうございます。

253デフォルトの名無しさん (ワッチョイ 059f-YHaA)2018/05/12(土) 11:04:14.67ID:PbE4ojLD0
>>251
それはOOPではなくMVCな。一応。

まぁGUIアプリケーションでのOOPの具体的なアーキテクチャだから

255デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 11:23:13.92ID:RvuVG0qm0
MVCは初耳で今ググって勉強しました。

やはり自分のコードは人と共有できるレベルではなかったですね。
MVCの設計で修正してみます。

手続き型言語しかやってないので、
手続きで処理していって
「なんども同じ手続き出てくるな。」
と思ったらクラスにして分離する思考になってたんですけど、
それじゃだめですね。

こういうのが学べるいい本があったらいいなぁ。

256デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 11:32:37.31ID:RvuVG0qm0
dataHolderクラスってABCDどれからもアクセスすることになるんですが、
パブリックにして、どこからでも読み書きできるようにしていいんでしょうか?

バグの温床になるからダメ?

257デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 11:36:18.82ID:RvuVG0qm0
マイクロソフトのホームページだとPublicにしてますね。

これだとどこからでもすべてのデータにアクセスできるから便利だし可読性もいいけど、
どこかでうかつにdataHolderの変数に変な値を入れると、
どこがバグになっているのか全コード読まなければいけないですね。

うーん・・・。
世の中そんなもんなのか?

>>256
お好きに
結局は書きやすさと安全性のトレードオフ

ガッチガチに書くならgetterだけのImmutableオブジェクトを表すインターフェイスとそれを実装する具体クラスに分離してViewにはインターフェイスだけ教えるとか(あまりやらない)
作る人数とか規模によってどの程度強制するか変わってくるから程よくやるのが重要, 一貫性は重要だが徹底しすぎるとしんどい

259デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 11:57:15.21ID:RvuVG0qm0
>>258
immutableなんてものがあるんですね。
ごく一部の変数以外はimmutableで事足りるから、immutable設定にします。
publicでdataHolderクラス作ってメンバ変数はすべてimmutableにすれば、

可読性、コーディングの利便性、安全性

全部満たせますね。
なんて便利なんだ…。( ゚д゚)

>>259
残念ながらC#では上手くImmutableに出来ない(出来るかもしれないが最近やってないので詳しい人教えて)
TypeScriptとかなら既存の型にReadonlyを再帰的に付けた型が簡単に作れるんだけどなぁ

MVCって、VとCの境界が曖昧になりがちだよな。
ってか、VとCを分ける様な事するからUIが使い辛い物になるんだよな。

>>261
せやな
MVVMとかあるしな

そそ、MVCやMVPってのは、オンラインサービスみたいにデータ管理と画面操作が隔離してる様なコンピュータサービスでなら適してるけど、スマホとかパソコンの中で完結した操作性重視のアプリの設計には適して無いんだよな。

264デフォルトの名無しさん (ワッチョイ 4d9f-VJWb)2018/05/12(土) 12:25:35.08ID:CthSiE230
厳密に言えば readonly と immutable は別
interface で表現出来るのは readonly

265デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 12:57:15.57ID:RvuVG0qm0
残念・・・

bool resultOfGetTimeLimit = int.TryParse(this.timeLimit.Text, out constant.timeLimit);

みたいに定数をフォームから取得できればありがたいんだけどなぁ。
そういう需要ってあんまりないんだろうか。

>>265
何いってるのかわかりません

267デフォルトの名無しさん (ブーイモ MM19-GlfE)2018/05/12(土) 14:55:22.20ID:5EDA9IkjM
それに変数名長すぎ

268デフォルトの名無しさん (ブーイモ MM19-GlfE)2018/05/12(土) 14:55:53.42ID:5EDA9IkjM
しかもbool型に見えない

269デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 17:01:44.57ID:RvuVG0qm0
なんかもうMVCに従って書き直すの不可能な気がしてきた・・・
初めから作り直すほうが早いかも・・・。

270デフォルトの名無しさん (ワッチョイ 23d2-UqMB)2018/05/12(土) 17:16:54.39ID:15xgRckc0
>>269
MVCは基本的にWebだかんね…

271デフォルトの名無しさん (スップ Sd03-Rh4P)2018/05/12(土) 17:19:31.54ID:VhwAlNWxd
設計思想根本から変えるのに小手先の修正で済むわけないよw

272デフォルトの名無しさん (ブーイモ MM19-obfm)2018/05/12(土) 17:32:27.30ID:XEHHkDisM
初心者が勉強のためにゲームプログラムを作るのにMVCなんてナンセンスです。
先ず、何でもいいから動くものを作る。プログラムスタイルはそれからいろんなな本で学べばいい。

273デフォルトの名無しさん (ブーイモ MM19-RhzA)2018/05/12(土) 17:33:18.63ID:oxtjRRByM
まず設計からやり直さないと無理だと思うよ

274デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:06:22.88ID:RvuVG0qm0
頭の中がどぁーっとなってきました。
とりあえずゲーム本体は完成したんですが、一部改変しようとしたらかなりの機能がすべてゲーム画面フォームにくっついてるので読みづらいことこの上ないなと。
データ部分を別構造にしたかったんですが、ほぼ句見直しに近い改変であたまがわやになってます。

275デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:11:39.59ID:RvuVG0qm0
すんごい読みづらいコードなんだけどこのまま進めていいのかな・・・。
とりあえず力業で進めることは可能なんですけど気持ち悪い。

276デフォルトの名無しさん (ブーイモ MM19-GlfE)2018/05/12(土) 18:12:38.37ID:5EDA9IkjM
>>274
で、でたーオブジェクト指向不出来form.cs全部書込奴w

277デフォルトの名無しさん (ワッチョイ 25b5-4FyP)2018/05/12(土) 18:16:14.33ID:XIsYMxrj0
動くコード書ける奴の方が神だからな。
設計どうのこうのなんて、動くコード書ける様になってから理解すれば良い。
何なら作った後で反省的を挙げながらここはこう言う構造の方が良かったんじゃね?
なんてやるのが一番設計の知識ぐ身につく。

278デフォルトの名無しさん (ブーイモ MM19-obfm)2018/05/12(土) 18:23:40.04ID:XEHHkDisM
自分のプログラムが汚いわかりにくいと思ったのなら、あなたはセンスがあるんだよ。
汚いプログラム書いて平気なプロもいるからね。
後はいろんなサンプルプログラムを検索して読んだらいい。あっ、これがいいとか気付きがあると思う。

279デフォルトの名無しさん (ブーイモ MM19-obfm)2018/05/12(土) 18:26:39.51ID:XEHHkDisM
プログラマの能力を試すには書かせるより読ませるのがいいからね。
人のプログラム読めない奴は進歩ないから。

280デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:31:48.49ID:RvuVG0qm0
あれ、根本的なことが分かってないことが分かりました。

B DataHolder
C ゲーム
D スコア記録

CからBのインスタンスを生成
DataHolder dataHolder1=new DataHolder();
すればCのpublic変数aにアクセスするときはdataHolder.a=hoge;とかでいいけど、
DからBのdataHolder1の変数aにアクセスってできるんですか?

CからDにdataHolder1の参照を渡すってこと??

281デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:33:40.32ID:RvuVG0qm0
>>276
全部ではないけどほぼご指摘あってます・・・。
本に書いてある小さなプログラムはほとんどform.csに放り込んでたので、そんなものかと思ってた。

282デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:34:30.46ID:RvuVG0qm0
>>277
ありがとうございます。
今ようやっと設計の大事さを学習しました。
レベル0から0.01ぐらいには成長できた気がします。

283デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:35:15.53ID:RvuVG0qm0
>>280
そもそもこれが分かってなかったから一つのフォーム画面にいろいろ機能を盛り込みすぎたんだと。

284デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 18:37:29.64ID:RvuVG0qm0
>>280

間違いました。

あれ、根本的なことが分かってないことが分かりました。

B DataHolder
C ゲーム
D スコア記録

CからBのインスタンスを生成
DataHolder dataHolder1=new DataHolder();
すればCのpublic変数aにアクセスするときはthis.a=dataHolder.a;とかでいいけど、
DからBのdataHolder1の変数aにアクセスってできるんですか?

CからDにdataHolder1の参照を渡すってこと??

まあなんだよ
今の君に必要なのは鉛筆と紙だ
なんたらチャートのお作法なんぞ知らんでいいから、まずは機能を書き出して丸で囲め
それからどの機能が何処から必要になるかを線引っ張って繋げ
めちゃくちゃ線がごちゃごちゃするだろう?
それをなるべく少ない線で済むように書き直すんだ何回でも

286デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 23:33:51.06ID:RvuVG0qm0
>>285
自分で書いててこんがらがってきますね。
でもまずやってみます。

287デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/12(土) 23:36:15.36ID:RvuVG0qm0
Aフォームのメンバ変数、メソッドを
BCフォームからも使用できるようするにはどうすればいいのでしょう。

Bだけで使用するならB内でAのインスタンス生成→ShowでAフォームを表示させればいいと思うのですが、
Cフォームでも使用するとなると、Cフォームで新たにAのインスタンスを生成するわけにもいかないですよね。

288デフォルトの名無しさん (ワッチョイ cb9a-k37M)2018/05/12(土) 23:44:08.44ID:7v9y2RSd0
>>287
ググるなりして調べた?そろそろ初心者スレでやって
インスタンスを渡せばいいだけなのに

289デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/13(日) 11:04:57.10ID:ySggkKZM0
>>288
すいません。
ググってもよくわからなかったので質問したのですが安易に人に頼りすぎてましたね。

昨夜からわからないところを実際にコードで打ち込んでみて実験重ねて理解できました。
インスタンスの参照渡すって言っても

フィールド渡し
プロパティ渡し
メソッド渡し

と色々方法あるんですね。インスタンスの参照を渡す方法が分かってなかったから一つのクラスに一杯盛り込むことになってたんだと理解できました。

290デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/13(日) 11:06:37.40ID:ySggkKZM0
こういうのってCやってれば常識なんですね。
どこからC#でどこまでCの質問か分からずこちらで何でも聞いていました。

次から初心者板に移動してみます。

でも、みなさんのおかげでだいぶいろいろなことを学べました。
ありがとうございます。

291デフォルトの名無しさん (ワッチョイ 25b5-4FyP)2018/05/13(日) 13:59:35.41ID:23x2pXKw0
〇〇する機能みたいにして、重要だと思う機能ほど大きく書いて相関関係を、ドラマの登場人物の関係図みたいに描いたらなんとなくクラス図の基本が出来上がる。

292デフォルトの名無しさん (ワッチョイ cb96-k37M)2018/05/13(日) 14:41:31.02ID:ySggkKZM0
>>291
ありがとうございます。
クラス図についても勉強してみます。

293デフォルトの名無しさん (ワッチョイ 89fa-9WOx)2018/05/23(水) 19:32:08.48ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

094C5

294デフォルトの名無しさん (ワッチョイ c1f7-Ockd)2018/05/25(金) 17:55:34.06ID:kaJ5fQAg0
あくまでわかりやすくするために分けるのであって、クラスを分けることが目的になってしまってはいけない
余計わからん構造になる可能性があるからね

295デフォルトの名無しさん (ワッチョイ f103-cS+N)2018/05/25(金) 23:51:50.59ID:q1degsPf0
わかりやすくする為にわけるのではない
問題が適切に表現される様に自ずとにわかれるのだ
それが本質的にわかりにくい問題であるならば
わかれた結果わかりにくいのは当然の帰結である
己の能力をわかるまで高めるしかあるまい
わかめ

296デフォルトの名無しさん (ワッチョイ 0181-2S6i)2018/05/26(土) 08:31:56.50ID:Mb7u4pS+0
なんか偉そうなこと言ってる

297デフォルトの名無しさん (ラクッペ MM25-sRwd)2018/05/26(土) 10:29:20.38ID:Qkk0DhfZM
ナイーブすぎ

298デフォルトの名無しさん (ワッチョイ 918d-dk08)2018/05/26(土) 16:16:32.23ID:nVIiMXOl0
桃とアロエのカネボウ

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