X



ふらっと C#,C♯,C#(初心者用) Part137
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ドコグロ MM07-2FKJ)
垢版 |
2018/04/06(金) 17:40:19.48ID:oKXVP34zM
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

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

■コードを貼る場合は↓を使いましょう。
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
0023デフォルトの名無しさん (バットンキン MM5a-u9U1)
垢版 |
2018/04/10(火) 06:59:42.37ID:EnsNk18IM
>>21
インスタンスを作るのとメソッドをコールすることと意識が混ざっている素人で失礼しました

インスタンスを作る時にパラメータを渡すのと、メソッドの引数にパラメータを渡すの、oo的にはどちらが正しいのかお聞きしたかったです
0025デフォルトの名無しさん (アウアウエー Sab2-hYtV)
垢版 |
2018/04/10(火) 12:42:18.35ID:KG4vxU3va
>>24
正直何が聞きたいのかよく分からんけど、
いろいろ想像してみると、たぶん本当に聞きたいことはコンストラクタ云々じゃなくて
あるデータをプロパティとしてオブジェクトに持たせるかどうかをどういう基準で決めるか、
じゃないのかな。

例えばSystem.Timers.TimerにはpublicなプロパティIntervalがあるけど、
これをprivateかprotectedにしてユーザーからアクセスできないようにして、
Startメソッドの引数として与える仕様でも同じじゃないのかと
0027デフォルトの名無しさん (アウアウウー Sa11-lfby)
垢版 |
2018/04/10(火) 23:02:10.41ID:IMFDPHVza
そのパラメーターが変更可能なのかどうかでやり方がいろいろある

インスタンスを作るときに最初に決めたパラメーターを変える必要がないもしくは変えたくないなら
コンストラクタで渡してしまえばいい

毎回変えるかもしれないならメソッドで渡せばいい
0030デフォルトの名無しさん (アウアウウー Sa11-EMs9)
垢版 |
2018/04/11(水) 00:46:06.20ID:qa2FEnRqa
>>26
基本的には全部引数でも間違いではない
あくまで関数が主であって、オブジェクトは関数のコンテキストに過ぎない、と考えるのが今時のプログラミング
端的に言えば、毎回同じ引数を渡すのが面倒だと思うならクラスにすることを検討するというだけの簡単な話
0031デフォルトの名無しさん (アウアウエー Sab2-hYtV)
垢版 |
2018/04/11(水) 00:50:03.90ID:mkq9MyW9a
>>26
いや、プロパティとして持つべきデータかの判断は一般的にはそんなに難しくないはず。
上に例に挙げたTimerだって、Startの引数でIntervalを指定する方式だと
問題や不自然さがあることはちょっと考えれば分かるはず
0032デフォルトの名無しさん (ブーイモ MMea-EMs9)
垢版 |
2018/04/11(水) 01:12:44.96ID:KJoDibHNM
>>31
別に問題も不自然さも無いよ
System.Timers.TimerやSystem.Windows.Forms.Timerのインターバルがプロパティなのは、デザイナで設定できる必要があるからだ
実際、デザイナに貼れないSystem.Threading.Timerはコンストラクタかメソッドで周期を設定する
(ライブラリではなく)アプリケーションの開発に関して言えば、データクラス以外でプロパティを使う必要があるケースは稀だよ
データクラスを除けば、一度設定した値を取り出したくなるのは殆どの場合設計が間違っている
0033デフォルトの名無しさん (ワイモマー MMd9-4k8A)
垢版 |
2018/04/11(水) 01:25:13.83ID:nomvJ3n3M
>>20
・コンストラクタで渡す
var a = new Test(1, "A");

・メソッドで渡す
var b = new Test().SetId(2).SetName("B");

・オブジェクト初期化子で渡す
var c = new Test{
 id = 3,
 name = "C",
};

通常はコンストラクタで、メソッドチェーンはファクトリパターンでよく使う
オブジェクト初期化子は閉じてるクラスの可読性を上げたいときに使う
まあ統一性さえ確保出来ていればどれを選んでも大差ないよ
0034デフォルトの名無しさん (アウアウエー Sab2-hYtV)
垢版 |
2018/04/11(水) 01:44:35.49ID:mkq9MyW9a
>>32
System.Threading.Timerがプロパティを持たないのは何か意図があると思うが
使ったことがないのでよくわからない。(軽量であることが「コンセンプトだから?
あるいんた単に設計者の頭が古いだけかもしれない}

TimerのIntervalをプロパティとして実装しなかった場合。

(1) タイマー動作時にIntervallを変更するためにはStartを実行することになるが、
OOP的に不自然

