[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/29 16:42 / Filesize : 310 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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

■関連スレ
C#, C♯, C#相談室 Part95
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
mevius.5ch.net/test/read.cgi/tech/1520057345/

■コードを貼る場合は↓を使いましょう。
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
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

596 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:18:25.58 ID:QhZTiQlx0.net]
まず終わらせろ、Facebookのにいちゃんも言ってたべな。

597 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:30:10.29 ID:i7PAGBqeM.net]
Facebookにいちゃんが誰かわからんがそいつが言うまず終わらせろ、とお前が考えるまず終わらせろは別物だと思うぞ
ユニットテストとリファクタリング込みでまず終わらせろ、って言ってるならマトモだけど、将来のことなにも考えずまず終わらせろって言うならただの害悪

598 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:32:15.38 ID:23x2pXKw0.net]
>>584
リファクタリングなんか完成した後にバージョンアップする機会があったらやればいいんだよ。

599 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:35:20.07 ID:kDeIpxe/p.net]
将来が有るかどうかなんて、売れてから考えろw
タイムイズマネーだ。無駄なリソース費やしてる暇が会ったら次の案件片付けろ。

600 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:36:03.21 ID:N5R39axQ0.net]
>>585
そうだよね
エッチな絵が一枚も表示されないのにリピーターがいることを想定してる
なんてピンボケもいいとこだよね
割とマジで

601 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:37:25.10 ID:+qfB7sI70.net]
仕様通りの動きだけど汚いコードと
仕様通りの動きじゃないけど綺麗なコード
を同じ時間で仕上げたとして、どっちが優れているかと言えば前者だよな

602 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 20:58:57.32 ID:9JUaags60.net]
>>588
そりゃ仕様満たしていないなら比較以前の問題だわな
仕様満たして完成までの期間で比較とかならともかく

603 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:04:34.41 ID:kDeIpxe/p.net]
まあ、熟練者になれば、素早く仕様通りのコードを綺麗に仕上げて来るからな。
初心者は先ず動くコード、次に仕様通り、最後に綺麗なコードでいいよ。
時間掛かるのはこの際問題にしないw

604 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:04:59.21 ID:N5R39axQ0.net]
リピーターが多い汚いコードと
リピーターが少ない綺麗なコード

後者はゴミだよね



605 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:14:50.20 ID:i7PAGBqeM.net]
世の中の多くのバカが勘違いしてるんだけど

綺麗なコード==間違えやすい製造に時間がかかるコード

じゃないんだよね
綺麗なコードはバグが少ないし製造も早い

汚くても動くコードを早く書け!なんて言ってるやつは根本的に何かがズレてる
そんな方針でコーディングしたら汚くて動かないコードを時間をかけて作る羽目になる

606 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:19:44.86 ID:kDeIpxe/p.net]
洗練された華麗なコードとインデント揃っただけの綺麗なコードを混同してるばか発見

607 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:22:07.78 ID:asXlnx2Ka.net]
>>578
UI(Form)がモデル(何か仕事をするクラス)の参照を持つのは問題ないが、
逆は良くない。理由は、

(1) 役割分担があいまいになる
厨房の人間が1分おきにウェイターに注文を確認するのは適切な役割分担と言えるか?

(2) つぶしがきかない
Formの参照を握ってFormのメンバーを操作するクラスは、UIをWPFやUWPに
変更しても使いまわしできるか?

608 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 21:59:31.92 ID:ySggkKZM0.net]
>>581
一読で理解できる知識がないのですが、勉強してみます。
ありがとうございます。

609 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 22:02:31.19 ID:ySggkKZM0.net]
>>594

UIがデータ格納用クラスのインスタンスを生成
UIがプロパティを介してデータ格納用クラスの変数に代入
UIがコントローラにデータ格納用クラスのインスタンスを渡す

みたいな感じでよろしいでしょうか?

610 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 22:27:53.20 ID:asXlnx2Ka.net]
>>596
>UIがデータ格納用クラスのインスタンスを生成
誰がモデルのインスタンスを生成するかはケースバイケースだしどうでもよろしい

>UIがプロパティを介してデータ格納用クラスの変数に代入
重箱の隅をつつくようだが、オブジェクトのプロパティやメソッドを操作する時に
「データ格納用クラスの変数に代入 」なんていう内部の実装を意識する必要はない。
必要はない、というか意識しなくても使えるように作るのがカプセル化。

>UIがコントローラにデータ格納用クラスのインスタンスを渡す
俺がMVCを理解してないだけの可能性もあるが、少なくともWindows Formでは
VとCを分けたりしないのが普通と思う。コントローラなんてイラネ

611 名前:デフォルトの名無しさん [2018/05/13(日) 23:13:35.13 ID:TUC5Idjma.net]
話蒸し返して悪いんだが、xmlシリアライザーって今使ってるとやばいの?業務アプリの設定ファイルほぼこれで今までやってたんだが。。
とりあえず今やってる案件JSONで見直してみるか
一人で開発やってるとついついこういうのに遅れがちになるなぁ

612 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:15:02.41 ID:F2hiJGIV0.net]
>>598
どんな用途で?

613 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:22:29.79 ID:KKJavIw30.net]
csvとJSONなら圧倒的に後者のがメリットあるけど、
xmlとJSONなら規模がでかくない限りどっちでも良いや

614 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:33:10.62 ID:R40HLbPBa.net]
>>598
業務ドカタ系でJSONなんかほとんど無いから安心しろ
客サイドは情シスですらJSON何それとか平気で言いやがるしOSSのライブラリが必要なのもネック



615 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:37:31.23 ID:OUJCfbgi0.net]
>>600
Excelで編集できるできないって違いもあるのに
どこが「圧倒的」なの?
根拠もない主張を強く推すなよ
願望だろ?お前の

616 名前:デフォルトの名無しさん [2018/05/13(日) 23:38:24.99 ID:PSHb3apy0.net]
PCのiTunesって曲の情報管理全部XMLだよな
どうにかならんのか
https://i.imgur.com/zaooQAM.jpg

617 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:40:15.36 ID:u4TQvgwd0.net]
Ant, Maven とか、Java系は、XML。
Android 画面の設定ファイルとか

Windows でも、XAML で画面設定する

プロジェクトの設定ファイルも

JSON を設定ファイルに使うのは、JavaScript を使ったもの。
例えば、Node.js を含んだ、VS Code

他には、プログラミング言語自体が設定ファイルになるもの。
Ruby, Groovy, Haxe

618 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:48:46.83 ID:i7PAGBqeM.net]
>>598
え?全然やばくないよ
むしろ安定した手堅い選択肢と言っていい
JSONを設定に使う製品はむしろ少数派

619 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:57:11.22 ID:F2hiJGIV0.net]
>>604
>JSON を設定ファイルに使うのは、JavaScript を使ったもの
最近のC#もそうですが

620 名前:デフォルトの名無しさん mailto:sage [2018/05/13(日) 23:57:32.58 ID:OUJCfbgi0.net]
>>598
ヤバイってどういう状況?
殺されるの?

621 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 00:04:35.25 ID:3eK20qHjM.net]
>>606
project構成は不評で結局xmlに戻ったね
ASP.NETのappsettingsはボイラープレートがjsonになってるけどxmlやiniもサポートされてる

622 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 00:05:32.49 ID:wCRTCiuQ0.net]
素のJSONはコメントが使えないので設定ファイルには使い辛い。

623 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 00:17:32.79 ID:gDWY5JTja.net]
川俣さんのことを馬鹿にする人が2chには多いけど、この記事の趣旨は正しいと思う
www.atmarkit.co.jp/fdotnet/extremecs/extremecs_18/extremecs_18_02.html

特定の技術への信仰と「俺スゲー」っていう間抜けな自己陶酔が結びついてる奴ってよくいるし、
このスレにも時々そんなのが出るけど、そういう奴のいうことは真に受けない方がいいですw

624 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 00:18:47.47 ID:Wjyh58JD0.net]
>>608
まあ普通はjson使うがな



625 名前:デフォルトの名無しさん [2018/05/14(月) 07:03:43.68 ID:oC/RgBRx0.net]
つか業務で使うなら余程のことがない限り枯れた技術の方が安定する

626 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 07:06:02.02 ID:Wjyh58JD0.net]
>>612
COBOLとか?

627 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 07:55:56.39 ID:zbYXMED5M.net]
COBOLは実際優れてるんだよなあ
低品質なPGでもほぼ完璧に見積工数通りに仕上がるし、バグもほとんど出ない
金持ちな客からきっちり工数見合いで金取れるならSIerにとってこれほど好都合な言語はない

628 名前:デフォルトの名無しさん [2018/05/14(月) 08:01:56.16 ID:wRU00x5/r.net]
バグでないのはアカンやろw

629 名前:デフォルトの名無しさん [2018/05/14(月) 08:12:24.86 ID:I+nT90nna.net]
それはバグが摘出できていないだけでは

630 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 08:30:53.44 ID:6WkSgDmyr.net]
工数が低減できるかどうかよりも見積が精確にできることの方が管理者にとっては重要ってわけだね

631 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 09:03:36.07 ID:coszmN5L0.net]
バグが出ないに総ツッコミでワロタ

632 名前:デフォルトの名無しさん mailto:sage釣 [2018/05/14(月) 09:45:10.45 ID:tQHKR4rj0.net]
大体この時間にABENDしますって
異常停止をルーチンワーク化して運用している所があったな

633 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 10:05:11.99 ID:TQ68xzma0.net]
現場運用だと稀によくある
開発側がそれを織り込んじゃダメだけど

634 名前:デフォルトの名無しさん [2018/05/14(月) 19:19:28.87 ID:M+KhV3wka.net]
>>598だけど
蒸し返した話にレスくれてありがとう
自分の用途にはxmlでも問題なさそうでとりあえず安心した



635 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 20:12:46.13 ID:CBd8Qc4H0.net]
SVGやMathMLのような外部の名前区間が出てくるとか、Xamlのようにかっちりしたものを書きたい場合はXMLが有利
文字列や数値しか出てこないような簡単な構造ならJSONの方が便利なことも多い。
Trueなのかtrueなのかとか考えなくても良くて、エディタがサポートしてくれるし、エスケープの仕様とかがシンプルで、ファイルも小さい。逆に言うとその程度なのでわざわざ切り替えるほどでもないとは思う

636 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 20:37:51.15 ID:5czuzhWO0.net]
>>597
VCわけないんですか。
うーん・・・。
いろいろな設計方法があるということですね。

インスタンスの生成順として
A→B
A→C
とAからCにBのインスタンスを渡す方法は分かるのですが、

C→A
A→B
とインスタンスを生成した時、CにBのインスタンスを返すことって可能なのでしょうか?

637 名前:デフォルトの名無しさん [2018/05/14(月) 20:54:23.97 ID:g5WxNsfna.net]
デリゲート

638 名前:デフォルトの名無しさん [2018/05/14(月) 20:59:59.56 ID:IVWzojCa0.net]
【マンモグラフィー】おっぱい挟んで癌検査…必要?
egg.5ch.net/test/read.cgi/bio/1517115639/l50
【ペットフード】告発したら3人組に棍棒で襲われた
egg.5ch.net/test/read.cgi/hosp/1517110484/l50
【アマルガム】水銀を歯に? 厚労省『暴動が怖い』
mao.5ch.net/test/read.cgi/doctor/1517058870/l50

639 名前:デフォルトの名無しさん [2018/05/14(月) 21:00:16.16 ID:qPzo5Sk00.net]
>>623
「返す」ことにこだわりがあるのなら結構難しい
そこにこだわらず、単にCからbを扱えれば良いのならa.bでアクセス可能だろう

640 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 21:35:43.16 ID:1pddwh+ma.net]
>>623
何でわざわざ話を複雑にするの?
class C
{
  A a;
  B b;

  public C()
  {
    a = new A(this);
    b = new B(a);
  }
}

例えばこれじゃダメなの?

641 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 21:38:33.33 ID:Ju2ea7rBa.net]
DIコンテナとか諸々のイディオムを知らない初心者だからまぁしゃあない
MVCでもMVVMでもいいからチュートリアル的なものをひとつやっとくとだいぶ違うとは思う

642 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 21:40:59.32 ID:orCVIDzn0.net]
>>626
まず「返す」の意味が分からないんだよな
>>623
何のためにその実装が必要なのか、まずはそっちから
普通は複数の派生インスタンス扱いたいのならどこかでまとめて管理する方が楽
横に伸ばしていくんじゃなく中心から引っ張っていく形

643 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 23:18:38.41 ID:coszmN5L0.net]
馬鹿なこと考えないでジャンケンゲームでも作ってろって

644 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 23:19:52.93 ID:6thsxJoDM.net]
>>623
今時のマルチレイヤな設計ってのは、「汚い場所」をどこかに決めて、そこが依存関係の解決を一手に引き受けるようにするんだよ
で、他の部分は「汚い場所」に直接依存しないようにするの
>>627の例でいうと、Cを「汚い場所」とするならAがCを直接参照するのは良くなくて、
AからCのメソッドをコールバックしたいんだったらインターフェイスを介して呼ぶようにしたりする
汚い場所をどこにするかだけど、フォームアプリならフォームだったり、Webアプリならコントローラだったり
処理の起点となり、かつ、どのみち単体テストが困難な場所を選ぶのが一般的だ



645 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 23:24:11.06 ID:LQsoSslkM.net]
なんだか要領を得ないからわからないけど
Bを操作するメソッドをAに用意してCがA経由でBを操作するのはだめなのか?

646 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 23:36:29.55 ID:0rMMZwm+0.net]
MVC をわかってないような奴に、何も教えられない

まず、無料のRails チュートリアルで、MVC webアプリの設計から学べ

