TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
小学生プログラマだけど質問ある
Ruby>>>>>Java
CVS導入スレ〜 Rev.3
推薦図書/必読書のためのスレッド 81
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
C# vs Java どっちが好き? その4
オブジェクト指向ってクソじゃねぇかよPart4
インデントはタブかホワイトスペースか?
いもうとデスクトップを実際に作ってみないか?3
メガデモを語る fr-08

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


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

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.2ch.sc/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part137
https://mevius.2ch.sc/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

2 :
(*゚∀゚)b

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

4 :
前スレ>>999

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

11 :
つか、シリアル通信クラスって標準のがあった気がするけど
それが合わないとしても、それを模倣して作れって言うのが普通じゃないのか

12 :
すいません
回答ありがとうございました
何か揉める原因になってすいません

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

13 :
彼らは病気だから気にしなくていい
いつものことさ

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

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

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

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

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

16 :
>>1読め

17 :
どうでもいい質問ですがvisual studioの初期設定で
C#が中括弧だけで1行使うのはなにか理由があるんでしょうか?
C++他の言語だと最初の中括弧の前では改行しないスタイルの方が多いと思うんですが

18 :
ない

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

20 :
>>17
波動拳みたいでいいだろ?

21 :
>>19
どうも、よく分かりました

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

23 :
俺はブロックが解り易くて良いと思うけどな
縦に長くなるのが嫌だって人がいるのも理解しない事はないが

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

25 :
>>22
C#はコード畳めるんだぜ?

26 :
言いたい事は解るけど、それは言語仕様でなくIDEの機能では……

27 :
あのコード畳める機能って極悪だよな。
もうそろそろ終わりだなぁと思ったら畳まれているコードが数百行隠れてましたとか泣いたよ。

28 :
畳まれてるコードがあって泣くってどういう状態だよ・・・

29 :
どうせ20000行のメソッドとかなんだろ

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

31 :
しなければならないと言った人に聞いてくださいよ
一般的に、決定権がある人が必要ないと判断すればしません

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

33 :
作法というかIDisposableは主にアンマネージリソース解放の用途だよ
OS機能を直接扱うとか、メンバーが使用してるとか。インスタンス解放ではない
むしろ実装の仕方に作法があるのでMicrosoft DocsなりMSDNなりを

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

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

36 :
>>27
行数表示してないのかよw

37 :
コントロールが表示されないのですがなぜでしょう
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/");

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

39 :
どういう考え方をすればできるようになるんだよ!教えろお前ら!!ホラホラホラホラ!!!!

40 :
プロセスゾンビを確実にkillするにはどうすればよい?

41 :
シャットダウン

42 :
kill -9 プロセス番号

43 :
init 0

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

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

45 :
>>37
試してないけど、対応OSで実行してないとか?

46 :
>>44
その言語の流儀に素直に従った方がいいんじゃないかと

47 :
流儀に従うなら、どっちでもいい、では?

48 :
int c = 5;
for(c = 1; c < 61; c++)
{
        //処理
}
Console.WriteLine(c.ToString());

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

49 :
>>48
新規でコンソールアプリ用のプロジェクト作ってそれをコピペして実行してみたら?
処理の中身に問題が無ければ62になるはずがない

50 :
>>48
https://ideone.com/Sr1WXN

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

52 :
>>47
パブリックなAPIかそうでないかによって違う

53 :
>>45
OSのバージョンは問題なさそうなんですよね。