(2) そもそもTimerオブジェクトは、少なくとも動作時にはIntervalの値を保持している。
だったらこれをプロパティとして公開する方が自然
0035デフォルトの名無しさん (ワイモマー MMd9-4k8A)
垢版 |
2018/04/11(水) 02:01:15.23ID:nomvJ3n3M
>>34
動作中にIntervalの値を変えられると困る場合、
Start時のみ設定可能にするのは別に不自然でもないよ
OOPの目的はメンテナンス性と事前の徹底したバグ潰しだから、値を変更できるルートを予め絞っておくことは理に適ってる
003720 (バットンキン MMd9-u9U1)
垢版 |
2018/04/11(水) 07:04:30.38ID:Q5HB2TyRM
色々とアドバイスありがとうございます
統一性があれば、後はデザパタに従うか等で決定するのが一般的と解釈しました
田舎の中小1人情シスでコードレビューもされないので世間の動向が分からず参考になります

都会の大手の人は切磋琢磨し洗練されたコードを書くんだろうなと憧れます
0039デフォルトの名無しさん (ワンミングク MM5a-1n+P)
垢版 |
2018/04/11(水) 11:00:26.66ID:uvPDHOSBM
>>38
対象を無視してオレオレナントナク基準で決めるほうが我流
物事にはそれぞれ特性があり最適な答えはいつも違う
それを導き出すには都度考えて議論を重ね実験を繰り返すしかないんだよ
0041デフォルトの名無しさん (ワントンキン MM9f-xDE7)
垢版 |
2018/04/12(木) 20:52:33.85ID:bR5mzWUWM
業務系はそれでいいのかもね
保守するのは自分でも自社でもない
ならどんなに汚いコードでも早くしあげたほうが勝ち
ただし納品された顧客はとんでもない借金を背負うことになる
罪悪感ってないのかね
0042デフォルトの名無しさん (ワッチョイ f3e3-78aE)
垢版 |
2018/04/12(木) 21:50:50.18ID:XQKU/nO90
>>41
いや
君のやり方だって怪しいもんじゃない?
具体的に○○さんのコードは見易くてわかりやすいですねって言われた実績あるの?
無いのに勝手な妄想で自分のコードを保守しやすいと思い込んでない?
0050デフォルトの名無しさん (ワッチョイ f3e3-78aE)
垢版 |
2018/04/14(土) 14:59:27.41ID:x6wpDOBa0
作画ソフトを作成したいのですが
解像度より大きな領域を扱うことになりそうです
10%〜800%まで拡大縮小ができて
編集操作を行う必要があるのですが
どのような造りにしたら良いのでしょうか?
自分でスクロールバーを置いて編集領域は自前で描画するのでしょうか?
PictureBoxのようなコントロールでスクロール操作までできてしまうのでしょうか?
0056デフォルトの名無しさん (アウアウウー Sae7-LJHW)
垢版 |
2018/04/14(土) 17:16:13.98ID:A7r7eR+xa
模造紙レベルのでっかいpitureboxで画像のまま編集は現実的じゃないけどね
実際は表示部分だけ都度計算して描画することになる

ドロー系にしてもまあ普通は向いてない
C++でやるような内容だよ
005946 (ワッチョイ f306-zmT2)
垢版 |
2018/04/14(土) 20:40:54.18ID:iGVhaI1m0
すいません、PS4のコントローラをPCに接続して、
入力ボタンを表示したいのです。
006146 (ワッチョイ f306-zmT2)
垢版 |
2018/04/14(土) 23:01:59.31ID:iGVhaI1m0
配置が違うだけなのか。
でも認識させるにはDirectXのラッパーとか使うしか無さそうなのね。
0066デフォルトの名無しさん (ワッチョイ 33f9-LJHW)
垢版 |
2018/04/17(火) 17:42:06.89ID:NEdohK8t0
>>65
Taskだと処理中に割り込み?が割と入ってきて、処理時間が遅延してしまうのです。
スレッドレベルで優先度を上げたいと思いまして。
結局Threadにして優先度を上げても割り込みは入ってくるのですが、多少マシになったような気がします。
0071デフォルトの名無しさん (ワッチョイ 33f9-LJHW)
垢版 |
2018/04/18(水) 10:23:12.22ID:+D/RfByR0
受託案件なのでC#で作らざるを得ないのです。
自分自身はファーム屋なので、マイコンでやりたいんですけどね。

>>70
まだ遅延の原因はわかってませんです
生成時だけの遅延じゃないので、違うとは思いますが・・・
0075デフォルトの名無しさん (ワッチョイ ff7f-RdoA)
垢版 |
2018/04/18(水) 21:09:40.32ID:unjr58vW0
>>71
GCやJITは対策してる?
0076デフォルトの名無しさん (ワッチョイ 8aeb-8q6u)
垢版 |
2018/04/19(木) 18:59:16.22ID:Yr3hu/ey0
ユーザーコントロールのプロパティをデザイン時のプロパティウィンドウでコンボボックスにしたく
人様のサイトで恐縮なのですが、以下をほぼコピペしました。

http://blog.okazuki.jp/entry/20070207/1170820895

が、テキストボックスのままで選択肢になりません。
公開プロパティに、なにか別の宣言が要りましたでしょうか?
0078デフォルトの名無しさん (ワッチョイ 8aeb-8q6u)
垢版 |
2018/04/19(木) 19:48:23.98ID:Yr3hu/ey0
引き続きすみません。

たとえばユーザーコントロールに
Folder
File
という2つのstring型の公開プロパティを用意します。

IDEのプロパティウィンドウからFolderを設定(通常のテキストボックス)すると
そのフォルダ内のファイルを舐めてFileの選択肢にしたいのです。

TypeConverterで、静的な候補が出て選択できるところまでは出来たんですが
動的に候補を変更する場合、どうするんでしょうか。

IDEのプロパティウィンドウに、どうアクセスしたらいいのか、そこが分かれば何とかなる気がしてるんですが。
0080デフォルトの名無しさん (ワッチョイ e7d2-B8Oq)
垢版 |
2018/04/20(金) 05:10:41.06ID:OZAtcLZg0
初歩的な質問で申し訳ないのですが、
戻り値なしのメソッドと、引数なしのメソッドはどういう状況で使用するのでしょうか?

戻り値なしのメソッドは
その後にどこかに代入したりする予定はなく出力が目的の場合に使用すると
読んだのですがその通りですか?
万が一、後で代入したくなった場合に備えて取り敢えず戻り値は設定しておいたりしないのでしょうか?

引数なしのメソッドは
引数がない(=変数宣言がない?)とそのメソッド自体、動いてくれないイメージがあるのですが、実際は動きますよね
何も値を与えられていないのに動くのはどうしてですか?

宜しくお願いします・・・
0082デフォルトの名無しさん (ワッチョイ e7d2-B8Oq)
垢版 |
2018/04/20(金) 06:02:00.71ID:OZAtcLZg0
>>80
例えば
int Add(int a, int b) {
int c;
c = a + b;
return c;
}
というメソッドですと、Add(3, 5)ならaとbにそれぞれ3、5が入りc=8となると思うのですが、
abc = xyz,Add()といった風に使用しても、cの値も何も返ってこないのに、
引数なしのコードを見かける様な・・・
0087デフォルトの名無しさん (ワッチョイ 1aa6-wlRc)
垢版 |
2018/04/20(金) 10:06:30.92ID:9jg3Q7S00
>>86
>>84の説明が間違ってると言いたいんじゃなくて
単純に理解できなかったんだけど誤解させたならごめん

とはいえせっかくだから自分なりに説明を考えてみたんだけど
プログラムを動かすことが目的じゃなくて人間に読ませてアルゴリズムを
分からせることが目的の場合は最終的な結果は必要ないって感じかな?
0088デフォルトの名無しさん (スフッ Sdba-XoVt)
垢版 |
2018/04/20(金) 11:57:10.77ID:DKeEixVwd
>>80
メソッドは外注さんへの作業手順書みたいなもん

引数は、その作業に必要な情報がある場合に外部から渡すための窓口
情報不要なら省略できる
引数なし=こっちから情報渡さなくても作業できるよね?みたいな感じ

メソッド内で作業が完了したあと、なんか返事してほしい場合は戻り値をつかう
返事不要の場合void
戻り値なし=作業さえしてくれたら結果レポートいらね!

メソッドコール(外注さんへ仕事依頼)したら作業はちゃんとされるので、結果のレポートを使って、さらになんか作業をしたいなら戻り値よこせよ!って作業手順書に書いておけばいいし、仕事さえしてくれたら、返事不要なら戻り値いらない
0089デフォルトの名無しさん (スプッッ Sd5a-BoQL)
垢版 |
2018/04/20(金) 11:59:20.85ID:o6RSJKQdd
>>80
コントロールにupdateってメソッドがあるだろ?
これは自身の再描画をするだけのメソッドなんだから引数を取りようがない
また再描画するだけなのに失敗するわけないんだから戻り値もいらない
無理やり成否を返すこともできるが、失敗する可能性があるメソッドに様変わりし、呼び出し元で失敗を意識した実装にしなきゃいけないから負担を強いることになる
って感じかな
0090デフォルトの名無しさん (オッペケ Sr3b-goBS)
垢版 |
2018/04/20(金) 12:23:49.11ID:9v7e203Yr
引数のとりようも戻り値の返しようもなんぼでもあるわ
へんな忖度みたいな真似すんなボケ
0091デフォルトの名無しさん (ワッチョイ 1aa6-wlRc)
垢版 |
2018/04/20(金) 12:38:55.75ID:9jg3Q7S00
>>88
作業が行われればレポートは要らないというのは例えば殺し屋みたいな?
でもコンピューター上でそれを再現するならターゲットもターゲットの生死も0と1のデータなんじゃないの?
だとしたらそのデータはどこに消えるの???

>>89
同じようなことばっかり聞いて悪いんだけど再描画の結果も0と1のデータなんじゃないの?
それがメモリに残らないのに再描画は成功という意味がわからない

>>90
戻り値の返しようがあるというのは返さない選択肢もあるということ???
戻り値を返さないプログラムに人間に読ませる以上の価値があるとすればそれを教えて欲しい
0095デフォルトの名無しさん (ワッチョイ 1aa6-wlRc)
垢版 |
2018/04/20(金) 13:08:12.31ID:9jg3Q7S00
>>92
オブジェクト指向ってやつか!
オブジェクトを使うと結果がない処理にも意味があるってこと?

>>93
まとめるなら「結果がない処理の価値がわからない」って感じかなあ

>>94
詰め込み教育への皮肉だと思うけど正直分かりにくいかも
もし本気で言ってるならさすがに時代遅れだから考え直したほうがいいよ
0096デフォルトの名無しさん (アウアウエー Sa52-PKj8)
垢版 |
2018/04/20(金) 13:26:58.95ID:luJyaFhBa
>>95
経験が足りないために起こる疑問は経験を詰むことでしか解決しない。

構造化プログラミングの意義もOOPの意義も、体感できるのは
実際にコードを自分でコードが書けるようになってから。
本で読んだだけで最初からそれが分かるのは一部の天才だけ。

逆にいえば、>>80の疑問は頭の良い人が考えた難しい理論を理解しないと
解決しないような問題じゃなく、誰でも体験すれば自然と分かる程度の話ってこと
0097デフォルトの名無しさん (スプッッ Sd5a-BoQL)
垢版 |
2018/04/20(金) 13:48:46.74ID:o6RSJKQdd
>>91
0と1?何を言ってるのかわからん
14時に集合ってメール出して、全員からわかったみたいな返信きてもうざいだろ?
だから、14時集合(返信不要)ってメールをおくる方が受け取る側も返信しなくていいし、送る側も無駄な受信を減らせるしでwinwin
この辺りは経験だったりセンスだろうな
0098デフォルトの名無しさん (ワッチョイ 9a06-Mp6C)
垢版 |
2018/04/20(金) 14:03:32.43ID:0EVFmTU60
>>95
成否の観点では単にフィールドの値を設定するメソッドを鑑みても
メモリに書き込み失敗の概念があっても、代入に失敗の概念はない
設定前の値を返すにしても、わざわざ退避する処理を強制するのか?

想定外の発生は基本的に例外をぶん投げるものだし
常人が気にしない様な事を考えて躓いてそうである
0100デフォルトの名無しさん (ワッチョイ fa27-ZOCN)
垢版 |
2018/04/20(金) 20:30:59.54ID:kti4nAgp0
>>95
戻り値がないのは常に「成功」を返す関数と考えて良い
C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない

C言語とかgoみたいに例外という概念がない言語は、成功したかどうかが戻り値に入ってることが多い
それでも絶対に失敗しないか、失敗したらプログラムが強制終了するような処理は戻り値がない場合もある
0102デフォルトの名無しさん (ワッチョイ 9a7f-fvqh)
垢版 |
2018/04/20(金) 21:14:39.58ID:7WlEIf700
>>100
> C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
ケースバイケース。何でもかんでも例外にしちゃ駄目。
0103デフォルトの名無しさん (ワッチョイ 1aa6-wlRc)
垢版 |
2018/04/20(金) 21:42:51.61ID:9jg3Q7S00
>>96
とりあえず>>94が本気なのとそれが思考停止の詰め込み教育信奉じゃないのは分かったよ
偉そうなこと言ってごめん

>>97
自分もちゃんとは理解してないけどコンピューターは0と1だけで動いてるらしい
でも初心者用スレで出す話ではなかったと反省
メール送信の例は分かりやすい!と思ったけど本当に結果が何もないと送信済みマークも付かないのでは・・・?

>>98-102
詳しい人でも意見が割れるくらい難しい問題なのね
>>99は皮肉なんだろうけど意味どころか自分に向けられた言葉なのかも分からないから反応に困る・・・
0104デフォルトの名無しさん (ワッチョイ 9a7f-fvqh)
垢版 |
2018/04/20(金) 21:52:31.13ID:7WlEIf700
>>103
元の発言の「結果が無い」って言葉を勘違いしてる。
関数で処理した結果を返り値と言う形で関数の呼び出し元に伝える必要が無いって意味だ。
ちゃんと意味のある結果は発生している。
0105デフォルトの名無しさん (ワッチョイ fa27-ZOCN)
垢版 |
2018/04/20(金) 22:00:49.23ID:kti4nAgp0
>>101-102
書き方が変だった
C言語やgoと比べて成否を例外で処理することが多いから戻り値がなくても良い場合が多い程度の意味で言った

>>103
メール送信の結果は戻り値ではない方法で返しているというだけ
C#には例外やイベントのように色々な機構があるから、とりあえず細かいことは気にせず先に進んだ方がいい
0106デフォルトの名無しさん (ブーイモ MM26-9jjH)
垢版 |
2018/04/20(金) 22:22:51.74ID:UaVetxYYM
関数という言葉に惑わされてるということかな

メソッドは数学で言う関数そのものじゃない
(y=x+1とかそういうのじゃない)
やることを順番に書いてあるもの
サブルーチン
戻り値が定義されてたそれを返すだけ

ほかの言語で戻り値がないものは関数と区別してる言語もあるけど
わざわざ二種類つくるより戻り値なしで共通にしてある
0107デフォルトの名無しさん (ワッチョイ 9a06-Mp6C)
垢版 |
2018/04/20(金) 23:07:04.14ID:0EVFmTU60
>>103
その辺は想定外と書いたように>>102よろしくケースバイケースだよ
十分想定され例外情報すら要らんなら戻り値で成否を返す事もあるし
InvalidProgramExceptionみたいに言語レベルでは処理できない物もある

話が逸れたけどOSレベルでは例外を発生させる余地などが有ったとしても
プラットフォーム次第になったりと言語レベルで突き詰めない場合は多い
0108デフォルトの名無しさん (ワッチョイ b38a-nSRR)
垢版 |
2018/04/20(金) 23:38:50.80ID:iIb0CR1w0
いろいろ調べたり考えたりしたのですが、解決出来ないので質問します。
https://dotnetfiddle.net/SoCII1
このようなコードがあって
List<ITest>にいれていったときに
ListのXだけを全て足して返す関数は出来たのですが、今後ITestのプロパティは増える予定で、それぞれに足して返す関数をつけたいです。
そのときに似たようなコードになるので一つに纏めようとしたのですが中々できず困っています。どのような書き方をすればいいでしょうか?
0109デフォルトの名無しさん (ワッチョイ fa27-ZOCN)
垢版 |
2018/04/21(土) 02:21:21.95ID:lHgu/nQp0
>>108
基本的にはプロパティを動的に指定するのはリフレクションとかDictionaryを駆使とか、何らかの形でコストを払うことになると思う
状況にもよるけど、コンパイル時に確定してるならT4テンプレートとかコード生成とかで対応するのが一番正しいんじゃないかな
0112デフォルトの名無しさん (スプッッ Sd5a-BoQL)
垢版 |
2018/04/21(土) 07:59:48.29ID:z4AHgN+yd
>>103
メソッドの戻り値とコンピュータの世界は全く関係がない
低級のマシン語をわかりやすくするための高級言語なんで初心者用スレで〜というよりは見当違いなことを言ってる

っで、結果とは低級レベルでの結果とメソッドレベルの結果のどちらをさしている?
低級レベルでの結果が表に出てこないのは普通のこと
メソッドレベルで見てもメールの送信済マークを含めてないのでメソッド戻り値の返さない
0113デフォルトの名無しさん (ワッチョイ b38a-nSRR)
垢版 |
2018/04/21(土) 08:37:04.35ID:i7kmKmol0
>>109
リフレクションについて調べて何とか出来ました!ありがとうございます!
>>110,>>111
もう少し具体的に書いていれば良かったですよね・・・今後質問するときはもっと詳しく書くので、そのときはよろしくお願いします!
■ このスレッドは過去ログ倉庫に格納されています

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