647 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 00:01:41.20 ID:NfuIoln0a.net]
Railsってモデルがフォームの構造に依存するからなあ
あんなのAccessのフォームなんかと同レベルだよ
変な癖がつくから初心者には適さない

648 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 00:21:50.03 ID:joJAW/ym0.net]
>>633
スレチ

649 名前:デフォルトの名無しさん [2018/05/15(火) 06:26:55.76 ID:bIQIvbQJ0.net]
MVVMを理解するには何からはじめたらいいの?

650 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:15:54.13 ID:OnclRViVM.net]
>>636
何から始めても理解できない
分離するどころかやればやるほど結合が強くなる現実に打ちのめされるだけ

651 名前:デフォルトの名無しさん [2018/05/15(火) 07:32:22.06 ID:bIQIvbQJ0.net]
やってみたけど難し過ぎて手に負えなかったってことだね。

652 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:36:31.19 ID:IL2LN/1vM.net]
>>636
Vue.jsあたりかな
XAMLはテンプレートやコマンドバインディングが複雑すぎて本質を掴みづらい
WebのMVVM系フレームワークのほうがずっと見通しが良くてMVVMの本質を素直に実装してる

653 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:43:57.19 ID:dqMabmxz0.net]
まずはUNDOなりマクロを実装するのに何が必要か
考えると、「C」の動きが見えて来るかと思うけどね

GOFの最初の章にも説明はあるよ

654 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:48:40.53 ID:WESx87C+0.net]
>>627
アクセシビリティに一貫性がありませんってエラーが…
internalでインスタンス生成するとOKなんですが、フォームクラスはpublicで宣言してるんですけど。



655 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:52:16.57 ID:WESx87C+0.net]
>>629
ご指摘を受けてメインのフォーム上でインスタンス管理しようとしているのですが、
アクセシビリティの一貫性というエラーが出てきています。

public partial class ExaminationForm : Form
{
public InitialSettingForm initialSettingForm;
public InitialValues initialValues;

で最後の行にアクセシビリティ一貫性のエラーが・・・。
3行目のpublicをinternalにするとエラー消えるのですがなんでだろう。

656 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:56:03.82 ID:jP3S3vDhM.net]
そのビューの入出力項目と隠し項目とユースケースを抽出するだけだよ

ログイン画面だったら
入出力項目として
・ユーザーid
・パスワード
隠し項目は無し
ユースケースは
・ログインする

なので
class LoginViewModel {
public string UserId { get; set; }
public string Password { get; set; }
public void Login() {
// login impl
}
}
こうなる

あとはViewがVMを監視するために変更通知イベントなどを実装しましょう
それだけ

657 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:59:07.77 ID:5QugQ9oMM.net]
>>636へのレスな↑

658 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 07:59:13.31 ID:4jNLOtgZa.net]
>>642
InitialValuesクラスがinternalなんだろ
publicに変えれば意図通りになる
言っちゃ悪いけど正しい設計とか気にするレベルじゃないと思うよ
まずは汚くてもいいから一本何か形にできるようになってから考えればいい

659 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 08:38:53.30 ID:WESx87C+0.net]
>>645
ああああああああ!
そこなのかあああ!

classってデフォルトでinternalになるんですね。
というかinternalって省略されるから気づきませんでした。
ここで半日費やしてたのでものすごく助かりました。
ありがとうございます。m(__)m

660 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 08:42:40.68 ID:WESx87C+0.net]
>>645
一本ゲーム作ったんですが、form1(初期値)、form2(ゲーム)にほとんどぶっこんだオブジェクト指向ほぼ無視プログラムになってしまったので、
ゲーム内のデータ管理とform2だけでも分離しようとして悪戦苦闘しています。