54 :
>>52
え、何が?
{の位置にそんなこと関係ある?

55 :
構造化制御文はインデントされた行を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 :
>>55
if (cond) {
}
と書くのだったら、関数の場合も
int func(int arg) {
}
とするのが統一がとれていいんじゃない?なぜ関数と if 文とで書き分けるのか、その理由がわからない

57 :
その自己主張要る?

58 :
あ、>>57>>55宛てね
宗教論争は他所でやって頂きたい

59 :
メソッドとif文に差付けなくてもインデント違う時点で判別付くんじゃないのか
と思ったが、ローカル関数出てきたんだっけか

60 :
if (cond) statement;

if (cond) call();

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

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

61 :
>>56
それぞれの制御文 (if, for, whileなど) 同士は機能が似通っているが、
関数は全く違うから、見た目も書き分けた方が良い。

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

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

62 :
>>60
1行if文は否定しないし、自分自身も割とよく使うよ。

63 :
>>61
pascal に習う必要はないと思いますが…なぜ pascal を持ち出してきたのでしょうか?
私は関数と if/for/while を別にする必要性はないと思っています
{
}
とかスペースの無駄にみえてしまいます

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

65 :
>>63
Pascalの悪い所、例えば条件を ( ) で囲まないので条件が目立たないのは真似する
必要はないが、良い所は参考にすべきだろう。C#は開発主導者がTurbo Pascalの
作者だったこともあり、Pascalからもいくらかの影響を受けていて、赤の他人ではない。

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

66 :
>>65
>>61
昔のpascalのif 文は
if cond
 begin
  ..;.
 end;
が主流だった気がします
if cond begin
end;
はむしろCの影響を受けているのでは?

67 :
>>54
うん。C#のコーディング規約はあくまでもパブリックなライブラリに関するものだから。
プライベートなものについてはお好きにどうぞって感じ。

68 :
改行コードが構文に影響を与えない言語仕様なんだから、好きにすればいいんだよ。

69 :
pascal流はマジキモイな
func() {
}
if () {
}
else {
}
が一番利に適ってる

70 :
これ以上続けても宗教の違いみたいな話で
なにも建設的なハナシにはならないからここらで終わりにしておけば?

71 :
いくら議論したところで、お仕事なら我が社のコーディング規約で終わっちゃう話だしな

72 :
どうでもいいしキモい

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

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

74 :
>>70
泥仕合にならないかぎり、意義があると思っています、これから泥仕合になるのかもしれませんが…

75 :
エディタとコーディングスタイルの話はしないのが紳士のたしなみ

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

77 :
>>61
ふらっと C#,C♯,C#(議論用)
http://mevius.2ch.sc/test/read.cgi/tech/1469538912/

78 :
>>75
よい習慣をお持ちですね。素晴らしい

79 :
VisualStudio2017 でコンソールアプリケーションを作っています。
System.Windows.Forms.Clipboardクラスを使いたいのですが
ビルドの設定をReleaseにしているとエラーはでないのに
Debugにすると FormsがSystem.Windowsに存在しないといわれてしまいます。
(アセンブリ参照はしています)
どなたか原因分かる方いないでしょうか。

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

80 :
>>79
csprojファイル晒して

81 :
>>80
新しいソリューションを作成してコードをコピペしたら問題が発生しなかったので
とりあえず解決したということにします。

ありがとうございます

82 :
フォームアプリで画面の真ん中に線を引きたいと思って単純に

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

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

83 :
枠無しフォームでやれ。

84 :
>>82
フォームの中央なのか画面の中央なのかまずはっきりしてくれ
スクリーン座標←→クライアント座標の変換を行うには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html

85 :
フォームの中央なのかディスプレイの中央なのかどっちだよ

86 :
自分でもどっちでいいかわからなくなったw
最初単純にフォーム最大化してるんだから、モニタの真ん中が真ん中だろと思ったら、
windowsって下にタスクバーあるわ、モニタの下に非表示領域20ピクセルほど隠れてるわ、フォームにフォームバーあるわで、
モニタの真ん中が真ん中に見えない。
たぶん無意識化でフォームの真ん中が人は真ん中と認識しているので気持ち悪い。
ということでフォームの真ん中にしました。

87 :
>>86
タスクバーの位置なんて自由に変えられるんだけど

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

89 :
フォームバーってタイトルバーのことかな
非クライアント領域もあるぞ

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

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

92 :
デバイスドライバーみたいに処理をチェーンさせるってのもあり

93 :
スクリプト言語のインタプリタなんかでも巨大switchが普通だぞ
断言するが、先を見通せない状況でヘタにコマンドパターンとか入れても、後で横断的な変更が多発して
すべてのコマンドクラスに手を入れて回るアホみたいな作業に追われることになるだけ

94 :
コード増加はともかく予約を変更すんな・・・

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

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

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

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

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

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

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

98 :
固定長なら先頭コード種類分のデリゲートを割り付けるってのもあるが、こればっかしは好みだな。

99 :
ありがとうございます。
ベタベタに書いてみます。

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

100 :
SQLについて質問ですが

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

のINSERT分を

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

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


100〜のスレッドの続きを読む
【QBASIC互換!?】FreeBasic【GPL】 2
C/C++以外の推薦図書/必読書のためのスレッド
スレ立てるまでもない質問はここで 148匹目
米国国防省の標準高等言語エイダ(Ada)を語れ!
くだすれDelphi(超初心者用)その55
小学生プログラマだけど質問ある
なぜ「staticおじさん」は叩かれたのか?
ドルオタワイ、1からプログラミングを学びたい
C/C++の宿題片付けます 170代目
+ JavaScript の質問用スレッド vol.125 +
--------------------
ひろゆき「口先だけじゃなく自ら竹島に行って。渡航費なら出します」 丸山「調査費3億円よろしく」
【水泳】プールで痩せる!第107のコース
◆◆ トリップ/忍法帖はココでテストスレ ◆◆
安倍政権退陣デモに、女子高生「辞めろ!辞めろ!と言って、また政権を担う力もない人に政治を任せる「愚」を繰り返すつもりですか?
◆ ディスカバリーチャンネル 41【Discovery】
スロッターが今期アニメを語るスレPart.76
「若者をスマホから奪還せよ」と叫ぶパチンコ業界の認識のズレ
京都ハンナリーズ27 ダシツクセ永吉
【3DS】妖怪ウォッチ2交換スレ part18
TMNT ミュータントタートルズ総合 4
【みんな】ひとり言していくスレッド159【仲良く
【レギュラー0w】糞以下超低視聴率老害落ち目とんねるず(笑)10【たいむとんねる2.8w】
東海実況 ★ 1123
【韓国】日本らしい嘲弄続くか[06/10] [ハニィみるく(17歳)★]
2019年広島カープ専用ドラフトスレ22巡目
りんごのコールセンターの人集まれ!11
超能力戦士ドリアン
ルマンのスタッフ、富士の帰りにひき逃げで逮捕3
社畜、出荷だオラッ�� [841458676]
【7発も撃つ必要あるんですか?】職務質問から逃げた車に警官が連続発砲で批判殺到必至へ 大阪
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