はるか昔にBasicやったぐらいなので、インスタンスの参照渡しとかその辺がうまく実装できなくて・・・。
勉強用に買った本にもインスタンスの参照渡しなんて全く書いてないし・・・。(´・ω・`)

661 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 08:47:43.78 ID:WESx87C+0.net]
あれでも

//インスタンス生成
InitialValues initialValues = new InitialValues(); 
//インスタンスの参照渡し
initialSettingForm.InitialValuesPointer = initialValues;

としているのに

フィールド”InitialValues"は割り当てらせません。常に規定値nullを返します。

となります。
実際にnull値が入ってるようで、initialSettingFormにインスタンスの参照は渡せていない模様・・・。
newしてるのになんで割り当てられませんと出るのでしょう??

662 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 08:55:56.96 ID:WESx87C+0.net]
//インスタンス生成
×InitialValues initialValues = new InitialValues(); 

this.initialValues = new InitialValues(); 
でした。すいません。

663 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 09:03:30.06 ID:WESx87C+0.net]
>>648
すいません。ゴチャゴチャしてた変数名整理したらエラー消えました。。。
お騒がせしてもうしわけありません。

664 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 09:34:05.49 ID:IdD83PdN0.net]
>>647
C++ 以外のすべての言語で、インスタンスの参照渡しだろ



665 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 10:42:46.03 ID:WESx87C+0.net]
>>651
初代MSX-Basicでゲーム作ってた頃以来のプログラミングなので(;^_^A

666 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 10:47:12.03 ID:WESx87C+0.net]
アホな質問ですが、
Class InitialValue
に初期値を全部詰め込み、必要であればコントローラから参照しているのですが、
インスタンスの参照をinitialValueとすると
initialValue.StartPointX+hoge
などインスタンスの参照がくどくて読みづらい。
いっそiVとかしたいのですが、自分にしかわからない省略は良くないと聞いたもので・・・。

initialValue.StartPointX
initValue.StartPointX
iV.StartPointX

どれが読みやすいコードでしょうか?

667 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 12:29:44.99 ID:2i/hB9LUM.net]
>>653
どれもダメ
initialValueをそのまま使わずに設定値を使うクラスにコピーして

668 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 13:05:19.58 ID:WESx87C+0.net]
>>654
えええ!

データはデータクラスで一元管理じゃないんですか?
そうしないとフォームなどからデータクラスを変更した時に、
コントロールクラス側で

669 名前:その通知を受け取って
もう一度データクラスからコントロールクラスにコピーする仕組みが必要になってきますよね。
[]
[ここ壊れてます]

670 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 14:10:34.54 ID:l7Fk1Hkl0.net]
自分がアホだと分かってる割には自分の判断を信じてるのな
アホ草

671 名前:デフォルトの名無しさん [2018/05/15(火) 14:32:03.09 ID:bP9crr2Q0.net]
勉強のためにプロが書いた大きなプログラムを見たんだが
変数が全部4桁英数字でランダムに発生させてるような文字列だった
僕ら初心者には「これ何の変数だっけ?」と分かりにくいだけなんだけど
大きなプログラムだと万が一、変数がダブったりするのを避けるためにそうするんですかね?
変数一覧表かなにか作るんですか?

672 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 14:38:53.82 ID:WESx87C+0.net]
>>656
いや、最初はコピーする仕様だったんですが、
データクラスで一元管理をするアドバイスを受けて変えたところです。

コピーするんなら元の仕様のままでよかったのかということに。

673 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 14:54:54.48 ID:oubZzl5I0.net]
>>657
変な変数名は難読化されてるだけ

674 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 15:26:01.82 ID:UPWhPqGh0.net]
>>657
当然だよ。変数使うには課長級の決済が必要。変数管理台帳ファイルに全部記録されている。



675 名前:デフォルトの名無しさん [2018/05/15(火) 17:20:29.21 ID:nA4SMkbe0.net]
>>659
そうか、公開用にリファクターしたのかな
いちいち一覧表見ないと何処につながってるか見えないなんて不便だもんね

676 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 18:44:33.69 ID:Fj6Vms3Xa.net]
>>658
変数名が妥当かどうか聞いてるんじゃなかったの?w

そのInitialValueとやらのクラスを使う実装方法が妥当かどうかは実現すべき仕様を誰も知らないので
誰にも分からないと思うよw

ローカル変数の命名に関しては、型名InitialValueをそのまま変数名にしても
何をやってるのか理解できるような文脈なら変数名をivにしても同じことでしょう。
だったら短い方がいい。

ただしローカル変数でも説明的な名前の方が適切な場合もあるので馬鹿の一つ覚えはダメ。
情況に応じて柔軟に

677 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 19:35:30.36 ID:9ix52upSr.net]
>>660
初心者が真に受けるからやめれ

678 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 10:08:34.12 ID:5p+fPd0U0.net]
int[] intData = new int[10];
int intThread = -3; // 閾値
int intCount = 0;
for (int i = 0; i < intData.Length; i++)
{
if (intThread >= 0)
{
if (intData[i] > intThread)
{
// 処理
intCount++;
}
}
else if (intThread < 0)
{
if (intData[i] < intThread)
{
// 処理
intCount++;
}
}
}

閾値がプラスとマイナスで条件式を変えたいんだけど、
中の処理が一回で済む書き方ってあります?

679 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 10:48:11.15 ID:6eYS9/+hd.net]
=を含まない条件式。
そして閾値というキーワード。

まとめない方がいいよ。

680 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 11:18:13.11 ID:XvxRw+U50.net]
>>664
せめてCountメソッドにしとけと思うぐらい。

681 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 11:47:06.88 ID:B7aMvtuba.net]
>>664
単に同じ処理を2回書く無駄をなくしたいだけなら&&と||を使って
条件式をまとめるだけ

if((threshold >= 0 && x > threshold) || (threshold < 0 && x < threshold))
{
  ....
}

値が不変のはずのthresholdの符号をループで毎回評価する無駄が許せないなら
Func<int, bool> predicate = x => x > threshold;
if (threshold < 0) predicate = x => x < thredhold;
....
if (predicate(x))
{
  ....
}

682 名前:デフォルトの名無しさん [2018/05/16(水) 12:22:33.98 ID:CHLBL3ILa.net]
async/awaitって呼び出しのネストが深くなると、大元の

683 名前:呼び出しで波線が立ってすごくもどかしいんですが、気にしなくていいでしょうか?それとも呼び出しのやり方を見直したほうがいいのでしょうか []
[ここ壊れてます]

684 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 12:29:36.06 ID:+dukoeHCd.net]
>>668
ネスト関係なくね?



685 名前:デフォルトの名無しさん [2018/05/16(水) 13:23:25.14 ID:v6bC0eDAM.net]
>>664
カウントをCountメソッドにして引数に突っ込むラムダ式を閾値によって切り替える

686 名前:662,666 mailto:sage [2018/05/16(水) 14:23:23.94 ID:mC1mbnpn0.net]
ごめん。Count以外の処理もあるんだね。おらの回答は無視してくれ。

687 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 14:55:11.81 ID:c5ZU3C2K0.net]
dataGridViewのデータソースをBindingListにしています。
この時にデータの絞込を実装する方法はあるのでしょうか。

688 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 19:51:48.39 ID:oU1pyBE30.net]
>>668
波線が立つのは単にasyncなメソッドをawai付けずに投げっぱなし呼び出しの警告出ているだけじゃないのか
>>669の言う通りネスト関係ない

689 名前:デフォルトの名無しさん [2018/05/17(木) 00:16:57.84 ID:OeNqnCBl0.net]
すいません。ちょっと教えてください。

//Form1にて
Form2 f = new Form2();
f.show();
this.visible=false;

としてForm2を開いて、Form1を非表示にします。
//Form2にて
Form1 f = new Form1();
f.visible=true;
this.visible=false;

としてForm1に戻った場合、先程form1で入力した内容が消えてしまいます。
form1の内容を消さずにform2からform1に戻る方法を教えてください。

690 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 00:28:09.71 ID:yjgdFlmp0.net]
>>674
Form1 f = 「new」 Form1();
新しいForm1を作ったんだから前のはVisible=false;のままで表示されていない
例えばこうする
//Form1にて
Form2 f = new Form2(this);//Form2のコンストラクタの引数にForm1の参照を渡す
f.show();
this.visible=false;
//Form2にて
private Form1 form1;
//コンストラクタ
public Form2(Form1 f)
{
InitializeComponent();
form1=f;
}
//戻る処理
form1.Visible=true;
this.Visible=false;

691 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 00:35:36.78 ID:hTaKG8n8a.net]
>>674
目の前の問題を解決するよりまずインスタンスとは何かちゃんと理解した方がいいねw

692 名前:デフォルトの名無しさん [2018/05/17(木) 00:41:03.31 ID:OeNqnCBl0.net]
ありがとうございました。
大変助かりました。

693 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 00:45:08.18 ID:hTaKG8n8a.net]
もっと簡単にこれでもできるよw

var f2 = new Form2();
f2.Shown += (s, ev) => Hide();
f2.ShowDialog(this);
Show();

694 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:26:49.89 ID:GnA4tN+Fi]
アプリ全体の設定について、設定変更画面を作ろうとして、まずは設定そのものを1つのクラスにまとめることを考えた
そんで各設定項目を public get, private set にしようと思ったら
設定画面クラスからは各設定項目プロパティの値を書き換えられなくって困ったんだが
これってどうしたらいいのかな
コンストラクタに引数渡して各設定項目を設定することも考えたけど、
設定項目が20こほどあるからそれはやりたくない

プロジェクト分けて設定画面を別アセンブリにしてpublic get, internal setにしないといけないんかな



695 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 21:40:59.40 ID:Kw1Q24F60.net]
class Program
{
TargetOpe targetOpe = new TargetOpe();
static void Main(string[] args)
{
Target [] target= targetOpe.InitializeTarget();
Console.WriteLine(target[1].x);
}
}

Target [] target= targetOpe.InitializeTarget();の行のtargeOpeで
静的でないフィールド、メソッド、またはプロパティ 'Program.targetOpe' で、オブジェクト参照が必要です
のエラーがでます。
newしてるのになんででしょう?

696 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 21:46:08.12 ID:xJtGZ4kt0.net]
>>680
静的メソッドだから

697 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 23:37:38.13 ID:03oIkg7y0.net]
C#初心者です。
ある変数のその時々の値によって呼ぶメソッドを変えたいため初歩的にifやswitchで分岐させていたのですが、毎回分岐させるのもどうかと思い変数が変わるタイミングでデリゲートに代入して呼び出す方法を試してみました。
しかしながらパフォーマンステストを行ったところ、10程度の条件分岐であればifでメソッド呼び出し >>> デリゲートで呼び出しという結果でした。
速度を重視しつつ動的に呼び出すメソッドを変えるという場合はデリゲートではなく毎回条件分岐を行ったほうが良いということなのでしょうか?

698 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 23:45:29.87 ID:xJtGZ4kt0.net]
>>682
どんな用途で?

699 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 23:47:12.44 ID:fnhXcK68M.net]
>>682
どうでもいい
そんなミクロなレベルの速度が問題になることはない
IO一つで跡形も無く吹き飛ぶ

700 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 23:49:51.73 ID:8WFSeAEB0.net]
くだらねーパフォーマンスとくだらねー暗号化の話題が大好きだよな

701 名前:デフォルトの名無しさん [2018/05/18(金) 01:57:49.78 ID:3OrmdyFD0.net]
パフォーマンスは重要だよ
だけど、そんなのを語る以前に、コンピュータの仕組みについての素養を極端に欠く人が多すぎるんだよ
最近のC#入門書はよく出来ていて、大抵の本が最低限の仕組みが知識が身につくようページを割いて解説してるわけだけど・・・・分かっていない人ほど読み飛ばすんだな
その結果、コンピュータの仕組みからしたらとてもありえないことを言い出す高卒様が出来上がるんだ

702 名前:デフォルトの名無しさん [2018/05/18(金) 02:22:20.29 ID:tl8rJsN/0.net]
>その結果、コンピュータの仕組みからしたらとてもありえないことを言い出す高卒様が出来上がるんだ

ありえないことなんてないだろ。頭硬すぎじゃねーの。「コンピュータはこうあるべきだ」とかに縛られてると新しい発想のソフトが生まれない。

703 名前:デフォルトの名無しさん [2018/05/18(金) 02:48:57.75 ID:3OrmdyFD0.net]
新しいものができたってのならいいけど、言うこと為すこと高卒様じゃあ・・・・

704 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 03:11:25.94 ID:eSpLSQVO0.net]
>>682
条件次第なのでなんとも言えない
インライン展開とかCPUのキャッシュとかまで関わってくる可能性がある

気にしなければいけないほどパフォーマンスを気遣うなら、JITの結果を比較したほうがいいけど、多くはそこまでするほどではない



705 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 04:39:51.09 ID:rO+HsCUo0.net]
デリゲート使ってる時点で初心者じゃないだろw

706 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 07:16:45.92 ID:tpc+hoQ/0.net]
>>690
いや、初心者がググった知識で背伸びしてるんだろ

707 名前:デフォルトの名無しさん [2018/05/18(金) 07:25:31.73 ID:40IvU0mB0.net]
デリゲートとラムダ式ってちゃうの?

708 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 07:56:30.88 ID:mGKF1mXv0.net]
>>681
ありがとうございます。
私アホでした。

709 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 08:01:25.12 ID:mGKF1mXv0.net]
public class TargetOperation
{
Target[] target = new Target[Constants.MaximumNumberOfTarget];

public Target[] InitializeTarget()
{
for (int i = 0; i < Constants.MaximumNumberOfTarget; i++)
{
target[i] = new Target();
target[i].x = 100;
}
}
return target;
}

710 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 08:05:21.79 ID:mGKF1mXv0.net]
最後の行で
クラス、構造体、またはインターフェイス メンバーの宣言でトークン 'return' が無効です。
です。
またアホなことをしてそうな気がしますが、昨夜からわからず・・・。

711 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 08:09:16.96 ID:WjwLG2oV0.net]
>>694
}
}
return target;
}
じゃなくて
}
return target;
}
}
じゃね

712 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 08:15:13.01 ID:SuBLVM61M.net]
>>682
サンプルコードと結果貼れよ

713 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 08:34:05.30 ID:Yy5wJYpea.net]
デリゲート使うくらいならストラテジパターン使うけど

714 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 09:57:58.57 ID:crDPuGzZM.net]
>>688
こんにちは猿の学校卒様



715 名前:デフォルトの名無しさん [2018/05/18(金) 22:42:24.82 ID:6iumh9Vb0.net]
DataGridViewのセルのValueを取得すると、既定の型がObject型なんですが、既定の型をstringに変更する方法はありますか?
今はConvert.ToStringで変換してるんですが、記述数が多くなりすぎて参ってます。

716 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 22:48:37.44 ID:/dMxgLqhM.net]
As string

717 名前:デフォルトの名無しさん [2018/05/19(土) 01:23:31.00 ID:5ZvwKnWja.net]
C#初心者でフォームアプリを作っているんですが
例えばあるクラスAが非同期で外部機器を延々ポーリングしていて、トリガーが発生したらクラスBの処理を行いたいといった場合
・クラスAにクラスBのインスタンスを渡して、クラスBのメソッドを呼び出す
・クラスAに宣言したデリゲート(evemt?)にクラスBのメソッドをコールバック関数として登録し、クラスAはデリゲートを実行する
どちらが一般的なコーディングなんでしょうか
後者だと複数実行したい処理があるとかなり冗長な気がするんですが、他にセオリーあれば教えて頂きたいです
よろしくお願いします

718 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 01:32:36.76 ID:VIvIbG0Fa.net]
女?

719 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 01:53:30.54 ID:ZECHChrda.net]
>>702
前者
デリゲートは現段階で呼び出し先が定まってなくて後でアドホックに処理を差し込みたいときに使うも
最初から呼ぶ相手が決まってるならそんなまどろっこしいことをしないで直接メソッドを呼べばよい

720 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:13:21.77 ID:FwiHY2dca.net]
>>702
騙されちゃダメwww
そういうのはイベントで実装する。

何故か?
前者で作っちゃったら、その外部デバイスをポーリングしてるクラス(普通はそのデバイスの名前を付けると思うけど)、
前者で作っちゃったら他に流用できないよ

721 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:22:01.39 ID:6pEEqPiCM.net]
>>705
YAGNI
もしそれが必要になったらそのとき変更すればいい
そして、ほとんどの場合において結局必要にならない
職業プログラマじゃないとアプリのコードを目にする機会って少ないから、
.NET Framework自体のクラスのような不特定多数向けの設計を真似してしまいがち
一般に、アプリケーションプログラミングにおいては無駄な拡張性は極力組み込まずに必要最小限のコードでコンパクトに実装するのが正解
そのほうが結果的に変更時のコストも小さくなるよ

722 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:27:56.45 ID:FwiHY2dca.net]
>>706
YAGNIなんか関係ない
アホか

必要もない仕様変更を想定して寛容に複雑にするのは愚かだが、
抽象度の高い(つまり汎用性も高い)方のクラスにより具体的(つまりそのプログラムでしか利用できない)クラスの
参照を持たせて依存させるなんてもっと愚かだ

723 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:32:39.74 ID:6pEEqPiCM.net]
>>707
自己矛盾してるね
依存させるのが何故愚かだと思う?
理由は、「必要もない(質問者のレスにない)仕様変更を想定しているから」に他ならないだろ

724 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:38:49.87 ID:FwiHY2dca.net]
>>708
たぶん言っても無駄な人だと思うけど、普通はViewをModelに依存させるように作るのであって
ModelをViewに依存させない(Modelの参照をViewが持ってはダメ)なのと同じ。

こんな基本が分からない奴が回答する側に回ってはダメだと思うw



725 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:40:16.65 ID:FwiHY2dca.net]
>>709
いかん酔っぱらって逆を書いちまったw

× (Modelの参照をViewが持ってはダメ)
〇 (Viewの参照をModelが持ってはダメ)

726 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:40:41.00 ID:6pEEqPiCM.net]
あと、仮に>>705の想定が正しいとするなら、抽象化すべきはクラスBではなくAの方でしょ
例えばAのデバイス依存部分だけをIDeviceインターフェイスとして切り出して委譲するとかね
Aにイベントを持たせるんだと、別のデバイスを監視するクラスCができたら
AのイベントとCのイベントをそれぞれ個別にイベントハンドリングしなきゃいけなくなる
ちゃんと頭使おうね

727 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:47:51.94 ID:6pEEqPiCM.net]
>>710
揚げ足取るようで悪いけど、Viewの参照をModelが持つこと自体は何の問題もないよ
というか、そう

728 名前:オないとMからVへの変化通知が実現できない
イベントを使うにしても結局参照は持ってるよ
MVPといって、IViewのようなインターフェイスを通してMからVを呼ぶパターンもあるね
なるべく疎にしたいのは型同士の依存関係の話で、参照するのがダメなわけじゃない
[]
[ここ壊れてます]

729 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 02:58:10.85 ID:FwiHY2dca.net]
>>711
そういうのをYAGNIっていうんだよw
本当に何もわかってないねお宅w

730 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 03:03:16.45 ID:FwiHY2dca.net]
まあ質問者の>>702に言うけど、実際書いてみれば
イベントで実装した方がずっとコンパクトかつ可読的に書けることが分かると思うよ。

Bが仮にAでしか利用しないクラスだとしても、普通はAはイベントを発行するだけ、
Bはそのイベントを受信して何か処理をする、ってやった方がずっと分かりやすい

731 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 03:21:21.26 ID:ZECHChrda.net]
メソッド一つだけならイベントでもいいけど、少なくとも>>702はメソッドが複数あるときもあると言ってるんだからイベントは不適切でしょ
インターフェイスで纏めたほうが扱いやすい
あえてそこにインターフェイスを噛ませる必要があるかどうかはYAGNIの問題だが、それとはまた別の観点の判断だ

732 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 06:03:27.91 ID:uNgfR/HH0.net]
プログラムで使用するテキストデータを、excelで管理しています
closecXMLを使ってアクセスしていて、これ自体は無事に実装できました

テストが一通り終わって、テキストデータも確定したので、データの散逸や
改ざんを防ぐために実行ファイルに埋め込みたいのですが、リソースとして
取り扱うことってできないでしょうか

具体的には、

workbook = new XLWorkbook(filename);

として開いているところがあるのですが、このfilenameにリソースファイルの
名前を当てることができないのか調べています

string filename = "Properties.Resources.textdata.xlsx";

としてアクセスできれば簡単だと思っていたのですが、そうはいきませんでした

733 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 06:14:14.58 ID:gOuRua2dM.net]
ユーザー定義リソースは何でも書けるよ。

734 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 06:37:08.02 ID:uNgfR/HH0.net]
具体的にどういう手順を踏めばよいのでしょう?
excelデータは1,000行以上あるので、取り込みではなく手入力が必要だと
ちょっと切ないです
でももう修正しないもの(修正するとしても部分的)ですから、機械的に
データを移行できるのであればそれでも問題ありません



735 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 07:47:44.04 ID:gOuRua2dM.net]
静的に呼びだすなら5つのAPI
FindResource()
LoadResource()
SizeofResource()
LockResource()
FreeResource()
動的に更新するなら更に3つ
BeginUpdateResource()
EndUpdateResource()
UpdateResource()

736 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 07:53:26.18 ID:z3BmCHYgM.net]
>>706
こういう奴が頻繁に現れるのを見るとYAGNIの罪は大きいなって思う

737 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 07:55:26.69 ID:7BFPa/Jf0.net]
別に複数でもそんな多くなければイベントでも問題ないんじゃねぇかな

738 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 08:03:52.08 ID:uNgfR/HH0.net]
>>719
ありがとうございます、それぞれのAPIについて調べてみます

739 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 08:13:32.92 ID:7BFPa/Jf0.net]
結局バランスの問題だな。もちろん人によってバランス違うけど。
イベントによって結果再利用性あがるけど、
>イベントで実装した方がずっとコンパクトかつ可読的に書けることが分かると思うよ。
の通り、可読性の観点からしてもイベントの方が分かりやすいと思う。

これぐらいもYAGNIとかいってるようじゃ、極端すぎてバランス感覚おかしいんじゃねぇかな。

740 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 09:36:48.03 ID:ZECHChrda.net]
>>723
極端なのは君だと思うぞ
まさかクラス間の依存関係に全部いちいちイベントを噛ましてるってわけではないよね
その上で、この例において特にイベントを使うのが適切だと判断した合理的な根拠は?
少なくとも>>702のレスからはそれを具体的に読み取れないから、根拠のない仮定に基づいた無駄な拡張性だと言ってるんだけど

741 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 10:02:26.30 ID:35k9lSzB0.net]
>>696
( ゚д゚)
ありがとうございます。
その通りです。
一晩見直したのに気づかなかった・・・。

742 名前:デフォルトの名無しさん [2018/05/19(土) 10:47:04.32 ID:zmVeGZ3Ia.net]
>>702です
みなさん色々なご意見ありがとうございます
基本的にはイベント等で疎結合にしたクラス作りが望ましいが、ケースバイケースで状況に応じてどちらの実装でも問題はないといったところでしょうか
レスして頂いた内容は非常に参考になり、まさにその両者のいい分で自分もどちらが最適解なのか悩んでいましたが、結局状況を判断出来る私が決めて実装するしかないのかなと思いました
途中インターフェースをかましてすれば良いとのレスがありましたが、どういった実装をすればいいのか全くわかりませんでした。この方法でも検討してみたいので、すみませんが具体的な実装を教えて頂けないでしょうか

743 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 11:44:50.68 ID:mNRmauI8a.net]
>>726
interface IAlert {
void Set(Severity severity);
void Unset();
}
たとえば、あるアラートに対してこういうインターフェイスを定義する
クラスAはこれをコンストラクタで受け取り、温度センサーの値が閾値を超えたら危険度に応じた引数でSetメソッドを呼ぶ
温度が低下して閾値を割ったらUnsetを呼んで解除する
このIAlertインターフェイスを、具体的な実装、たとえばパトランプを操作するクラスが実装するわけ
こうしておけば、
パトランプじゃなくて画面でアラート状態を表示したくなったときにAに手を入れずにIAlertを実装するだけで済む
もちろん、パトランプしか想定しなくていいなら直接パトランプクラスのメソッドを呼んでもいいし、Unsetが必要ないならイベントでもいいかもね
ただしイベントの場合はBからAへの密結合が発生するとか、それを避けるなら追加で橋渡しのコードが都度必要になるといった懸念点もある

744 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 11:49:58.15 ID:F9kKaYLV0.net]
>>700
拡張メソッドでも定義すれば



745 名前:デフォルトの名無しさん [2018/05/19(土) 12:01:43.59 ID:hl18fyg5a.net]
>>727
早速ありがとうございます
ちょっとまだピンときませんが、じっくり検討してみたいと思います

746 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 12:20:10.98 ID:35k9lSzB0.net]
BASICしか経験がないど素人がC#始めたんだけど、
クラス間の参照の受け渡しというのが難しいです・・・。

クラスの参照を配列に入れて、それを受け渡しするとか動くコードはなんとかかけてるんだけど、
自分で一体何をしているのか分からなくなる時がある。

747 名前:デフォルトの名無しさん [2018/05/19(土) 13:04:35.48 ID:uWI+Vuzc0.net]
>>730
真っ先に直さなきゃならないのは、「スコープの広い配列にインスタンスを入れておけば、どこからでも全てのデータにすぐにアクセスできていいじゃん!」と思っちゃう点でさあ
C#のスキルの無さから設計までメチャクチャにしてるんじゃないのかねえ

748 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 13:15:00.73 ID:m/ZPa8pNM.net]
BASIC系って悪い習慣を覚えちゃうよね
特にVBAはひどい

749 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 13:27:26.49 ID:m/ZPa8pNM.net]
>>727
それだと温度センサーがアラートをコントロールしているように解釈される
常識的に考えてアラートのコントロールは温度センサーの仕事ではないだろう
これは名前の問題であってインターフェースよりイベントを使えと言ってるわけではない

750 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 14:08:44.26 ID:35k9lSzB0.net]
>>731
その通りです。
すべての変数をどこからでもアクセスしたい衝動にかられます。

Aのクラスの機能がA1とA2に分化できるから分けようと思うと、
AはCを参照してたからA1とA2両方にCのインスタンス参照を渡そうとなり、
結局機能は分けれたものの、どのクラスがどのクラスを参照してるのかがよくわからなくなってきました。

751 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 14:11:58.71 ID:35k9lSzB0.net]
値1、2個を渡すのは簡単なんですけど、
クラスのインスタンスを100個つくるためにその参照を配列にいれる
参照の入った配列をreturnで返す
とかしてるとなんの値をいじってるのかわけわかめです。

これまで値と参照の区別をして思考してこなかったからなのかなぁ。

752 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 14:31:05.11 ID:m/ZPa8pNM.net]
>>735
オブジェクト指向で参照を共有することは少ない
共有するとしてもイミュータブル、ステートレスにして共有によるデメリットを消した上で共有する

長時間生存するインスタンスがあちこち参照しあって状態を刻々と変化させていくような設計が最悪のパターン

753 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 15:29:17.89 ID:7BFPa/Jf0.net]
>>724
それは君が経験値不足なだけ。>>702である程度は想像できる。

754 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:13:13.77 ID:t/qQFhE80.net]
休みだってのに暇な奴ら



755 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:13:20.90 ID:35k9lSzB0.net]
>>736
なるほどCを参照しているA1、A2はCと独立したオブジェクトじゃなくなってしまいますものね。

756 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:20:14.69 ID:35k9lSzB0.net]
Target[] target = new Target[Constants.MaximumNumberOfTarget];

public Target[] InitializeTarget()
{
for (int i = 0; i < Constants.MaximumNumberOfTarget; i++)
{
target[i] = new Target();
target[i].x = 100;
target[i].y = 100;
  }
}

こういうふうにForm1のクラスでターゲットの座標100個発生させて表示させます。

757 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:23:28.77 ID:35k9lSzB0.net]
ターゲットをクリック出来たら消す
一定時間クリックできなかったら点滅させる
ゲーム終了後にターゲットの座標をテキストファイルに書き出す

などの処理がすべてForm1上に存在することになるのですが、
それでもいいのでしょうか?
これらの作業を無理にクラスに分けようとすると
ターゲットクラスインスタンスの参照100個を渡さなくてはいけなくなります。

758 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:41:59.05 ID:H4w+h7ji0.net]
そんなミニゲームどう組んだっていいよ

759 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:44:12.66 ID:5aQMcYYW0.net]
>>741
何が駄目なのかわからない
何か縛りプレイしているのならその前提から出してもらわないと
たとえば特定のデザインパターンの勉強が目的だとか

760 名前:デフォルトの名無しさん [2018/05/19(土) 16:55:29.90 ID:uWI+Vuzc0.net]
どうせこの人は一生治んないよ
ただプログラムなんてちゃんと動けば目的達成できるんだし、まあ、これでも良いんじゃないの

761 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 16:56:47.37 ID:F+BrwfqWa.net]
listやdictionaryを使ってないのかな

だったらまだそのアプリを作る段階まで届いてない

762 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:10:27.25 ID:UwdEx54W0.net]
まあ普通はエンジン部分だけ切り離すわな

763 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:20:42.40 ID:35k9lSzB0.net]
target class
にx,y,timeなどメンバ変数7個程度を入れてます。
このターゲットを表示するためForm1上にクラスのインスタンスを参照する配列を置くと、
表示とゲームのコントロールすべてがForm1上におくことになって見苦しいのかと思いました。

でもテトリスとか他のミニゲームみても同じような設計になってるんですね。
無理して別クラスにするよりもtargetクラスの配列に関連した、表示、ゲーム処理はForm1上に置いてみます。
(というか実際に配列を別クラスに切り分けたら、余計読みづらくなった・・・)

764 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:22:57.84 ID:35k9lSzB0.net]
>>743
縛りはなかったのですが、見やすいコードということを考えすぎてました。
まずは動くコード書いて、人の書いたプログラムも見ながら勉強していきます。



765 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:23:58.19 ID:35k9lSzB0.net]
>>745
最初Dictionay使うつもりだったのですが、
構造体かクラスに変数をまとめたほうがよさそうだったので今の形になりました。

766 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:27:35.68 ID:9OoA3M8l0.net]
>>741
何故そのような結論になるかわからない提示された仕様からだとテキスト出力クラスを作ろうって気になるかな
targetの渡し方はコンストラクタやメソッド引数にするかは自由

Hoge hoge = new Hoge();
bool Output(){
hoge.Set(target);
return hoge.Output();
}

767 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:28:05.32 ID:m/ZPa8pNM.net]
>>747
複数のTargetを管理する専用のクラスを書くんだよ
Formが全てのTargetを管理するのはオーバーワークだろ

768 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:30:56.31 ID:TbcarOIZ0.net]
>>734
貴様にはpublicを禁止する呪いを掛ける

769 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:45:50.05 ID:m/ZPa8pNM.net]
それは呪いではなく祝福であった

770 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 17:52:30.85 ID:F+BrwfqWa.net]
そしてinternalを使い始めた!

ゴミグラマの出来上がり

771 名前:デフォルトの名無しさん [2018/05/19(土) 18:14:06.88 ID:RoboUWmL0.net]
と、すでに出来あがったゴミグラマが申しておるようですが

772 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:20:19.09 ID:35k9lSzB0.net]
>>751
はい。
それやってみたのですが、フォーム2から初期設定値を初期値格納クラスに入れていて、
初期値格納クラスの参照、Targetクラスの参照、Targetクラス管理クラスの参照が入り乱れて書いている自分でもわけわかめになりました。
二つのプログラムを見比べた結果Form1でTarget管理させたほうがまだましなのかと・・・。

もっと規模の大きなプログラムだと違ってくるのかもしれないのですが。

773 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:39:40.28 ID:H4w+h7ji0.net]
>>756
小さいの組み合わせてでかいの作るんだから
でかいと組み方が変わるなんて言ってるやつは
そもそも下手クソなんだよ

774 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:44:17.10 ID:m/ZPa8pNM.net]
>>756
入り乱れないよ



775 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:44:51.84 ID:t/qQFhE80.net]
素人が責務に応じたクラスの分割を理解するなんて
一朝一夕どころか数ヶ月単位の時間が掛かると思うが、このやり取りそこまで続けるの?

776 名前:デフォルトの名無しさん [2018/05/19(土) 18:46:55.05 ID:RoboUWmL0.net]
>>759
素人でも初心者でもわかる奴は最初からわかってるけど?
むしろ数ヶ月も時間をかけてわかって気になってるおまえが何もわかってないよ

777 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:48:37.83 ID:m/ZPa8pNM.net]
>>759
理解しやすい構造になるわけだから素人も安心

778 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:49:08.43 ID:t/qQFhE80.net]
>>760
猿には聞いてねえから飼育員さんとママゴトしてな

779 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 18:51:06.08 ID:t/qQFhE80.net]
>>761
んでいつまで続けるの?
ウザくなってきたからスレ潰しするのもいいかなと思ってる

780 名前:デフォルトの名無しさん [2018/05/19(土) 18:54:14.32 ID:RoboUWmL0.net]
バカ、スレ潰し宣言wwwww
これはさすがの俺も意表をつかれた度と超えたバカwwwww

781 名前:デフォルトの名無しさん [2018/05/19(土) 20:59:50.70 ID:gCADl0W/M.net]
C#のスレだと思ったのに。

782 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 21:13:55.60 ID:35k9lSzB0.net]
リストボックスの値を取得するのって

string Gender = this.Gender.SelectedItem.ToString();

の一文だけじゃだめなの?
なぜか値が取得できない。

783 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 21:17:27.89 ID:BEl4Etk9a.net]
あたまがくらくらする

784 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 21:28:02.54 ID:sYzD4mGA0.net]
>>766
まず「Gender」が2つ出てくることに違和感はないのか
ListBoxは使ったことないけど
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.listbox.selecteditem(v=vs.110).aspx
string GenderStr = this.Gender.SelectedItem.ToString();
にでも変えれば動かないか?



785 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 21:30:21.29 ID:35k9lSzB0.net]
>>766
すいません。
自己解決しました。
大分疲れてきたようです。
寝ます・・・。

786 名前:デフォルトの名無しさん mailto:sage [2018/05/19(土) 21:32:29.68 ID:35k9lSzB0.net]
>>768
すいません。
ご親切にありがとうございます。

値を出力するクラスにwriteline書き忘れてました・・・。
値の取得は上のコードでOKでした。

朝から一日プログラミングして悪い頭が限界を超えているようです。
今日はもう寝ます。

787 名前:デフォルトの名無しさん [2018/05/19(土) 21:34:12.28 ID:RoboUWmL0.net]
教えたがりのバカ>>768の立場wwww

788 名前:デフォルトの名無しさん mailto:sage [2018/05/20(日) 16:52:01.54 ID:O/HF5kqh0.net]
>>719
いろいろ調べてみましたが、私が探している解決策とは異なったようです
一番知りたいのは、埋め込みリソースに対し、通常のファイルアクセスのように
アクセスする方法はないのか、という点です
(XLWorkbookのコンストラクタには、ファイルパスを与えますので)
今回のデータは参照のみ必要ですので、リソースとして埋め込んだ場合に
変更が効かなくなっても問題ないと考えました

712で書かれた内容は、「自分でファイルフォーマットを定義して、それを読んで
切り貼りするコードを自分で書くべし」、ということでしょうか
そのために有用なのが714のAPIということですか

789 名前:デフォルトの名無しさん mailto:sage [2018/05/20(日) 18:41:56.82 ID:9fk8EC6VM.net]
ないよ
一回テンポラリファイルに出力すればいい
使いたいライブラリがストリームを受け取るバージョンをサポートしてるならそっちを使ってテンポラリファイルは要らない

790 名前:デフォルトの名無しさん mailto:sage [2018/05/20(日) 19:32:08.73 ID:QOdmSKaj0.net]
やったことないけど
これは動かないの?

https://support.microsoft.com/ja-jp/help/319292/how-to-embed-and-access-resources-by-using-visual-c

791 名前:デフォルトの名無しさん mailto:sage [2018/05/20(日) 19:59:07.95 ID:O/HF5kqh0.net]
>>773
ありがとうございます
少し調べてみた限りですと、closedXMLはストリームからの読み込みはサポートして
いないようなので(当然の気もしますが)、テンポラリファイル等別の手段を考えます

>>774
「リソースにアクセスしたい」ではなく、「ファイルにアクセスするメソッドにリソースを
渡したい」でした
768のおかげでそのまま実現するのは無理とわかりましたので、疑問としては解決です

792 名前:デフォルトの名無しさん [2018/05/21(月) 08:06:02.24 ID:yxdsvVjy0.net]
Json保存すると漢字が化ける。なぜばけるの? Jsonの問題なのか、StrreamReader
の問題なのか、StrreamWriterのもんだいなのか? 取り合えず、Read、Writeともに
shift_jisでEncode指定したら化けないようになったが、意味がよくわからない。
 普通に考えるとStringにShift_JIsが入っていて、それを認識しているなら、Read
WirteにShift_jisを指定する必要はないと思うのだ。だからStringにはそういう情報は
入ってない筈だ。ファイルにSHiftJIsの属性がはいっているなら、Write側だけに指定
すればよいはずだ。ReadにもSHIFT_JISを指定しなければならないということはファイルにも
その属性は保存されていないということだ。Stringに属性を保存しておけばすべて丸く
収まるとおもうのだが、なぜそうしないのだろうか?

793 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 09:30:17.64 ID:HN6x0Zrba.net]
文字列の実装には内部的にUnicodeで扱うものとバイト列として扱うものとがある。
前者は入出力時にそれぞれバイト列->UnicodeとUnicode->バイト列をどのようにマッピングするか(i.e. エンコーディング)を指定する必要がある。
後者であればその必要はない。
一方で前者は外部から文字列を読み込んでも内部的にはUnicodeだから読み込んだ文字列に対して処理を行う際に文字コードに悩む必要はない。
後者はプログラムを書いている時の文字コード, 入力された文字コードを常に意識せねばならん。
一長一短だからどっちの実装もあり得るが.NETは内部Unicodeが標準的だということだ

文字列自身に自分のエンコーディング情報を埋め込むのはやめておけ
禄でもないことにしかならん

794 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 10:54:12.62 ID:wG0UA8oX0.net]
JSON はJavaScript だから、UTF-8

Ruby, Python もそう。
ネット上に流れるテキストも同じ

SHIFT_JIS を使う言語は、まずない。
PowerShell も、UTF-16

ここ数年は、Unicode に統一された。
それ以外の、SHIFT_JIS, EUC-JP は使わない



795 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 12:22:48.67 ID:ZMitaTGGM.net]
>>778
何言っても通じないとは思うが、お前の愛するRubyの文字列の扱いは他と異なっている
Rubyの文字列は内部的にはエンコーディング情報を持ったバイト列だ
特にWin環境では非常にトラブルの原因になりやすいゴミ仕様である

796 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 12:34:00.26 ID:wG0UA8oX0.net]
Ruby は各文字列に、エンコードを持てるから、すごい

例えば、文字列a がSHIFT_JIS で、b がUTF-8 として、

a + b
みたいに、文字列を連結すると、エンコードエラーになる

797 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 12:36:23.24 ID:ZMitaTGGM.net]
>>780
うん。何一つメリットのないカス仕様だね。

798 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 12:50:56.22 ID:0W5b/XyUM.net]
>>775
ClosedXML.Excel.XLWorkbookコンストラクタにはStream取るのもあるんだけど

799 名前:デフォルトの名無しさん [2018/05/21(月) 13:22:41.39 ID:yxdsvVjy0.net]
>SHIFT_JIS を使う言語は、まずない。
エクセルファイルをCSVにEportしたファイルだけど、
var sr = new StreamReader(fs, Encoding.GetEncoding("shift_jis"))
これでなら正常に読める。ということはエクセルはshift_jisだと思うが、、

800 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 14:04:00.83 ID:hRf5uVYXM.net]
とりあえずそのRubyアスペに触るのを止めて

801 名前:デフォルトの名無しさん [2018/05/21(月) 15:12:20.28 ID:yxdsvVjy0.net]
>一方で前者は外部から文字列を読み込んでも内部的にはUnicodeだから読み込んだ文字列に対して処理を行う際に文字コードに悩む必要はない。
>後者はプログラムを書いている時の文字コード, 入力された文字コードを常に意識せねばならん。

前者はDefault unicode
後者はDefault bytecode
ということであれば、shift_jisなど他にもたくさんの文字コードが来る可能性があるのだから、コードを意識することにあまり違いはない
と思うが、、

>>780
その考え方の方が正しいと思う。
そもそもunicoeをディフォールトにするんだったら、漢字はそのまま表示できるんじゃないの?
其れなのにXcelは何でわざわざSHIFT_JISをつかうんだろ。

802 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 15:24:30.40 ID:wG0UA8oX0.net]
Windows も内部的には、UTF-16 だろ。
PowerShell, ブラウザも、UTF-8

保守費用が掛かるから、MS も、SHIFT_JIS を辞めたいはず

Excel など、長年使っている人が多いから、やめられないだけ

803 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 15:43:54.89 ID:s3jYOwAha.net]
>>785
Stringのエンコーディングが固定なら、IOのときだけ文字コードを意識すれば済む
素人のちょっとしたツールのレベルならともかく、一般的にはIとOの間(P)の部分がプログラムの殆どを占めるんだよ
Dictionaryのキーの文字コードが混在してて、存在するはずのキーの検索に失敗するとか悪夢だろ

804 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 21:17:05.23 ID:83cG7/bYM.net]
ビルドしても、ファイルできなくて意味わかんねえ



805 名前:デフォルトの名無しさん [2018/05/21(月) 22:02:39.74 ID:o82N7H0r0.net]
>>783
Excelは言語じゃない。
日本語版のExcelのCSV出力時の文字コードがShiftJISなのは単に過去との互換性のため。
ちなみにBOMが付いていればUTFのCSVでも読み込める。

806 名前:デフォルトの名無しさん mailto:sage [2018/05/21(月) 22:04:28.66 ID:ZCJ7EsPBa.net]
漢字が文字化けするのは保存した文字コードと読み込んだ文字コード指定が違うから
それだけ
つまりやった側の間違い

どこで間違えたか手順を順に見直すべし

807 名前:デフォルトの名無しさん [2018/05/21(月) 22:11:44.14 ID:KnpxsRSU0.net]
やった側ってどの側だよw

808 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 00:01:50.29 ID:1gACj0o60.net]
sqliteとの連携に関して質問です
なんらかのクライアントで先にテーブルを作り、レコードもinsertしておいて、それを読み込むプログラムを作りたいのですが、既存のdbファイルはどこに配置すればよいのでしょうか
デバッグしてみたらno such tableと言うようなエラーが出たので、どうやら実行時に新たにdbファイルを作ってそれを読もうとしてしまっているようです

809 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 00:20:52.78 ID:V2R/cizEa.net]
>>792
どこもクソも決めるのはお前
SQLiteはDBのファイルパス指定して開けるだろ
SQLiteは普通のDBMSと違って、システムのどこかに共通のデータストアがあるみたいな考え方をしないんだよ
ファイルを名指しするのが基本

810 名前:デフォルトの名無しさん [2018/05/22(火) 03:32:12.88 ID:MRvdbbs3M.net]
Accessのmdbみたいな感じかいな?

811 名前:デフォルトの名無しさん [2018/05/22(火) 06:38:16.66 ID:GCRmPVlZ0.net]
>>790
「文字コードなんて意識する必要はない。機械に任せたほうがいい。」とは考えないのだろうか?
そもそもテキストとは文字コードによって表現された文字の集合体だ。テキストを保存するIOに
たいしてわざわざ文字コードの情報を削除して保存するのは何故なのだ。正気の沙汰とは思えんな。

812 名前:デフォルトの名無しさん [2018/05/22(火) 06:43:45.86 ID:GCRmPVlZ0.net]
>Dictionaryのキーの文字コードが混在してて、存在するはずのキーの検索に失敗するとか悪夢だろ

文字コードなんて本質的なことじゃない。だから混在してもかまわない。
それを人手でやろうとするから「混在する悪夢」が発生する。
そういう場合にこそ機械に自動的にやらせるべきだろう。

813 名前:デフォルトの名無しさん [2018/05/22(火) 06:51:24.64 ID:GCRmPVlZ0.net]
>日本語版のExcelのCSV出力時の文字コードがShiftJISなのは単に過去との互換性のため。
>ちなみにBOMが付いていればUTFのCSVでも読み込める。

互換性のためならもっとほかの方法がある。アプリのためにコードを弄るなんて最悪の方法だろう。

814 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 07:58:03.61 ID:j6MjsmBId.net]
>>793
あざすぅ



815 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 09:20:46.86 ID:uYoKmc1Q0.net]
ここにきて.NET CoreがWPF, Windows Formsを救済ってか

816 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 09:31:30.78 ID:7LgkrdmnM.net]
>>795
>>796
>>797
屁理屈言っても誰にも認められない
x=x+1は式としておかしいと言い張ってプログラムが全くできなかった人がいたけど
その人と同じ

文字コードがいろいろあるのは仕方ない
それぞれの都合で整数に文字を割り当てる方式がちがうので文字化けする
文字コードの情報というものがそもそもないので削除なんてしてない

自動判定は単なる憶測にすぎない
その自動判定だって誰かが書いたコードが判定してるんであって
機械に任せると言うのは言ってることがおかしい

817 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 10:37:32.58 ID:svO22mue0.net]
public double Re { get; set; }
ってプロパティを省略して書くと見やすくていいんですが、
他クラスから参照するだけの変数だと、
Reは使用されていませんって警告がずっと出てうっとうしい。
何かいい手はないでしょうか?

818 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 10:37:46.91 ID:np9ncSKga.net]
別に文字列を文字セット/エンコーディングごと抽象化するライブラリとか作ってくれて良いのよ?
既存文字列と互換性があって使い勝手, 拡張性と統一性と性能が担保されるなら普及もするだろう

でも曲がりなりにもそれ続けられてるのってRubyくらいで他に思い浮かばない
なんで無いのかと言うけど試されてないわけないんだよ, 現実的じゃないから普及してない

819 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 10:58:36.99 ID:sxJmXMb80.net]
>>801
{ get; private set; }
とか?できないんだっけ?

820 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 11:14:09.28 ID:7Riaak3V0.net]
WPFで
WindowStyle="None"
AllowsTransparency="True"
Background="#01FFFFFF"
でほぼ透明だけどマウスイベントを受け取るウィンドウを作ったのですが
これとおなじことをFormでやりたいのですがやりかたがわかりません
どのようにすればいいですか?

821 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 11:23:07.15 ID:svO22mue0.net]
>>803
できると思います。

データ格納フォルダB:Aフォームから値を取得
Cクラス:Bから値を取得
となってるのでsetもpublicでないと困るんですよね。

データ格納フォルダBの値はAから値取得した後なにも処理がないので、
「Reは使用されていません」って正しい警告なんですけどねぇ。
格納しているデータが10個あって警告10個もでるとさすがにうっとうしい。

822 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 12:14:32.87 ID:CqasDiEMM.net]
>>795
BOM付きのUTF以外は、文字コードの情報なんてものは最初から存在しない。
また、文字コードの自動判別も完璧ではなく、場合によっては全く判別出来ない。

823 名前:デフォルトの名無しさん [2018/05/22(火) 12:16:10.65 ID:O9GDwfVPM.net]
BのコンストラクタにAからの値を受け付けて
public readonly double Reに渡すとかじゃだめなんね?

824 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 12:36:59.84 ID:2EZjLjzja.net]
>>804
Formはウィンドウ全体のアルファはOpacityで指定できるけど、
背景だけ透過させるとかは簡単にはできなかったような
yellow.ribbon.to/~azumaya/doc_dotnet_uplayeredwnd.php

>>805
そもそも>>801みたいな告なんか出ないと思うけど...
何か盛大に勘違いしてる予感...



825 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 13:05:58.78 ID:7Riaak3V0.net]
>>808
WPFだと簡単にできたけどだめですか。。
背景透明なウィンドウとOpacity≒0で全体をほぼ透明化したウィンドウを重ねて代用します

826 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 13:21:14.65 ID:svO22mue0.net]
>>808
勘違いなのかなぁ・・・。
すいませんもうちょっといろいろ実験してみます。

827 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 13:55:20.14 ID:svO22mue0.net]
もともとスタートアップだったform1からform2にスタートアップを変更したいと考えています。
Program.csの
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new InitialSettingForm1());
}
のForm1をForm2に変更したのですがどうもうまくいきません。

828 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 14:00:09.60 ID:svO22mue0.net]
form1が出てからform2が表示されているような…。
試しに
public ExaminationForm1()
{

InitializeComponent();
MessageBox.Show("a");
}
と入れてみると
メッセージボックスが表示→okをクリック→form2が表示
となります。
他にも設定しなければいけないところがあるのでしょうか・・・。

829 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 14:01:17.37 ID:svO22mue0.net]
また変なことやってるのかなぁ・・・。

830 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 14:48:09.94 ID:oCYWBo6GM.net]
InitialSettingなのかExaminationなのかどっちだよ
ExaminationForm1のコンストラクタにブレークポイントおいて実行
ブレークしたら呼び出し履歴を確認する

831 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:11:30.57 ID:svO22mue0.net]
>>814
Debugで確認していったらどうもインスタンスの参照を渡せていないようです。

832 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:12:13.75 ID:svO22mue0.net]
public partial class Form1 : Form
{
Form2 form2;
Class1 class1;

public Form1()
{
InitializeComponent();
form2 = new Form2();
form2.Show();

class1 = new Class1();
form2.Pointer = class1;
}
}

833 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:12:47.68 ID:svO22mue0.net]
public partial class Form2 : Form
{
Class1 class1;
public Class1 Pointer
{
set
{
class1 = value;
}
}
public Form2()
{
InitializeComponent();
int i = class1.fuga();
MessageBox.Show(i.ToString());
}
}

834 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:13:21.01 ID:svO22mue0.net]
public class Class1
{
public int hoge = 2222;
public int fuga()
{
return hoge;
}
}



835 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:16:54.99 ID:svO22mue0.net]
Form2で
int i = class1.fuga();
みたいなclass1のメソッドを使う命令を書くと、実行時にForm1もForm2も表示されずに終了になります。

Form2にclass1の参照をきちんと渡せていないようなのですが、どこが悪いんでしょう・・・。

836 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:33:33.27 ID:2EZjLjzja.net]
>>819
みたいな、じゃなくて問題を再現可能な最小コードをIdeoneにでもあげる
何で>>816-818まで書いおいて一番肝心なところを書かないんだ
それじゃやってること荒らしと同じ

837 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 17:34:55.39 ID:oCYWBo6GM.net]
806から811で全然別物の質問になってるんだけど
Form1のコンストラクタの先頭とForm2のコンストラクタの先頭にそれぞれブレークポイントおいて
ブレークしたらF10キー1行ずつステップオーバーしていって
どういう順番で実行されてるか確認

838 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 20:59:34.16 ID:36NNq4u4M.net]
うるせーな一度答えると決めたら最後までニコニコヅラで相手しろよクソハゲ

839 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 21:22:06.95 ID:sZHy65Kr0.net]
>>782
返信遅くなりました
ありがとうございます、確かに存在しました
やってみたら問題なくアクセスできました

840 名前:デフォルトの名無しさん mailto:sage [2018/05/22(火) 21:56:59.84 ID:nVwte2qB0.net]
>>816
Form2のコンストラクタ内でclass1を使用しようとしているのに、
form2.Pointer(class1)がその後で設定されてる。

841 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 00:14:46.31 ID:IEWpo6Tg0.net]
>>824
ありがとうございます。m(__)m
その通りでした。
一個づつ追っていけば分かるはずなんですけど、
自分では思い込みがあって気づきませんでした。

本当に助かりました。
ありがとうございました。

842 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 00:17:07.19 ID:IEWpo6Tg0.net]
>>820
すいません。
文章の書き方が悪かったです。

812の下から4行目のように
Form2で
int i = class1.fuga();
class1のメソッドを使う命令を書くと、実行時にForm1もForm2も表示されずに終了になります。

と書くべきでした。

843 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 00:18:47.23 ID:IEWpo6Tg0.net]
>>821
これまたすいません、ブレークポイントで見て言ったら画面の生成順は問題ないことが分かって、
インスタンスの参照が渡っていないことが原因と分かり。811-813みたいな最小コードで実験してました。

844 名前:デフォルトの名無しさん [2018/05/23(水) 10:08:41.93 ID:N3UaVe1J0.net]
中学生ぐらいだったら教えてやってもいいけど、あんたいくつよ?



845 名前:デフォルトの名無しさん [2018/05/23(水) 10:10:09.13 ID:QWeWgJFJ0.net]
不安なメソッド内じゃ全部TryCatchで囲っちゃった方が良いです?

846 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 10:18:50.74 ID:Mh8q82UX0.net]
catch内で例外を握りつぶせば完璧

847 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 13:00:21.42 ID:mO/AejLg0.net]
メインの処理全体をtry〜catchで括るだけさ。

848 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 18:48:37.98 ID:hVcgEIrnM.net]
ジェネリクスのListやHashSetを良く使うのですが、これで用が足りてしまうので自作までしたことありません

出来る企業や個人はバリバリ自作するのでしょうか

849 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 19:00:48.43 ID:iQ1n/QEKM.net]
>>832
できる人はそんな無駄なことに時間をかけたりしません
視野狭窄な無能ほどそういうことに拘って工数をドブに捨て、結果的に全体のクォリティを上げる時間が失われるのです

850 名前:デフォルトの名無しさん mailto:sage [2018/05/23(水) 23:29:00.27 ID:l9NA/114M.net]
ありもの使う方が良いと思うよ

851 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 00:22:57.92 ID:Pwy3p0jE0.net]
ありものでどうしても駄目な理由がある場合のみ、仕方なく自作だわね

852 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 00:28:40.71 ID:crQGHj+ea.net]
>>835
それも注意が必要だけどね
視野狭窄な小手先の技術に拘るプログラマは、くだらない問題に拘って「どうしても駄目だ」と思い込む(思い込もうとする)傾向がある
大抵そういうケースでは、視野を広げるとそもそも無理に手間をかけてまで解決する必要のない問題であることが多い

853 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 00:36:35.91 ID:O9jHVcOl0.net]
Dictionary クラスを継承して使いたくて、
これの各種インターフェイスを実装した中身 Dictionary クラスのラッパーを作った事あるなあ。
今思えば若かった。

854 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 07:54:06.51 ID:YzRB3Rzod.net]
>>836
プログラム以外でもあてはまる話だわな。
それ



855 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 14:34:00.01 ID:q7DgX+HL0.net]
たいていは英語力の無さに原因があるんだよな。
その機能を見つけられないとかだからさ。

856 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 15:02:55.06 ID:AHiLgPdDM.net]
コンソールアプリです。
今までに自分が吐き出した標準出力を自分で取得する事は可能でしょうか?
このアプリ(A)は主に他のアプリ(B)から実行されることを想定しています。Aは普通にConsole.WriteLineで出力し、BがProcess.StandardOutput.ReadToEndで取得、ログを残します。
A単体で実行してログも残したい要求があります。 Console.WriteLineと同時にファイルに出力すればいいのですが、最後に一括で取得できればスマートかなと思ったのですが、いかがでしょうか?

857 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 16:59:57.59 ID:B2m5C+ouM.net]
>>840
ウィンドウアプリです

858 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 17:02:19.57 ID:q7DgX+HL0.net]
両方に出力する関数作って、その関数に置き換える事すら出来ない無能に何をアドバイスしろと?

859 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 17:11:45.68 ID:iQu+wqIP0.net]
Windowsで使えるteeコマンド探した方が早いんじゃねえか

860 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 17:19:25.14 ID:EdBeTbDkM.net]
PowerShellならデフォルトで用意されてるよ!>tee

861 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 17:19:52.49 ID:AHiLgPdDM.net]
>>841
???
すみません、よくわかりません

>>842
書き方まずかったですかね。
そう言うのも含めて、2つの処理を同時にするという意味だつたのてすが。
他にはなさそうですね。

862 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 19:35:28.68 ID:MnVBsXE4d.net]
TraceSource

863 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 20:33:40.60 ID:hof73DG2a.net]
正直何言ってるのかよく分からんけど、普通にリダイレクトするだけのような...
っていうか、普通はコマンドライン引数で出力先を切り替えるように作ると思うんだけど...

864 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 23:35:59.30 ID:iQu+wqIP0.net]
>>844
へえ知らなかったな



865 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 00:27:44.75 ID:j/dB1L1+0.net]
PowerShellはもっと流行るべき

866 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 00:39:09.38 ID:N3c6aWbUa.net]
PowerShellとか罰ゲームだろ
インタラクティブシェルとしては悪くないけど、まとまったスクリプト書こうとすると大嫌いになる
Add-TypeでインラインでC#書いたほうがマシだわ
特にC#erはソースの見た目がなんとなく似てるだけに地獄を見るんだよ

867 名前:デフォルトの名無しさん mailto:sage [2018/05/25(金) 12:59:33.01 ID:RzxaIECOd.net]
>>847
名前付パイプでOkだよな

868 名前:デフォルトの名無しさん mailto:sage [2018/05/26(土) 00:52:48.69 ID:grpyMBkE0.net]
アプリ側で完結してないと、スクリプト操作とか変なバッチ叩かせてアプリ起動とか怪し過ぎるだろ。
業務アプリじゃねーんだw

869 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 00:24:44.02 ID:2eqT73MR0.net]
if (-100 <= clickPointXTemp && clickPointXTemp <= 100)
{
clickPointX[clickNumber] = clickPointXTemp;
MessageBox.Show(clickPointX[clickNumber].ToString() + "%");
MessageBox.Show(clickPointX[0].ToString() + "%");
MessageBox.Show(clickPointX[1].ToString() + "%");
MessageBox.Show(clickPointX[2].ToString() + "%");
clickNumber++;
}

870 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 00:29:53.74 ID:2eqT73MR0.net]
クリックしてカーソルが-100<=clickPointXTemp<=100の位置にあるときに配列にその値を代入させているのですが、
クリックするとその場で配列に代入できても次のクリックで0になってしまいます。

1回目クリック
clickPointXTemp=10
[0]=10
[1]=0
[2]=0

2回目クリック
clickPointXTemp=30
[0]=0
[1]=30
[2]=0

2回目クリック
clickPointXTemp=100
[0]=0
[1]=0
[2]=100

なんでだろ・・・。

871 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 00:30:12.40 ID:2eqT73MR0.net]
5時間ぐらい悩み中。。。

872 名前:デフォルトの名無しさん [2018/05/28(月) 00:33:24.89 ID:SRIgyUF4a.net]
データベースを使わないで、インデックスが共通する複数のデータ配列を作りたいときってどういう風な実装が最適なんでしょうか
var A = new int[x]
var B = new int[x]
var C = new int[x]



var E = new int[x]
みたいな感じです

873 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 00:33:25.48 ID:MfVpzBU40.net]
スコープが原因だろうから全体のソース出さないとエスパーだらけの回答になるよ

874 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 01:08:05.78 ID:dlEIDhlNa.net]
>>856
struct Hoge
{
  int A;
  int B;
  int C;
  int D;
  int E;
}
....
var hogeArray = new Hoge[100];



875 名前:デフォルトの名無しさん [2018/05/28(月) 07:52:50.79 ID:Mf7CKKuIa.net]
>>858
ありがとうございます
助かりました!

876 名前:デフォルトの名無しさん [2018/05/28(月) 12:27:04.88 ID:YifI+gJdr.net]
誰か>>857のエスパーたのむ

877 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 13:02:33.05 ID:PWPrnTKxM.net]
>>853-854へのレスだろ

878 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 13:47:49.05 ID:i/nkRhbIM.net]
>>860
https://youtu.be/mKrYRsENA-I

879 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 15:55:38.64 ID:W2eXy6T5M.net]
エスパー能力ないと5chはこなせない

880 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 20:32:45.18 ID:0z7zyrSed.net]
複数のクラスで共通の変数定数を外出しして、
その変数クラスを継承するのって良し悪しで言うとどうでしょうか

is aなのかちと微妙な感じです
内臓名クラスを継承して動物クラスを作ってるような

has aなのでオブジェクトとして渡すべきですか?

881 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 21:46:19.79 ID:rs0fZbm/M.net]
>>864
共通の変数などという低い抽象度でクラス設計を考えるのがそもそも間違ってる
実装からクラスを考えると必ず破綻するから、君の今の考え方のまま進む限りはいかなる選択肢も不正解
とはいえ最初から抽象度を上げて設計しろといっても初心者には無理な話だから、気にせず自分の思うように作ればいい
一通りモノ作れるようになったらオブジェクト指向モデリングの書籍を読むことをお勧めする

882 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 21:51:33.12 ID:I0m/gtVC0.net]
オブジェクト指向プログラミングしない方がいいもの作れるよ
関数で組む方法を極めた方がいい

883 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 21:56:33.33 ID:dVAXJXVu0.net]
>>865
>オブジェクト指向モデリングの書籍
例えばどんな本がありますか?特におすすめ、とかじゃなくてもいいです
どういう本が該当するのかよくわからないのです

884 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 22:18:11.40 ID:rs0fZbm/M.net]
>>867
王道はエリック・エヴァンスとかダグ・ローゼンバーグとか
今読んでも実際のコーディングに対しては何の参考にもならないと思うよ



885 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 22:21:17.59 ID:dVAXJXVu0.net]
>>868
キーワード提供、感謝しています

886 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 12:48:47.90 ID:dUPfr/v4M.net]
どのプログラム言語を選ぶかでオブジェクト指向モデルの実現方法がかなり違う

887 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 12:57:47.07 ID:Xt8fAcdVa.net]
>>868の本くらいの抽象度になると実装方法にはほとんど依存しないよ
それどころかオブジェクト指向モデルすらも方法論全体の中では下層の方に位置付けられる

888 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 19:04:25.63 ID:QoecqRn60.net]
とりあえず入門レベルが終わったんだけど次はeffective c#4.0っての読めばいいですか?

889 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 19:05:12.69 ID:upesQ40yM.net]
6.0 7.0のでてるからそっちでいいよ

890 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 19:28:28.39 ID:QoecqRn60.net]
more effective C# 6.0 7.0ですか?
moreとついてるので前の本を読む必要があるかと思っていたんですが大丈夫そうならそちらを購入しようかと思います

891 名前:デフォルトの名無しさん [2018/05/29(火) 21:07:37.85 ID:FUNbZ4ty0.net]
フォーム間でのデータのやりとりはどうするのが一般的なのでしょうか?
例えば、Form2の表示と同時に、Form1に入力済みのデータをForm2に表示させる場合、今は以下のようにしています。

class Form1
{
 public object Data{get; set;}

 var form2 = new Form2();
 form2.Parent = this;
}

class Form2
{
 public Form Parent{get; set;}

 Load()
 {
  this.Data = Parent.Data;
 }
}

892 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 21:31:23.00 ID:T0OOxyUA0.net]
>>875
一般的と

893 名前:かいいやりかたって聞かれると逆に難しいんで自分のやりやすい形で
https://dobon.net/vb/dotnet/form/accessanotherformdata.html
コンストラクタやメソッドの引数でも渡せるし
[]
[ここ壊れてます]

894 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 22:26:37.07 ID:LfCUNSAB0.net]
>>874
Apressお勧め



895 名前:デフォルトの名無しさん [2018/05/29(火) 22:58:12.01 ID:G7p9dius0.net]
>>874
言語仕様とか環境の変化で不要になった部分をバージョンアップしてるから
今からかうなら最新だけでいい
初版と4.0と最新で内容は被っている

896 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 23:11:52.08 ID:5CF0lkGw0.net]
ビジュアルスタジオでC#使ってると、どんどんコードスタイルが簡略化されていくんだよな。

897 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 13:41:56.71 ID:Bf3z8rw50.net]
SocketクラスのBeginConnectとかBeginReceiveとかに渡すコールバック関数を
staticで書いてあるのとそうでないのと両方見かけるんですけど
どっちが良いんでしょう?

898 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 14:44:18.44 ID:LltEUg5c0.net]
まあ、C#ならコールバックは登録解除を明示的に行うからスタティックである必要は無いけどな。
でもこれがイベントハンドラからのデリゲートなら話は別だ。

899 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 14:47:38.89 ID:WVM+AecNM.net]
>>880
そのSocketオブジェクトに合わせるのが正解
Socketを生で使うサンプルってスキルの低い業務ドカタが書いてたり書かれた時代が古かったりすることが多いので、
C#をよく理解してなくてCやVBの感覚でstaticにしないといけないと思ってるようなのが多い

900 名前:デフォルトの名無しさん mailto:sage [2018/05/30(水) 15:03:40.50 ID:Bf3z8rw50.net]
>>881
イベントハンドラからのデリゲートとはどういう状況でしょう?

>>882
なるほどありがとうございます!

901 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 15:19:11.21 ID:AbqPsR3A0.net]
TextBoxか、MaskedTextBoxに単位をつけたい。
小数点有りや無し、-の数値を入力できたりするものってできますか?
-2℃
14℃
25.5℃
2.5℃

902 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 18:15:14.92 ID:Zw7Yk0+cM.net]
テキストボックスの横にラベルで単位でも書いておこうぜ

□㌕

903 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 18:16:46.93 ID:Zw7Yk0+cM.net]
小数点は

□.□㌕



904 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 19:19:02.19 ID:0ajP7AA9a.net]
>>884
TextBoxクラスを継承



905 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 20:26:49.48 ID:9/5XjJFR0.net]
>>884
入力支援・単位の入力補完・数値⇔文字列の変換
何でもできるけどホントにしたいことがそのレスでは分からない

906 名前:デフォルトの名無しさん mailto:sage [2018/05/31(木) 21:28:20.09 ID:ygkZdVXVM.net]
>>878
え、more付いてないのと付いてるのって同じ本なん?
独習C#と言い、命名がわけわからんな…

907 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 09:05:55.18 ID:azdekr4p0.net]
説明不足ごめんなさい。
出力ですが、最終的にはTextBoxの枠ごと印刷したいと考えております。
883の言う単位の入力補完だと思います。

MaskedTextBoxのマスクに####℃と記入し、
「-24.4」等のデータをデータベースから取り出して、入れたところMaskedTextBox.Textが244℃となってしまいました。
このテキストボックスを小数点有りの場合、なしの場合、負の符号が有りの場合なしの場合、「----」の場合、
1桁から5桁+「℃」としてTextBox.Textに出力したいと考えております。

できますか?

908 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 09:13:09.12 ID:gkm5sPLjM.net]
TextBoxクラスを継承して自前で実装すればできる

909 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 09:47:05.22 ID:czZmZo8za.net]
TextBoxクラスを継承してTextプロパティを上書き
書式とか単位を属性に持たせれば汎用的に使える。
コピペされたときの場合も考慮すること

910 名前:[879] mailto:sage [2018/06/01(金) 09:58:02.26 ID:azdekr4p0.net]
ありがとうございます。
なんと

911 名前:なく、それっぽいものが作れそうです。 []
[ここ壊れてます]

912 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 10:22:08.86 ID:XLd38QjBM.net]
ユーザーコントロールでボーダーなしテキストボックスとラベル並べた方が楽な気がする

913 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:06:59.69 ID:TnI3eVXu0.net]
テキストボックスの描画や挙動を弄るの面倒くさいから汎用性を求めるんなら InputMan 買った方がいいよ

914 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:10:44.74 ID:UBye49NJM.net]
ライセンスとかテクリスとか面倒だから買わない



915 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 18:21:51.24 ID:S7DUtxKdM.net]
NuGetで参照できるオープンソースのWinFormsリッチコンポーネントって何が有名なの?

916 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 20:17:26.63 ID:dZV2tAFxM.net]
nugetは俺の鬼門

917 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 21:28:02.83 ID:naL+ZRGN0.net]
僕の半蔵門

918 名前:デフォルトの名無しさん [2018/06/01(金) 23:18:54.61 ID:fWGAwsr30.net]
前門の虎 肛門の狼

919 名前:デフォルトの名無しさん [2018/06/02(土) 00:25:46.86 ID:A4SZL/oE0.net]
寒っ

920 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 10:06:40.82 ID:QJbZaU5f0.net]
c#で穴ぼこメモリにしないように組むのって不可能?

921 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 10:27:51.87 ID:nL4AUV2I0.net]
可能だが、規模によっては現実的でない
パフォーマンスを気にするなら、別にボトルネックが存在していないかを見直す方が先

922 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 10:30:12.89 ID:rvy10L9Oa.net]
OSの仕事
どうしても嫌でデカいbyte配列確保して中に文字や数字全部入れても無駄

923 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 10:40:30.36 ID:QJbZaU5f0.net]
>>904
それでも駄目なの?
もうサービス部分はC言語で組んだほうが良さげ?

924 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 10:42:11.98 ID:1ZPJADB4M.net]
GCが勝手に詰めてくれるから気にしなくていい
ただし巨大なオブジェクトは専用の領域があって移動されないので断片化されやすいから注意



925 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:05:50.81 ID:msgJi+IZM.net]
Spanとstackallocで我慢しなさい

926 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:10:29.54 ID:rvy10L9Oa.net]
>>905
Cだって確保管理はOSの仕事だろ
何のためにメモリの管理をOSに任せたくないんだ?

927 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:12:27.29 ID:msBkLZBc0.net]
DMAが僕を呼んでいるから

928 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:18:59.70 ID:J1HVezEsH.net]
>>908
Cだってオブジェクト毎の領域をそれぞれ全てOSが管理しているわけじゃない
mallocが効率化のためにだいぶ仕事してる

929 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 11:42:21.94 ID:gRqFSsBQa.net]
OSでメモリはブロックなどで管理されていて要求があったら
要求サイズに合わせてそのブロックの中のさらに細かいブロックなどを払いだしてる
こっちがどうしようとOSでブロックを作ってその中でやりくりしてる

例えそのブロックの中で断片化していて何か不都合あるのか?

930 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 14:08:09.74 ID:65ghWvPg0.net]
使う予定の最大量の倍の空きメモリーあれば大体は気にならない。
いまどきのパソコンはアプリが使いたいメモリーサイズの数百倍は有るから気にするな。

931 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 14:25:15.68 ID:QJbZaU5f0.net]
リークしてると1ヶ月ぐらいで死ぬじゃん
現状自分でメモリ管理しないとどこで何が確保されてるのかわからないわけで
そういうの確実に管理したいときはc言語のがいいのかなぁ?と

932 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 14:34:09.78 ID:gayBoTaI0.net]
極めて厳密に管理したいならC/C++でアロケータを自前で書くというのはあり得る
しかしリークという点ではC#よりC/C++の方が遥かにやっちまい易いので, メモリ安全を確保する目的でC/C++で書くのは本末転倒のように思う

933 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 14:39:58.23 ID:I3vJQFJE0.net]
リーク前提

934 名前:とかバカでしょ []
[ここ壊れてます]



935 名前:デフォルトの名無しさん [2018/06/02(土) 15:01:44.21 ID:fV6b9MUi0.net]
List#Containsの重複判定基準をEquals以外にすることはできないでしょうか?
ListにしたいクラスのEqualsが、別の目的用にオーバーライドされている為、Equalsを使うことができません。

936 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 15:43:20.19 ID:QJbZaU5f0.net]
>>914
c#は現在実行中のアプリのインスタンスを確認する方法はあるの?

937 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 15:47:01.32 ID:XUNevU9ma.net]
>>916
>Equalsが、別の目的用にオーバーライドされている
常識的にはそっちの方が解消すべき「問題」のように思うけど...

938 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 15:54:54.04 ID:XUNevU9ma.net]
まあ、Exists使うだけだよね

939 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 16:03:39.22 ID:nL4AUV2I0.net]
>>913
Webサービスか何かを想定してる?
だったらコーディングで対応するんでなく、ロードバランサで複数のアプリケーションサーバに振り分けて
サービスが止まらない様にしつつ、一部のサーバをオンメンテでリブートすべし

940 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 16:05:51.99 ID:wt7oIb0Vp.net]
C#スレでメモリーリークを心配するとか、どんだけ無能なんだよ。

941 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 16:12:14.89 ID:5ltA6BNw0.net]
普通はリークで死ぬ前にGen2GC連発して性能ガタ落ちになるんじゃ
どんだけ握ってんだよと

942 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 18:04:04.45 ID:QJbZaU5f0.net]
実際にメモリリークが起こらないように気をつける術は昔ながらの方法しかない?
プロジェクトでnewするときはインスタンスマネージャー的なのを通して
可能な限りインスタンスを監視するとかそんなの?

943 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 18:17:48.36 ID:msgJi+IZM.net]
マトモなコードを書くだけ

944 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:01:19.50 ID:pCnJrSzQd.net]
メモリリークさせようと思わないとなかなかできんよ



945 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:11:03.61 ID:1ZPJADB4M.net]
>>923
一時的なオブジェクトはもう必要ないなら握りっぱなしにしないで即座に使い捨てること
中途半端に握りっぱなしにしてるとGCの世代か昇格してメモリ使用量の増加やGCのパフォーマンス低下の原因になる
一方、単寿命オブジェクトのGCは爆速なので、newしたら積極的にすぐ放置すべき

946 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:16:06.36 ID:1ZPJADB4M.net]
>>916
Any

947 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:21:44.73 ID:I3vJQFJE0.net]
C#でメモリリークさせるコード書く奴がC/C++で無くせるとは到底思えないわ

948 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:25:12.19 ID:QJbZaU5f0.net]
>>926
うーん
爆速ではないなぁ
3分に1回動かしてる処理があるんだけど
強制GCせずにずっと動かしてるとき
メモリ使用量がかなりあがった状態でGCが動くと
3分に一度の処理のタイミングがズレちゃうんだよね
そこで強制GCも十分に一度ぐらいの頻度で動かしてる状態

949 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:29:07.89 ID:pCnJrSzQd.net]
だめだこいつ

950 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:31:42.56 ID:QJbZaU5f0.net]
>>930
なんかいい方法あるんですか?

951 名前:デフォルトの名無しさん [2018/06/02(土) 19:37:34.74 ID:KX6MAuAea.net]
ちゃんと設計してればC#でメモリーリークなんて気にすることなんてあるか?
そんなガバガバ設計してるやつがCだったら大丈夫なんだけど、って馬鹿な話誰が信じるよ

952 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 19:45:14.53 ID:msgJi+IZM.net]
>>931
簡単だよ
マトモなコードを書くだけ

953 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 20:14:13.22 ID:fh+k246w0.net]
以降放置でお願いいたします

954 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 20:28:22.93 ID:iRadbqpq0.net]
>メモリーリークなんて気にすること
ページフォルトを気にしないヴァカっていたな。
リークしていないが累積しすぎたページフォルトがOSを殺す



955 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 20:30:41.21 ID:+/nRHGaPa.net]
C#でリークやらかす奴がC/C++でやらかさない道理がない

956 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 20:31:22.14 ID:eSvYHUXNM.net]
こいつもトンチキなので放置でいいです

957 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 20:50:00.44 ID:wt7oIb0Vp.net]
まあ、でもC#はメモリー管理を隠蔽しちゃったから、実はCやC++よりメモリー管理

958 名前:オにくいんだよな。 []
[ここ壊れてます]

959 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 20:58:18.57 ID:msgJi+IZM.net]
C++出身のC#初心者にありがちだね

960 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 21:10:12.98 ID:u/NNd5OV0.net]
未確認飛行のSpan説明みてサンプルコード動かそうとしたんだけど
using System.Memory;すると
CS0305ジェネリック種類 'Memory<T>' を使用するには、1 型引数が必要です。
って叱られるのなんで?
VSもCoreも最新

961 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 21:20:59.23 ID:msgJi+IZM.net]
SpanはSystem.Spanだ

962 名前:デフォルトの名無しさん mailto:sage [2018/06/02(土) 21:33:12.83 ID:u/NNd5OV0.net]
System.Spanにしてもでてきおる
using static System.Memory<string>;
ってするとエラーは消えた

963 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 17:57:54.97 ID:nwnHFAsS0.net]
フォームアプリでマウスクリックでイベントをはっせいさせているのですが、
ある処理ループの実行中はこのクリックイベントの割り込み発生を禁止させたいです。
マウスクリック割り込みイベントを無効化、有効化する方法ってないでしょうか?

964 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:03:05.41 ID:acSSis/XM.net]
>>942
そうじゃないusing System;ってこと



965 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:05:10.81 ID:5sPxkTAt0.net]
>>943
イベントの購読とその解除
ufcpp.net/study/csharp/MiscEventSubscribe.html

966 名前:デフォルトの名無しさん [2018/06/03(日) 18:07:49.08 ID:qpwWeWwga.net]
>>943
-=、+=
デザイナーみればわかると思うよ

967 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:08:39.42 ID:imVGa92Ya.net]
>>943
Control.Enabled
どうでもいいけど、「割り込みイベント」って表現は間違ってるから他所では使わない方がいいよw

968 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:26:12.78 ID:y7bK61pJa.net]
処理中フラグ持っておいて
クリックイベントの入り口で処理中ならreturnするのでよくない?

bool 処理中=false;

クリックイベントの頭
if(処理中)return;

969 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:33:27.61 ID:3EuqECGs0.net]
lockで囲めば

970 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:43:15.37 ID:acSSis/XM.net]
ボタンからしか起動しない処理だと保証されてるなら-=+=でもフラグでもいいが
そうでないなら真面目に並列処理管理しないとね

971 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 18:59:01.85 ID:4vwgZnFjp.net]
はあ?
クリックイベント自体を抑止したのか?
意味あるの?

972 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 19:18:23.10 ID:bhcyF/oUa.net]
処理ループの中でメッセージループを実装してGetMessage()でマウスイベントをフィルターかな?或いは読み捨てる

973 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 20:09:50.51 ID:pjD3SZS60.net]
え、連打対策してないの?

974 名前:デフォルトの名無しさん [2018/06/03(日) 20:15:38.36 ID:OWt1glR4a.net]
非同期で実行した場合とかの抑止とか?とエスパー



975 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 20:19:01.20 ID:S4J0YpoT0.net]
>>944
つまりSpanを使うのにusing System;さえすればいいってこと?
ごめんな、クソ素人過ぎて質問がまずいのか

ufcpp.net/study/csharp/resource/span/

var s = "abcあいう亜以宇";

var sub = s.Substring(3, 3);
var span = s.AsReadOnlySpan().Slice(3, 3);

for (int i = 0; i < 3; i++)
{
Console.WriteLine((sub[i], span[i])); // あ、い、う が2つずつ表示される
}

を試したいんだけど、できないって話なんだ

976 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 20:26:16.06 ID:klvCZP9p0.net]
>>938
やっぱりそうだよね
厳密にやろうと思ったら昔ながらの方法でやるしかないんだよね

977 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 20:50:59.76 ID:H2Gh+VvdM.net]
>>955
現時点ではAsReadOnlySpanが存在しないっぽいね
Stringはもともと読み取り専用だからAsSpanでReadOnlySpanになるってことだと思うけど
過渡期の記事はそのまま鵜呑みにしない方がいいぞ

978 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 21:25:48.86 ID: ]
[ここ壊れてます]

979 名前:nwnHFAsS0.net mailto: >>945
全く知らない概念でした。
勉強してみます。
[]
[ここ壊れてます]

980 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 21:26:28.88 ID:nwnHFAsS0.net]
>>948
これうまい手ですね。
使える場所ありそうですので試してみます。

981 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 21:27:58.09 ID:nwnHFAsS0.net]
>>953
おっしゃる通りで、連打対策必要だったんですね。
フォームアプリだと必須の対策なんですね。
他で少し変な挙動してたのは連打対策してなかったことが原因のようです。

連打対策してみます。
というか、どうやればいいんだろ。
また、お勉強しなければ。

982 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 21:42:26.87 ID:0r68Qt9D0.net]
>>960
いま質問した答えをイベントメソッドに組み込めば連打対策は終了
そっちを先に覚えるのが普通だと思ってた

983 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 21:51:01.95 ID:imVGa92Ya.net]
>>959
全然うまい手じゃないw
PC-98の時代じゃあるまいし、フラグって言葉を聞いたら眉に唾して聞かなきゃダメwww
それを好むのは可読性に感心がないダメグラマの可能性が高いw

984 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 21:56:36.02 ID:imVGa92Ya.net]
そもそもUIのデザイン論なんて大げさな話じゃなくても、
ユーザーの捜査に反応できない文脈では何らかの方法(通常はグレイアウト)でそれを
ユーザーに対して明示しないUIは問題あるでしょうww

そんなことにも思い至らない回答者は無視していいよw



985 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 22:53:07.14 ID:S4J0YpoT0.net]
>>957
ありがとう、そういうこともあるんだな
勉強になった

10Gくらいの固定長テキストファイルから一行ずつ読み取って
最初の1-10文字はUSER ID、11はSEX・・・って分けてdbに突っ込んでるんだけど
StringBuilderでLength=0しつつappendするくらいじゃ、stringでsubstringするのとあまり変わらなかったんで
Span使えばマシになるのかなと思ったんだ

986 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:00:15.10 ID:8gLBE5WNa.net]
そんなもん丸ごとDBにロードしたほうが速いだろ
固定長ファイルのロードはどのDBMSでもコマンド一発でできる

987 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:12:33.52 ID:S4J0YpoT0.net]
>>965
それなw
tempのカラムに一行まるごと突っ込んで、クエリでsubstrするやり方やってみる
https://stackoverflow.com/questions/12423991/import-fixed-width-text-file-into-sqlite

988 名前:デフォルトの名無しさん mailto:sage [2018/06/03(日) 23:35:40.25 ID:iikfdxhC0.net]
10GBのデータだと読取よりDBMSへの書き込み方法がネックになりそう

989 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 06:33:56.69 ID:mxEQUVjg0.net]
>>967
細かくなるとdbスレ行きなんだろうけど
実際に書くところはC#なわけで、どこがボトルネックになってるのかザコ過ぎてわからんw
とりあえずsqliteつかってメモリ上dbにinsertでトランザクション管理しっかりやってってして30分くらいだったからまーいいかと
sql server expressだとbulk insertはわからんけどselectで並列処理されるみたいだから乗り換えてみる予定

990 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 11:04:17.43 ID:MivBMbBxa.net]
sql server expressはひっくるめたDBサイズが最大10 GBまでだったと思うが

991 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 11:06:49.27 ID:UeJV2JW90.net]
メモリしこたま積んでRedisかな

992 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 14:26:59.71 ID:pPavJvQvM.net]
Postgresでいいよ
ロード時に固定長レコードのフォーマットを指定できるから一時テーブルもC#もいらん

993 名前:デフォルトの名無しさん [2018/06/04(月) 16:33:35.32 ID:7NrmQXKK0.net]
MonoのLinux版のインストールの仕方、ご教示いただけますと有難いです。宜しくお願い致します。

994 名前:デフォルトの名無しさん [2018/06/04(月) 16: ]
[ここ壊れてます]



995 名前:48:48.54 ID:aK/XyO250.net mailto: 米Microsoftが米GitHubを買収することで合意
http://www.itmedia.co.jp/news/articles/1806/04/news058.html
[]
[ここ壊れてます]

996 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 20:38:58.19 ID:UeJV2JW90.net]
>>972
ちょまど神を信仰すると天啓が降るぞよ

997 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 20:43:37.91 ID:CVKZewtza.net]
>>972
Monoなんか今時もう誰も使ってないし誰もメンテしてないでしょ
今は.NET Coreの時代
GUIが目当てなら諦めなさい

998 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 20:52:46.96 ID:spHrXgPF0.net]
UbuntuでもCentOSでもコマンド一発で入るがな

999 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 21:35:01.82 ID:ztrCxIDM0.net]
>>975
何言ってんの?

1000 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 21:48:02.60 ID:9+XsYcyB0.net]
Windows.Forms で WndProc を override して自分のコードを加えているのですが
デバッガで進めていくと、その中に突入してしまいます。

InitializeComponent の中みたいに、デバッガが入らなくする宣言みたいなものなかったですか?

1001 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 21:49:06.62 ID:BHtXacEqa.net]
>>978
debuggerstepthrough

1002 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 21:56:07.60 ID:Uz3WpYRO0.net]
>>975
Mono Releases | Mono
www.mono-project.com/docs/about-mono/releases/

1003 名前:デフォルトの名無しさん mailto:sage [2018/06/04(月) 23:32:00.59 ID:054Q3E4O0.net]
メインクラスとシリアル通信クラスの2つを使っています
シリアル通信の受信完了でイベントをメイン側に発生させることら可能でしょうか。受信完了したらメイン側から受信データを取りに行くようにしたいのですが。

1004 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 00:07:28.69 ID:jE9yEXCCa.net]
>>981
何でそうなるのw
発想が逆だってw

そのシリア通信を担当するクラスSがデータ受信を通知するイベントを発生させて
受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ついでに言えば受信データもEventArgs使って渡してしまえばいい



1005 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 00:33:25.52 ID:liKML/cX0.net]
しょうがねえだろ初心者なんだから

1006 名前:976 mailto:sage [2018/06/05(火) 07:18:51.35 ID:ByFVOB9IM.net]
>>982
やりたいのことはそれなんですよw
説明が下手ですいません
厳密にはデータを受けた事が分かったらメイン側は受信データの内容を解釈するクラスに送って処理分岐という形にしようかと思ってます。
用語や処理の知識がおいついてきてないので、あれを応用しようという感じにならず、調べるためのキーワードも出てこないです。

>>クラスSがデータ受信を通知するイベントを発生させて受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ここが具体的にどういう構文になるのでしょうか。

1007 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 08:07:17.14 ID:D4M8TybKa.net]
Signalを使っても作れるな。

1008 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 09:11:21.09 ID:GjVlFAo70.net]
>>963
PCをあまり使い慣れてない人とか、ボタンはシングルクリックでいいのをダブルクリックしちゃったりとかあるんだよなこれが・・・

1009 名前:デフォルトの名無しさん [2018/06/05(火) 09:29:57.56 ID:nr/+sOXHa.net]
非同期じゃないならボタンイネーブル切ればいいだけじゃね

1010 名前:デフォルトの名無しさん [2018/06/05(火) 09:32:16.99 ID:nr/+sOXHa.net]
すまん。忘れてくれ

1011 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 10:35:58.82 ID:l/0/VM/ma.net]
状態をGUIだけに持たせておくのはおかしいといつか思うはず

1012 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 12:11:20.04 ID:vCTdp4Eha.net]
>>984
class FrameReceivedEventArgs:EventArgs
{
  public byte[] Frame{get; private set;}
  ....
}

class CommunicationPort
{
  public even EventHandler<FrameReceivedEventArgs> FrameReceived;
  ....
}

class FrameDecoder
{
  public FrameDecoder(CommunicationPort c}
  {
    c.FrameReceived +

1013 名前:= CommunicationPort_FrameReceived;
  }

  private void CommunicationPort_FrameReceived((object sender, FrameReceivedEventArgs e)
  {
    ....
  }
  ....
}
[]
[ここ壊れてます]

1014 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 12:44:05.86 ID:eGZjT6RJM.net]
>>990
引数に渡されたものを弄るのは行儀の悪い設計
IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、
>>984の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい



1015 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 12:51:41.81 ID:eGZjT6RJM.net]
>>990がなぜ行儀が悪いか補足しておこうか
普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する
ところが、>>990だとそれが逆なんだよ
new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ

1016 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 12:55:30.14 ID:vCTdp4Eha.net]
何言ってるのかさっぱりわからん
よくわからん思考回路だな...

1017 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 13:09:28.12 ID:GjVlFAo70.net]
言い回しがようわからんが
>>990みたいなのするのが解放されないオブジェクトを量産するっていうのはなんとなくわかる

1018 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 13:11:38.32 ID:vyKZFDS5a.net]
>>993
分からないならイベントというものを正しく理解してないんじゃないかな
ボタンのクリックイベントをフォームが受け取れるのは、ボタンがフォームへの参照を(実際には間にデリゲートが入るので間接的にだが)持ってるから
基本的に、引数に渡ってきたものに自分自身を登録するのは避けたほうがいい
オブジェクトのライフタイムが非常に分かりにくくなるから

1019 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 13:53:28.61 ID:UBCugO63M.net]
reactive extensionsって.NET発祥なのに使う人少ないよね

1020 名前:デフォルトの名無しさん [2018/06/05(火) 15:23:49.06 ID:n583dJR10.net]
>>974
ちょまど神って???状態でしたので調べてみました。
一つ知識が増えました。ありがとうございます。

1021 名前:デフォルトの名無しさん [2018/06/05(火) 15:24:19.24 ID:n583dJR10.net]
>>975
そうなんですか。。。
NET Coreっての調べてみます。どうも有難う御座います。

ちょど昨日 GUI って何だ??って検索したばかりでした。
3日前からプログラムの勉強をはじめたばかりで。。。

1022 名前:デフォルトの名無しさん [2018/06/05(火) 15:24:34.93 ID:n583dJR10.net]
>>980
ありがとうございます。TRYしてみます。

この掲示板すごーい!!皆様に感謝です。

1023 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 16:15:32.44 ID:vCTdp4Eha.net]
>>994
ないないw
イベントの購読解除はリークの原因になるのはその通りだけど、
それは>>991が主張するように、イベントを発生するオブジェクトを引数で受け取ったかどうかと無関係。

>>995
俺は理解してないのは君の方だと思うよw
その君のいう俺様ルール、何が悪いのかさっぱり分からない

そもそも今はそんな話をしてるんじゃないw
単に質問者の参考になるかもしれんコードの骨組みを示しただけw

1024 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 16:16:25.51 ID:vCTdp4Eha.net]
あ、

× イベントの購読解除
〇 イベントの購読解除忘れ



1025 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 19:31:17.11 ID:70UTtyrn0.net]
次スレたててみる

1026 名前:デフォルトの名無しさん mailto:sage [2018/06/05(火) 19:33:22.39 ID:70UTtyrn0.net]
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
たった
議論は他のところでよろしく

1027 名前:デフォルトの名無しさん mailto:sage [2018/06/06(水) 00:18:56.95 ID:+J9HGVUKa.net]
>>1000
想像力のない人だなあ
>>990だと、イベントハンドラの登録を解除しない限り、FrameDecoderが不要になっても
登録先のCommunicationPortよりも先にGCされることは絶対にない。
じゃあ不要になったらイベントハンドラを登録解除できるようにしよう。いつ解除する?
それはFrameDecoder自身には分からない。知

1028 名前:っているとしたら、それは>>981のいうメインクラスだろう。
登録解除するにはFrameDecoderクラスのDisposeメソッドを呼べ、という仕様にするか?
結局、985のFrameDecoderを正しく扱うには、メインクラス側がそういうクラス外から見ただけでは想像できないFrameDecoderの気難しい仕様を理解した上で、
必要に応じて明示的な解放を行わなくてはならない。
そんなことをするくらいならメインクラス側で明示的に登録・登録解除をやったほうが遥かに素直で分かりやすい。
[]
[ここ壊れてます]

1029 名前:デフォルトの名無しさん [2018/06/06(水) 00:26:33.34 ID:D75pa1n0a.net]
質問いいですか?

1030 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 60日 6時間 46分 14秒

1031 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<310KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef