1 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:36:23.74 ID:i1fbuZ/pM.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part95 https://mevius.5ch.net/test/read.cgi/tech/1508168482/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part143 https://mevius.5ch.net/test/read.cgi/tech/1558002486/ ■情報源 https://docs.microsoft.com/ja-jp
686 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 13:00:06.50 ID:cKzRnh020.net] >>674 なるほど 地道にやってんすね やってみた感じ 文字数から行数出した方が楽だったのと 検索しながらは検索文字列に改行コード入ると面倒だったので @検索文字列のヒットした文字数を出す A文字数に対する行数を出す の順でやりました ありがとう御座いました
687 名前:デフォルトの名無しさん [2019/09/19(木) 14:17:59.08 ID:R2S0qhpOa.net] 何言ってるのかよく分からんかったけど、 文字数 ⇒ 一致部分の最初の文字のインデックス 行数 ⇒ 一致部分の行の行番号 ってことかw 数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする メソッドは存在しないんだね。
688 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 14:45:37.14 ID:6IKimtYb0.net] 検索一致箇所までの文字列を切り出して 改行でspritして要素数から行を得るというのはどうかな 折り返しは考慮されないけどね あとtextboxなら折り返し込みで 文字インデックスから行に変換する メソッドがあった気がする
689 名前:デフォルトの名無しさん [2019/09/19(木) 14:58:17.90 ID:R2S0qhpOa.net] 検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。 RegexかString.IndexOfでベタにやった方が
690 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 15:15:08.89 ID:VB98Oc2p0.net] 文字数多いとsplitはパフォーマンス辛い可能性があるね regexもそれなりに… パーサー的なものなら頭から逐次処理するのが一番だったりするし
691 名前:デフォルトの名無しさん mailto:sage [2019/09/19(木) 15:41:06.68 ID:6IKimtYb0.net] ググったらreplaceを使ってlengthの差で求める方法があったけど これも一時的にメモリ上で二重化されるから 巨大なログファイルとかだとあまりいい方法ではないな IndexOfの検索結果を次の検索開始インデックスにしながら カウントするのが一番楽で無駄がなさそうだ
692 名前:659 mailto:sage [2019/09/19(木) 21:16:22.29 ID:sYHr9xpc0.net] 自己解決 MTPデバイスへのショートカット(.lnk)をメモ帳で開くと見えるリンク先 (こんなの→"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_12d1&pid_1031&mi_00#7&22311cc4&0&0000#{6fa27828-a61a-4555-ba33-f28f495d4f31}") をProcess->Start()にそのまま突っ込んだら、エクスプローラが起動してMTPデバイスを開いてくれました。 ちなみに、テキストの末尾に(〜5d4f31}\内部ストレージ\Android")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。
693 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:06:22.05 ID:Z+Dr4fZe0.net] private class Parameter { public DateTime setTime { get; set; } public string Name { get; set; } public int Ag
694 名前:e { get; set; } public string address { get; set; } public int sex { get; set; } } ↑のParameterのListデータで setTime,Name,Ageが重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので 簡単で早く処理できる方法はないでしょうか? [] [ここ壊れてます]
695 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:15:35.18 ID:JBznBYO/0.net] Parameter.Equals() をオーバーライドして 用意した HashSet<Parameter> foreach で Add() を呼ぶ
696 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:15:52.99 ID:MWgaILTA0.net] >>682 個々の要素参照するんだからループするしか無いんじゃないの あらかじめどこか他にデータ持っているのならともかく 簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる
697 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:17:07.07 ID:JBznBYO/0.net] なんか色々おかしかった ↓正 Equals() をオーバーライドして 用意した HashSet<Parameter> に対して foreach で Add() すればよい
698 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:20:11.39 ID:H/0RNa6Fa.net] >>682 普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから 効率よくしたいならHashSetを使うといい ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある
699 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:21:51.81 ID:JBznBYO/0.net] >>686 HashSet の重複判定って GetHashCode() 絡んでるのかね? 名前的には関係ありそうだけど 仕様が見付からない…
700 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:32:56.51 ID:Z+Dr4fZe0.net] まだ試してないけどHashSetってことはsetTime, Name, Ageだけのチェックにはならないのかな setTime, Name, AgeがDBのキーになる予定なので無理そうな気が
701 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:33:33.46 ID:73yDKPmS0.net] Reference Source で実装みればええやん GetHashCode と ICompare 指定しなければ Default の Equals の両方やね
702 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:34:05.25 ID:H/0RNa6Fa.net] >>687 Microsoft Docs見てきたが明言はされてないのか……ただ https://docs.microsoft.com/en-us/dotnet/api/system.object.gethashcode ではDictionaryなどで使われるとあって https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.hashset-1 ではDictionaryのKeyアクセスと同様のハイパフォーマンス集合操作を提供、とあるから HashSetで扱う型についてもGetHashCode()の実装は必要なはず
703 名前:デフォルトの名無しさん [2019/09/20(金) 00:41:13.96 ID:WJxc7oYHa.net] >>689 質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど
704 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:57:02.51 ID:JBznBYO/0.net] キーの重複は GetHashCode() の一致 → Equals() みたいだな GetHashCode() は重複しにくいメンバの GetHashCode() で Equals() で完全一致の判定をすれば大丈夫そう
705 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 00:58:18.71 ID:Z+Dr4fZe0.net] あるサイトを参考にしてみたのが private class Parameter { public DateTime setTime { get; set; } public string Name { get; set; } public int Age { get; set; } public string address { get; set; } public int sex { get; set; } } private class ParameterDistinct : IEqualityComparer<Parameter> { public bool Equals(Parameter i_lhs, Parameter i_rhs) { if (i_lhs.setTime == i_rhs.setTime && i_lhs.Name == i_rhs.Name && i_lhs.Age == i_rhs.Age) { return true; } return false; } public int GetHashCode(Parameter i_obj) { return i_obj.setTime.GetHashCode() ^ i_obj.Name.GetHashCode() ^ i_obj.Age; } }
706 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:02:47.93 ID:Z+Dr4fZe0.net] //データ追加 var ParameterList = new List<Parameter>(); //重複排除 ParameterDistinct qualityComparer = new ParameterDistinct(); IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer); でやってみたんだけど重複がでたんだけど何かまずいだろうか 参考にしたところはDatetimeは使っていなかったので駄目なのかな
707 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:09:28.14 ID:73yDKPmS0.net] DateTime をつめるときに DateTime.Now とか使ってると ミリ秒で
708 名前:差がでてるかもしれない。 DateTime を == で比較すると 内部的には DateTime.Tick 同士で比較するから [] [ここ壊れてます]
709 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:21:43.10 ID:Z+Dr4fZe0.net] なるほどDateTime.Nowは使っているので調べてみます。 ありがとうございました!
710 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:31:14.65 ID:v9n6qqFa0.net] なんで単なる取得でメモリ使うんだよ unsafeかなんか付けて昔ながらの方法でやるのが一番速い
711 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 01:35:53.41 ID:JBznBYO/0.net] ライブラリ作ってるわけでもないのにunsafeとか論外なんだが その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ どうせHashSetのパフォーマンスに大敗する
712 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 02:27:15.79 ID:pTVI5tHY0.net] NGID:JBznBYO/0
713 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 11:53:09.00 ID:URFVhEsV0.net] git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。 現在Onedrive使ってますが、binやobj配下まで同期されるのが残念な感じ。 binやobjの出力先はWPFプロジェクトなら変更できましたが、ASP.NET coreプロジェクトでどう変更するのか不明 VSTSで上記を実現または他の方法あったりしますか? ちなみに現在はVS pro サブスクリプションに入ってます
714 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 12:00:15.35 ID:Ew/p9Snjp.net] Microsoftの開発ソフト使ってんならOneDrive使えるだろ?
715 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 12:02:00.53 ID:Ew/p9Snjp.net] 最後にcleanすりゃいいだけだから。 もしくは同期ドライブ直接はコンパイルしないとかな。
716 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 12:02:42.34 ID:bfuJBtmYd.net] svnを使う onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする なんでonedriveはokでgitがngなのかがわからんと提示しづらい
717 名前:デフォルトの名無しさん [2019/09/20(金) 12:48:37.25 ID:uLmjcKMSa.net] OneDriveって特定のフォルダだけ同期しない設定にできないのか 6,7年前にオンラインストレージが流行った時には タダで大容量で高機能のがいっぱいあったのになんだか退化してるよねw
718 名前:デフォルトの名無しさん [2019/09/20(金) 12:56:56.83 ID:uH7l3KIr0.net] labelの文字列の一部を太文字にしたり色を変えたりといった表現をしたいのですが 何か良い方法はないでしょうか? コントロールではなくメインプログラムのほうで操作できるようにしたいです labelと同じ見た目ならなんでもよいです textboxの様な感じではなくlabelのような感じが目標です
719 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 13:13:16.41 ID:WW0nVoDA0.net] のような感じと言われてもどういうのがNGでどういうのがOKなのかよく分からんが 手軽なのはRichTextBoxを使うことで そうでなければPaintイベントで全部自前描画ということになる
720 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 14:28:02.26 ID:9RWO75b+d.net] >>700 ちと面倒だけど、ブランチとか使えるのが便利だから、サーバ立てるまでOneDriveのフォルダ上にgitのリポジトリ作ってた事がある。 OneDrive内の任意のフォルダの中でgit init --bareするだけ。 したら、そのフォルダをremoteとして登録出来る。 あとは任意のタイミングでpush/pullするだけ。 作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。 (競合したら「もとのファイル名-端末名」ってファイルが大量にできる)
721 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 15:01:20.41 ID:riKFjdTV0.net] ああ、確かにリポジトリをonedriveに入れるのが一番スマートかも 昔dropboxにsvnリポジトリ作ってたことあるわ
722 名前:デフォルトの名無しさん [2019/09/20(金) 17:01:09.25 ID:9F0x+J+E0.net] メモリ消費は税のようなもの しょとくだけに 消費だけに
723 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 19:34:13.48 ID:dvP1e2Mn0.net] 環境はWindows formアプリです。 TableLayoutPanel と DataGridView の使い分け方がわかりません。 datasource property の有無だけ?
724 名前:デフォルトの名無しさん mailto:sage [2019/09/20(金) 19:53:22.57 ID:+tHFIfxx0.net] >>705 自分で描画するのはメソッド作るのも指定するのもめんどくさいよ https://dobon.net/vb/dotnet/graphics/measurestring.html#section1 >>706 の言う通りRichTextBoxをBorderStyle.Noneにして背景色を合わせた方が楽じゃないかな どうしても文字以外を透過させたいとかならともかく >>710 HTMLのテーブルとExcelの表が同じに見えるのならそうかもね
725 名前:デフォルトの名無しさん [2019/09/21(土) 10:00:25.29 ID:DmWWMvK20.net] コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか? 目標は外部のファイルを読み込んでコンバートするアプリを作ることです。
726 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 10:08:45.30 ID:ZhDsxJHf0.net] 外部のファイルを読み込んでコンバートするアプリを作ればよいのでは? そんなに難しくないよ 何をどうコンバートするかにはよるかもしれないけど
727 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 11:05:31.91 ID:wLZyePcca.net] プログラミング未経験者です すいません、ちょっと趣旨から外れるかもしれませんが質問です 電気(強電)、計測(コンビナートとかのプラント計装)の知識ってC#で活かせますか? C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました
728 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 11:05:33.11 ID:DmWWMvK20.net] SQLもどき文をパース?して出力したいです
729 名前:デフォルトの名無しさん [2019/09/21(土) 11:42:35.85 ID:uzyGV4kra.net] >>714 FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ
730 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 12:00:01.02 ID:wLZyePcca.net] >>716 ありがとうございますm(_ _)m
731 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 13:30:42.97 ID:ox/L2PXG0.net] >>715 SQLの整形をしたいの? SQLって方言が結構あるしパース(字句解析+構文解析)自体の難易度も初心者がやるものじゃ無いと思う
732 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 13:39:06.70 ID:cHmpI1M9M.net] >>715 SQLのパーサーなんて出来合いのライブラリがいくらでもあるよ 自分でわざわざ使い物にならないゴミを作って時間をドブに捨てる必要はない
733 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 14:11:59.87 ID:gZFDeRYs0.net] オライリーのlex & yacc がsqlのパースの サンプルだったけど C#は対応していないかと
734 名前:デフォルトの名無しさん [2019/09/21(土) 14:57:58.99 ID:8edEcM0R0.net] すまんが、スレッドを指定して実行ってできないもんなの? 指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう
735 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 15:03:52.53 ID:gZFDeRYs0.net] スレッド起動しないかWaitしておけば、 良いんじゃね
736 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 15:21:35.32 ID:Ef6g+Zfma.net] >>721 Producer-Consumerパターンを使って特定スレッドでだけ処理するのはどう? BlockingCollection<T>使うと楽に実装できるよ
737 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 15:59:40.26 ID:3kDOCDXv0.net] Dllimortで呼び出す関数の引数にはジェネリックは使えないのでしょうか?
738 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 17:32:33.11 ID:CRAyGleP0.net] 使えない
739 名前:デフォルトの名無しさん [2019/09/21(土) 17:41:38.79 ID:dMKiDHPTa.net] >>724 どんな使い方を想定してるの? っていうかそれ、呼び出されたアンマネージド関数側はどうしたら
740 名前:いいの?www [] [ここ壊れてます]
741 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 17:50:18.96 ID:GoVsp8loa.net] >>726 .NETのジェネリックは実行時に特殊化されるから、技術的にはそんなに無茶な話ではないよ
742 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 17:57:47.91 ID:rw4WtgZd0.net] まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね SystemParametersInfoとかでそういう欲求があること自体はわかる
743 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 17:59:11.73 ID:ox/L2PXG0.net] >>727 それじゃ質問者に回答してやってくれ
744 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 18:12:58.46 ID:GoVsp8loa.net] >>729 質問者を馬鹿にするほどには突飛な発想ではないということだよ .NETのジェネリックがどのように実装されているかを知っていれば、できてもいいと考えてもおかしくはない
745 名前:デフォルトの名無しさん [2019/09/21(土) 18:32:15.65 ID:dMKiDHPTa.net] 十分突飛だと思いますけどね。 これ、アンマネージドに限らない。 マネージドだろうが、他のアセンブリで既に定義されてる 非ジェネリックなstaticメソッドをジェネリック化したいと言ってるのと同じ。 だから、呼ばれた側は何すりゃいいんだよw
746 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 18:43:55.34 ID:GoVsp8loa.net] >>731 CのAPIだと、サイズが同一の異なる型を一緒に扱ったり、条件に応じてポインタの指す型の解釈を変えたりとか珍しくないでしょ
747 名前:デフォルトの名無しさん [2019/09/21(土) 18:44:55.69 ID:dMKiDHPTa.net] >>732 そういうのは共用体とかオーバーロードで解決できるでしょ。 ジェネリックを使うって発想は意味不明だよ
748 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 18:46:58.39 ID:3kDOCDXv0.net] >>726 具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと
749 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 19:46:47.84 ID:rw4WtgZd0.net] 一例としてはこんな感じ APIの想定される構造体がBlittableのみならマーシャリング不要なので unmanaged制約にしてアドレス渡しの方が効率は良い public static T GetSystemParametersInfo<T>(SPI uiAction, uint uiParam, SPIF fWinIni) where T : struct { T value; var buffer = Marshal.AllocCoTaskMem(Marshal.SizeOf<T>()); SystemParametersInfo(uiAction, uiParam, buffer, fWinIni); value = Marshal.PtrToStructure<T>(buffer); Marshal.FreeCoTaskMem(buffer); return value; } まあぶっちゃけお行儀的にはオーバーロードだらだら並べる方が正解ではあるんだけどねw
750 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 19:58:38.68 ID:A1p2bytl0.net] c# で必殺技みたいなメソッドがあったのですが思い出せません。どなたかご存知ないでしょうか?
751 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 20:03:15.85 ID:y68BphyG0.net] >>736 リフレクション?
752 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 22:34:09.60 ID:rnFOOH9a0.net] >>736 privateメソッドを外部から無理矢理呼び出すやつ?
753 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 22:42:59.80 ID:70YMyRx+a.net] リフレクションならDynamicInvoke()がなんともかっこいいメソッド名 >>736 のはおそらくはデストラクタあたりを想定してるんじゃないかと思うけど
754 名前:デフォルトの名無しさん mailto:sage [2019/09/21(土) 23:13:56.71 ID:GoVsp8loa.net] DangerousAddRefもなかなか
755 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 01:11:49.71 ID:YKAr5fZO0.net] >>736 オーバーライド!!
756 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 01:26:33.02 ID:01VTDUEXM.net] オーバーロード!!
757 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 01:39:55.72 ID:V8FjsYeid.net] >>736 ラムダ式!
758 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 07:51:48.39 ID:Wx+hr3d10.net] >>718 >>719 さんきう とある製品のRDBMSのSQLに独自の書き方やら関数やら記法やらが混じってるからなんとかしたかったんだけどライブラリとやらを使えばいけるのかな。
759 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 08:33:40.66 ID:6LYYKR960.net] 1) githubで"sql parser"と検索 2) C#で絞り込む 3) 上から順に試す 4) 好みのが見つかったら改造を試みる 少なくとも1から作るよりは圧倒的に楽だし勉強にもなるよ
760 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 09:28:54.26 ID:p/RNYxc40.net] >>726 dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ C#はそういうのをコーディング段階で防いでるだけであって
761 名前:デフォルトの名無しさん [2019/09/22(日) 12:11:14.62 ID:PittLpUUa.net] >>746 〜だろ 馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww
762 名前:デフォルトの名無しさん [2019/09/22(日) 12:16:38.76 ID:PittLpUUa.net] 少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、 longをint2つと透過的に扱ったりするための仕組みじゃありませんwww だからそういうのは共用体やオーバーロードを使うんだってw
763 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 12:28:14.42 ID:GskCdwYSM.net] 端的に答えとけばいいんだよ 余計な講釈を垂れるな
764 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:36:43.63 ID:584djEVu0.net] BitmapをBitmapDataにしたいのですが、使用されたパラメータが有効ではありませんと言われてしまいます。 ファイルから読み込んだbitmapは変換できるのですが、このようにコード上で作ったbitmapはダメです。 何がいけないのでしょうか? Bitmap trimBmp = baseBmp.Clone(rect, baseBmp.PixelFormat); BitmapData bitData = trimBmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
765 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:44:27.94 ID:6/LwH+kT0.net] rectで切り出した後、その切り出した後のビットマップから さらにrectで一部分のロックしようとしてるけど大丈夫? 全面じゃない?
766 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 22:53:39.23 ID:584djEVu0.net] >>751 baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね? でも Bitmap bmp = new Bitmap(100,100) みたいな素画像でもやっぱりLockBitsできないです
767 名前:デフォルトの名無しさん mailto:sage [2019/09/22(日) 23:53:45.92 ID:yl5BH+I+0.net] >>752 >trimBMPにとってはrectは全面 ではなくbaseBmpのrectの範囲って自分で指定しているよね BitmapData bitData = trimBmp.LockBits(new Rectangle(0, 0, trimBmp.Width, trimBmp.Height), ImageLockMode.ReadOnly, trimBmp.PixelFormat); >Bitmap bmp = new Bitmap(100,100) >みたいな素画像でもやっぱりLockBitsできないです できる。そっちもちゃんと引数の指定してみて
768 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 01:34:07.15 ID:CAyWI0VB0.net] private Point CalcPopupLoction(Form launcher, Form popupForm) {} ボタン押したときに上部に表示する モーダルな popup フォーム の位置を計算するメソッドを書きました。 ボタンが左の方にあると、親フォームの左枠をはみ出さないように、popupForm は左揃えで表示。 真ん中へんにあると中央揃え、右端ならボタンとpopupForm を右揃えで表示する感じです。 1つ目の引数の良い名前が思い付きません。 主にボタンを想定してる引数です。 launcher (発射台)はどうもしっくりきません。 parent や baseForm はなんかおかしいのでやめました。
769 名前:デフォルトの名無しさん [2019/09/23(月) 03:14:26.31 ID:QdBzCxoka.net] >>754 そもそもそんなメソッドいらんでしょ。 ポップアップがどこに表示されるべきかはボタンを持つFormが知っているんだから そいつに聞く(そいつのプロパティーとして実装)のが一番
770 名前:デフォルトの名無しさん [2019/09/23(月) 03:28:32.57 ID:QdBzCxoka.net] あー、右に揃える場合もあるのね。 じゃあボタン持ってるFormに void ShowModalPopup(Form popup) みたいなメソッドを持たせればいい
771 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 03:42:05.85 ID:ltbH9/U50.net] こういう使い回しが効きそうなのはいちいちフォームに実装しないで拡張メソッドにでもした方が
772 名前:デフォルトの名無しさん [2019/09/23(月) 03:56:41.99 ID:QdBzCxoka.net] 本当はボタン持ってる方のFormに interface IDialogOwner:IWin32Window { HorizontalAlignment DialigHAlignment { get; } Rectangle Rectangle { get; } } みたいなのをかぶせて、Popupする方のFormでShowDialogをオーバーロードして void ShowDialog(IDialogOwner owner) みたいにするのがいいのかも。 酔っぱらってるんでよく分からなくなってきたw
773 名前:デフォルトの名無しさん [2019/09/23(月) 08:49:12.84 ID:l2jPGLgc0.net] C#でawaitに対応していないメソッドをawaitで非同期実行できるようにする方法を教えてください. 以下のようにしてもActionが実行されませんでした. private async static void SomeHandler() { Console.Write("Burn"); await new Task(new Action(() =>{ Console.Write("[Start]"); Thread.Sleep(2000); Console.Write("[Completed]"); })); Console.Write("End"); }
774 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 08:58:35.82 ID:ZRlL2jPD0.net] https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.tasks.task?view=netframework-4.8#creating-and-executing-a-task
775 名前:デフォルトの名無しさん [2019/09/23(月) 12:17:14.67 ID:3qdqqJ07F.net] bitmapinfo とか dibsection とか bitmapinfoheader とか 勉強してみたら
776 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 14:47:11.75 ID:vpc5pW+6d.net] >>759 TaskCompletionSourceだっけ?うろ覚えですまんが、jsのPromiseオブジェクト的に使える。
777 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 15:20:09.58 ID:LbTjUCX60.net] taskをstartしてないだけだから...
778 名前:デフォルトの名無しさん [2019/09/23(月) 15:46:49.67 ID:s6/Kehza0.net] >>763 ありがとうございます!
779 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 18:09:27.70 ID:7f5aVpAAd.net] どういたしまして!
780 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 19:11:24.16 ID:24/7TZbh0.net] ID:QdBzCxoka 何の話してんのこの人 >>754 変数名が思いつかないとかはこのスレじゃなく クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net https://mevius.5ch.net/test/read.cgi/tech/1494147712/
781 名前:デフォルトの名無しさん [2019/09/23(月) 22:40:56.88 ID:6ZQTgZjHa.net] >>766 交通整理バカw 設計が間違ってるのに名前付けて何の意味がある
782 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 22:48:38.96 ID:CAyWI0VB0.net] >>766 レスありがとうございます。 そんなスレあるの知らなかった。
783 名前:デフォルトの名無しさん mailto:sage [2019/09/23(月) 23:35:14.83 ID:CAyWI0VB0.net] >>754 private Point CalcPopupLoction(Form launcher, Form popupForm) {} 上記は下部のボタンの位置に応じて、大きさのことなるpopupForm の表示位置を計算するメソッド exportButton_Click 内で、 ShowDialog(); で表示する popupForm に戻り値を設定 https://i.imgur.com/ggjo4td.jpg
784 名前:デフォルトの名無しさん mailto:sage [2019/09/24(火) 00:01:07.45 ID:OEzHH54a0.net] >>754 ・Loctionて何 ・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う ・計算だけなら全部Rectangleでいいんじゃないの Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup)
785 名前:デフォルトの名無しさん [2019/09/24(火) 00:03:53.21 ID:ftn8dtDua.net] >>769 だからさ、そのメソッドをどこに書くおつもり? ポップアップを左右どちらに寄せるべきかを知ってるのは特定のFormだけのはずなのに その例のllauncherの型がFormってのは変じゃないか? そもそも何で「左右どちらに寄せるべきかを知ってる」奴のメソッドとして実装しないの? それなら引数で渡す必要ないと思うんだけど。
786 名前:デフォルトの名無しさん [2019/09/24(火) 00:09:30.85 ID:ftn8dtDua.net] >>770 必要な情報は (1) 左右どちらに揃えるか?(HorizontalAlignment) (2) 揃える位置のx座標 だけだね
787 名前:デフォルトの名無しさん mailto:sage [2019/09/24(火) 11:39:03.69 ID:vbZsX/Wo0.net] 書き込みは、人を憎んでコードを憎まずのこころで行いましょう。 たとえクソコードであっても悪いのは書いた人だけです。 コードやプログラミング言語に罪は一切ありません。 コードの悪口はやめましょう。 クソコードの修正と言わず、リファクタリングといえばいいのです。 大量殺人犯や c# プログラマーの醜い心はリファクタリング不可能ですが、コードのリファクタリングはカンタンですよ。 https://www.google.co.jp/amp/s/anond.hatelabo.jp/touch/20180319181104%3fmode=amp
788 名前:デフォルトの名無しさん mailto:sage [2019/09/24(火) 12:11:17.28 ID:yrtqWHxIM.net] 性格の悪さもリファクタリングしてくれ
789 名前:デフォルトの名無しさん [2019/09/24(火) 14:58:01.43 ID:oiN+60axF.net] 性格はコードに滲み出るよ
790 名前:デフォルトの名無しさん mailto:sage [2019/09/24(火) 23:29:02.86 ID:OoYPx0Tk0.net] 性格は分からないけど姿勢みたいなものは見えると思ってる こんなコピペばかりして少しはおかしいと思わないのかな?とかこんな古い書き方して言語の文法ざっとでもいいから一通り見たのかな?とか いいコードを書こうとしてる人とそうでない人の差ってすごくよく分かる。本当に能力無くて頑張って頑張ってるのにひどいって場合もきっとあるんだろうけど
791 名前:デフォルトの名無しさん [2019/09/24(火) 23:44:57.44 ID:3clb0+hp0.net] ようわからんけど動いてるからヨシ!
792 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 07:36:43.68 ID:apbfD+2I0.net] 式木がイケてるらしいですが使いどころが解りません プロの皆さんはどこで使ってますか?
793 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 10:16:37.93 ID:HV92OfVjM.net] >>778 使わない 高度なフレームワークを作るための機能であり、ドカタグラマには全く必要ないから忘れていいよ
794 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 22:57:19.53 ID:5YRgoX3y0.net] >人を憎んでコードを憎まず 逆じゃないんかおい
795 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 23:01:24.46 ID:1MbrNFaz0.net] 自分より給料貰ってる先輩(笑)が クソコードを産み落としていた場合は人もコードも憎む というか蔑む
796 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 23:16:09.44 ID:5YRgoX3y0.net] 何をもってくそコードと言ってるのか
797 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 23:38:23.64 ID:1MbrNFaz0.net] 何を以ってクソコードかは難しいところだが具体例なら無数に挙げられるぞ switchを使わず延々とif-else if分岐 if(flag) return ture; return false; 一行違うだけのメソッド大量生成 マジックナンバーだらけ コレクションはほとんどList かと思えば特にライブラリに必要とされているわけでもないobject[] もちろんパターンマッチングなんて概念は存在しない out代わりにrefを使う boolではなくintをフラグとして使う クラス内のあらゆる場所から明示されず書き換えられるフィールド どう見ても親子関係にない継承 メソッド1個300行以上 これがさぞ大変な処理かと思えばリファクタリングしたら40行で書けた 1行に300文字以上 リソースでもFormsでもない普通のクラスが4000行
798 名前:デフォルトの名無しさん mailto:sage [2019/09/25(水) 23:54:44.99 ID:NtFNmlTfp.net] >>778 ドカタだけどlinqのwhereメソッドの引数を動的に生成するときに使った ここ参考になるよ https://www.atmarkit.co.jp/fdotnet/dotnettips/986dynamiclinq/dynamiclinq.html
799 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:03:29.50 ID:68XB546j0.net] >>783 ぜんぜん許容範囲だな! その程度でくそ呼ばわりされたらたまらん
800 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:08:48.21 ID:QoSQSwcY0.net] >>783 >>switchを使わず延々とif-else if分岐 >>マジックナンバーだらけ >>クラス内のあらゆる場所から明示されず書き換えられるフィールド >>メソッド1個300行以上 >>リソースでもFormsでもない普通のクラスが4000行 今直面してるのにまさに当てはまっててもう >>コレクションはほとんどList こっちはListどころか配列しか使わないんだぜ。もう書き方が完全にC
801 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:09:16.61 ID:NU/jFtK40.net] メソッド以外はどれも影響は大きくないし 多少大きくてもテストできればなんとかなる ちょっとした文化の違い程度の話だ
802 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:10:34.86 ID:NU/jFtK40.net] 初心者が一見してくそ呼ばわりするコードはたぶんくそじゃない わかるから細かい粗が目に付く 普遍的恐怖を知るべきだ ぐちゃぐちゃな循環参照 テストできないメソッド う そ っ ぱ ち の 名 前
803 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:15:27.94 ID:ThQ6mTfg0.net] 突然現れるlinqの長々としたクエリ式 せてめメソッド式にしてくれ
804 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:18:57.61 ID:NU/jFtK40.net] しかしC#いつのまにやらパターンマッチまで入ってたんか…
805 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 00:28:52.23 ID:ZFJdpCv/0.net] sqlを全て文字列結合で作ってるうえに500行以上あったときは後輩に丸投げした
806 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 03:16:32.66 ID:wZcpOMsUd.net] >>780 バグやコードを憎んで、人を憎まず。 こんなこと言ってるプログラマーは意識高い系の偽善者のクズ。
807 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 11:30:46.50 ID:Av/VHz3vp.net] あいつに任せた俺の責任だからって最初から頭数に入れていないから憎みもしない。必要なら全面書き直しもいとわない。
808 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 20:59:42.99 ID:7bLC7yvk0.net] なんでListがいかんのか?
809 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 21:12:02.17 ID:aLxxu1ok0.net] ビットで判定とるのがいかんのか?
810 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 21:18:55.30 ID:fUfQlO4W0.net] 7f63-aXvPからクソグラマーの臭いがする
811 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 21:21:22.68 ID:fUfQlO4W0.net] >>794 時と場合を考えて最適なコレクションを検討しろ >>795 特別な理由がないなら褒められないな
812 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 21:37:16.13 ID:aLxxu1ok0.net] ZDDをboolの配列で評価するの?orz
813 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 21:40:05.70 ID:fUfQlO4W0.net] >>798 特別な理由がないならと言ってるだろうが
814 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 22:03:13.49 ID:QoSQSwcY0.net] windows formsの書き方についてなんですけど メイン画面にタブがいっぱいあってそれを切り替えて……みたいなアプリなんです んで中身見たらFormクラスが1万行オーバーで。画面一つだからって何もかも突っ込んでる感じなんです 画面というかフォーム一つで1クラスみたいなのが通常の書き方なんでしょうか
815 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 22:10:14.52 ID:Av/VHz3vp.net] 普通はブロックに分ける。
816 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 22:13:41.16 ID:fJKX2zi80.net] >>800 タブ毎にユーザーコントロールを作ればスッキリはすると思うよ
817 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 22:23:35.32 ID:lGqB6oAG0.net] >>800 「通常」はどうか知らないけど例えば MDIアプリケーションを作成する https://dobon.net/vb/dotnet/form/mdiapplication.html こういう作り方もある あと一つのフォームに普通のコードはともかくコントロール(InitializeComponentのなか)を多く詰め込みすぎると起動に時間がかかるようになる 現状で問題ないのならそこは気にすることは無いが
818 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 22:53:44.29 ID:d7SzDWCz0.net] >>800 parcial class でタブごとにファイルわける。
819 名前:デフォルトの名無しさん mailto:sage [2019/09/26(木) 23:38:48.19 ID:QoSQSwcY0.net] なるほど参考になりました。 今思えば既にタブごとに部分クラスわけしてファイル別になってたような気がしないでもない……となると実質一クラス10万行か。笑えない
820 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 06:43:42.33 ID:N2euUEC0M.net] >>800 1000行超える時点でオブジェクト指向できてない証拠
821 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 08:33:35.75 ID:1dreLMG90.net] フォーム以外で使わない処理を わざわざ外部のファイルやクラスに作る必要なんてある?
822 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 08:42:46.73 ID:eAUqf5T9a.net] >>807 それで可読性が高まるならやる意味はある
823 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 09:06:13.84 ID:ikgA/i06d.net] C#は1ファイルに全部書けるので必要ないです
824 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 10:07:45.04 ID:NnPkuVhE0.net] 再利用しないならそれでいいんじゃね?
825 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 22:47:27.06 ID:uik+OEWH0.net] お前を含めた全人類が未来永劫そのコードに手を加えない保証があるなら好きにすればいい
826 名前:デフォルトの名無しさん mailto:sage [2019/09/27(金) 23:28:58.48 ID:MmWjZkvh0.net] ググったらタブ大量にあるような場合>>802 がクラス分割のためのメジャーな手法なのね
827 名前:デフォルトの名無しさん mailto:sage [2019/09/28(土) 08:43:54.27 ID:uN9Z5b+x0.net] 游ゴシックの英数文字をMeasureStringで取得した矩形を使ってDrawStringすると高さ不足で表示されない 矩形を使わなきゃ表示はできるから良いけどもやもやする
828 名前:デフォルトの名無しさん mailto:sage [2019/09/28(土) 10:37:47.08 ID:elJniuwU0.net] フォント周りおかしいのはMS伝統では ないだろうか? Q
829 名前:デフォルトの名無しさん [2019/09/28(土) 14:09:54.66 ID:51nJyp6ja.net] そんなざっくりした話じゃ、どうせお前自身のコードのバグだろって 反応しか返ってこないと思うw
830 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 01:52:26.51 ID:sVRG+wNI0.net] インターフェイスと抽象クラスってどう使い分ければ良いのでしょう? ググってもよくわかりません。
831 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 02:47:00.08 ID:TNnn17Gh0.net] インターフェースなら継承関係のない複数のクラスのように 振る舞うことができる
832 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 02:49:22.44 ID:HU0MDVmv0.net] 大雑把言えば プロパティとフィールド(値)を保持するのがクラス クラスのメソッド(挙動)を公開するのがインターフェイス
833 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 02:54:07.57 ID:TNnn17Gh0.net] それが抽象クラスとなにが違うのだ?と彼は聞いているわけで
834 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 03:01:23.20 ID:HU0MDVmv0.net] インターフェイスは値を持たないし 原則として挙動の実装も持たせない
835 名前:デフォルトの名無しさん [2019/09/29(日) 03:20:49.12 ID:m1n6jIU5a.net] >>816 使い分けで悩む必要はないと思うよ。 インターフェイスで目的が達成できるならあえて抽象クラスを使う理由はないのだから。 たぶん使い分けが分からないのではなく、インターフェイスの使いどころが分からないだけじゃないのか。 よくわからなくてもとにかく実際コードを書いて使ってみることが重要。 別に難しい話じゃないので使ってるうちに自ずと分かる。たぶん
836 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 03:35:49.46 ID:TNnn17Gh0.net] 多重継承的なことがしたくなったらインターフェースを使う くらいな感じでいいのかもね
837 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 07:08:46.93 ID:5VaVy3IA0.net] 私もよくわからないんですが、インターフェースって実装内容は問わないけどこの名称のメソッドは用意しなさいよってコトですかね? インターフェースでメソッドを定義しても、継承したクラスがそのメソッド名に合ってない実装をしてしまったらと考えるとインターフェースのメリットがイマイチピンときません
838 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 07:26:53.36 ID:ehZkSMIn0.net] 疎結合
839 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 08:56:25.44 ID:qdFsd7WD0.net] >>823 継承したクラスで変にオーバーライドされたら… なんて気にしたら何も書けなくなるよw それはオーバーライドした奴の責任だから気にしてもしょうがない
840 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 09:00:39.96 ID:TNnn17Gh0.net] それって抽象メソッドでも同じ事じゃないの
841 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 11:47:55.74 ID:YvnTsZym0.net] 多態で使うんだよ 用意しなさいってのは発想が逆で、インターフェースに定義されているプロパティなりメソッドなりが実装されていることが保障されていると考える 実際の実装は気にせずに呼ぶ側はインターフェースのメソッドを呼べばいい
842 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 11:59:54.10 ID:J9ITXYeqp.net] 抽象クラスは重複の排除で使う、インターフェイスはテストする時の視点で必要 クラスAがクラスBの機能を利用する時に クラスAはインターフェイスに対して実装しとけば クラスBの変更に影響を受けないし、 テストする時にクラスBの代わりを作るのがインターフェイス部分だけになる これがもしクラスAがクラスBの抽象クラスに対して実装すると、 クラスAをテストするときに抽象クラスの不要な部分まで要求されてしまう また複数人開発においてもインターフェイスを利用すれば各個人が独立に作業しやすくなる
843 名前:デフォルトの名無しさん [2019/09/29(日) 12:01:49.30 ID:3s0zt66kF.net] 呼んだはずのメソッドが(インターフェースでは要求されてるのに)実装されてなかったら コンパイルエラーじゃなくて実行時に例外吐くか unknownmethod()みたいな呼び方してくれると便利
844 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:05:37.87 ID:INBbqatbr.net] 不便だろ
845 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:07:56.33 ID:wmQ9rxKs0.net] クラスに由来しない振る舞いを定義するのがインターフェイスとも言えるね。 良く例示される「動物」クラスで考えると。 ・「動物」は動くのだから「移動」メソッドに必然性がある ・だけど「移動」するのは動物だけではない ・いま「移動」と言うメソッドに着目して操作を行いたいとする ・「移動」は動物でも自動車でもロボットでも行う ・でも自動車もロボットも動物ではないのでいからそのメソッドの由来を「動物」クラスに求めるわけにはいかない ・加えて、動物や自動車やロボットに直系する(基底)クラスもない ・故に「移動」メソッドの由来を「動物」クラスにではなく「移動」インターフェイスに求めてみる ・・・的な。
846 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:08:06.40 ID:INBbqatbr.net] 実行時に例外吐くのはめちゃくちゃ恥ずかしい コード書いたやつはバカですと言う証明 私はデバッグもできない馬鹿ですで表明してるようなもの
847 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 12:13:32.63 ID:INBbqatbr.net] コンパイル時にエラー吐くならそこでデバッグできる 実行時エラーなら全ての場合でエラーがないことを実際に確認しなければならない どちらが便利かわかるだろ
848 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 19:29:34.79 ID:TNnn17Gh0.net] >>831 いい例えだね 俺も使わせてもらうわ
849 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 20:03:13.25 ID:sVRG+wNI0.net] 先日、マンガ村の運営者が著作権法違反の容疑で逮捕された。 c# プログラマもマンガ村と同様の共有システムgit等を利用し、マンガやソースをインターネットを通して共有している。 github など分散型のバージョン管理システムを利用している c#プログラマはマンガ村の管理者と同じ位置にいるといえる。単なる利用者ではない。 c# プログラマはマンガ村管理者と同一人物といえるので、著作権法違反の共同正犯として刑務所にぶち込むべき。
850 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 22:53:02.75 ID:1CaVkali0.net] c#のインターフェイスにはプロパティも宣言できるよね あれは実質的にはフィールドと同じ様な感覚で使えてしまう
851 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 23:37:43.33 ID:uMWzDoEma.net] だって>>831 のような解釈は時代遅れだし特にC#(というかMS系)では一般的ではないからな 今時は「動物」という一般的実在だろうが「移動できる」という抽象的性質だろうが区別せず、 実装を限定したくない場合は原則常にインターフェイスを使うのが一般的だ 特にMSの場合は顕著で、ほぼ全クラスの全メソッドをインターフェイスに定義するというスタイルを取ることが多いし、またそれを推奨してもいる
852 名前:デフォルトの名無しさん [2019/09/29(日) 23:56:27.42 ID:8QPFQcOxa.net] ほんとかよそれwwwww
853 名前:デフォルトの名無しさん mailto:sage [2019/09/29(日) 23:59:46.39 ID:k4CvVXqN0.net] >>837 初心者スレで珍妙な独自理論を一般的だなんて教えるのはやめれ
854 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 00:22:33.73 ID:LVz3OUV70.net] 今年始めた初心者だが クラスが大カテゴリ メソッドが小カテゴリ インターフェースが小カテゴリらの存在を保証する中カテゴリ このくらいの認識しかなかったわ
855 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 00:32:45.02 ID:C9eDYcBn0.net] 宣教師と見た 次にスクリプト言語を薦めて来るぞ
856 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 00:57:12.69 ID:PJtB8DfJ0.net] 831 だけど
857 名前:B 複数のクラスインスタンスの動的読み込みとか始めるとそんな感じになることもあるよ。 プラグインとかの識別に便利だし。 そうだとしても、たぶん 831 の1行目と矛盾してないでしょ。 ただ初心者相手の説明にこんなこと言いだしたら収拾がつかなくなるし、 全メソッドをってのは、まあ頑張ってな、と返すしかないけど。 [] [ここ壊れてます]
858 名前:デフォルトの名無しさん [2019/09/30(月) 01:48:44.79 ID:dOfJdIlZ0.net] すまんが、エラーメッセージにあるカッコ内の行番号らしきものってさあ 片方は間違ってる行っぽいけど、もう片方は一体何なんだぜ?
859 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 02:02:42.92 ID:zBUNKmmLa.net] >>843 その行の何文字目かって意味 例えばファイル先頭に「int a = "";」と書いたら(1,5,1,6)でエラーが出るけど これは「1行目5文字目〜1行目6文字目」の箇所でエラーになっていることを表している
860 名前:デフォルトの名無しさん [2019/09/30(月) 02:09:52.87 ID:dOfJdIlZ0.net] >>844 ありがとう!何文字目かなんて全然わかんなかったよ
861 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:08:24.00 ID:fD1lXHN30.net] 質問いいですか?
862 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:10:26.75 ID:ws0x1Tjj0.net] >>846 駄目です
863 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:17:51.94 ID:nNBu0V63d.net] >>847 その返しはこのスレではいかんだろ(笑)
864 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:41:05.60 ID:bmAzH1750.net] トイレ行ってきていいですか?
865 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 08:55:42.37 ID:BmNMZ9TsM.net] もう居るだろう
866 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 09:29:49.98 ID:fD1lXHN30.net] では質問しますね Timerコンポーネントで Timer1.Interval = 5000;とすると、プログラム起動後5秒後に初めてTimer1_Tickが 実行されますよね、これを起動時に1度実行したいのですがどうしたらいのでしょうか Form1_Loadに書けばいいような気がしますが引数がわからない
867 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 09:31:40.04 ID:Q4pocwaT0.net] 忘れたけどTimerってTimers.TimerもThreading.Timerも大体どんな種類の奴でも最初のディレイタイム指定できなかったっけ?
868 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 09:58:04.89 ID:fD1lXHN30.net] >>852 レスサンクスです Delayでぐぐってみましたが、プログラムを遅延させるほうのDelayばかりヒットして なかなか見つかりません、Timerのプロパティにそういうなのがあればいいんですが
869 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 10:05:34.65 ID:g7w6SBZq0.net] >>853 処理を関数化しておいて、コンストラクタから呼んだらいいんじゃね? 別にタイマーから呼ばなくてもいい
870 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 10:13:21.52 ID:e45pyL0lM.net] >>851 最初100で、中で則5000書き換えじゃあかんかったっけ
871 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 10:40:02.13 ID:fD1lXHN30.net] >>854 サンクスです Timer1_Tickの中の処理をゴソっと別にうつすんですか、確かにうまくいきそうですね >>855 さんくすです Timer1.Interval = 100;からTimer1.Interval = 5000;に変更ですか これもうまくいきそうですね、厳密な秒数は必要じゃないですし
872 名前:デフォルトの名無しさん [2019/09/30(月) 10:47:03.32 ID:ZcJV4ZEKa.net] >>851 どんな方法使ってもいいけど後で読んだ時に何をやってるか 分かりやすいのが一番だね public Form1() { InitializeComponent(); Form1.Load += (sender, e) => OnEvery5Seconds(); Timer1.Tick += (sender, e) => OnEvery5Seconds(); } void OnEvery5Seconds() { ..... } こうやった場合、FormのLoadイベントより前にOnEvery5Secondsが呼ばれる可能性が あることは注意する必要がある。(実際にはないと思うけど)
873 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 11:16:30.25 ID:fD1lXHN30.net] >>857 れすさんくすです なるほど、こんな書き方もできるのですね、うまくつかえばすっきりまとまりそうです
874 名前:デフォルトの名無しさん mailto:sage [2019/09/30(月) 23:02:09.82 ID:S0uOX3sP0.net] >>852 流れから推測するとたぶんWindows.Forms.Timerクラスだね
875 名前:デフォルトの名無しさん [2019/10/02(水) 01:49:10.77 ID:4PgWnh+40.net] 非同期メソッドでちょっとだけ同期処理するのにはどうすれはいいのですか? async Task ABCasync(){ ABCasyncの呼び出し元には、終わるまで待っていてもらいたい処理(); //ここでtaskで呼び出し元に何かを返せたりするのかしら? ABCasyncの呼び出し元には、待っていてもらう必要のない処理(); }
876 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 02:14:39.18 ID:mDEdylW50.net] 強引に実装することは可能だがメソッド分割すべき
877 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 07:28:12.15 ID:YugGu4Uj0.net] クラスは知識 メソッドは機能 という認識は事のほか難しいんけ?
878 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 08:07:26.42 ID:Vm3TcWW10.net] >>862 そういう一般的でもない訳のわからない解釈を出されても、普通の人には理解できないかおかしな理解のまま突き進むことになるだろう
879 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 08:15:53.12 ID:gR9x9lAq0.net] クラスは学校とかのクラスって認識でいい
880 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 11:07:45.90 ID:9X+f8gXkr.net] ゲームのクラスの方がわかりやすい気がする 戦士 魔法使い 僧侶 盗賊 それぞれできることが違う
881 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 11:18:19.95 ID:VgxhRvTXp.net] あはは、まあ、学校のクラスだと対抗戦が出来るくらいに似たり寄ったりだから意味が分からないよな。
882 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 11:59:15.15 ID:8UOZigmra.net] 逆に、同一のクラスの異なるインスタンスなんてのもできないしね。
883 名前:デフォルトの名無しさん [2019/10/02(水) 12:12:09.33 ID:VOEDuxVKM.net] >>865 じゃぁ男女別は? どっちのクラスが上位なの? それとも同格で、男戦士 女戦士ってなるの? 半魚人タイプとか4足系の戦士は?
884 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 12:26:49.61 ID:9X+f8gXkr.net] 出来ることが変わらないなら基本変えなくていいよ 設計次第だけど 質問の内容の男戦士と女戦士で何が違うのかはっきりしない 力などの属性値(プロパティ)だけが違うなら分ける必要はないわな 半漁人でも4足系の戦士でも数値しかかわらないなら同じ コードが共通になるなら基本的に分けなくてもいい
885 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 19:59:53.93 ID:dZRRj/1Z0.net] 強引に何かに例えるよりコード書いてみた方がいいよ
886 名前:デフォルトの名無しさん mailto:sage [2019/10/02(水) 20:20:25.32 ID:IV023jBj0.net] C#はじめて最初の日に読み飛ばすところで議論しても不毛だよな >>870 に賛成
887 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 00:57:21.26 ID:z1GHd6rla.net] 質問です 工場とかインフラの制御ソフトモドキを成果物としてWindowsアプリケーションの形式でC#で作りたいんですが、この2冊終わった後にWindowsアプリケーション開発の本買うなら何が良いですか? また、本が時間の無駄だとしたらどこのサイトを参照すれば良いですか? 上記の件よろしくお願いしますm(_ _)m 1冊目 なるほどなっとくC#入門 2冊目 C#プログラミングのイディオム/定石&パターン
888 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:02:05.17 ID:t45ZyD0e0.net] そりゃ一番はMicrosoftのチュートリアルでしょ https://docs.microsoft.com/ja-jp/visualstudio/ide/step-1-create-a-windows-forms-application-project?view=vs-2019
889 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:16:35.63 ID:z1GHd6rla.net] >>873 ありがとうございますm(_ _)m
890 名前:デフォルトの名無しさん [2019/10/03(木) 01:19:35.07 ID:pRlPv1jza.net] >>872 FormならGUIの作り方は必用なことをググって調べながら実際に作ってみるのが一番。 本は1冊以上は読むだけたぶん時間の無駄。 何かを制御するなら、それが大企業の製品で.NET用のライブラリが用意されているのでない限り たぶんアンマネージドの知識が必要になる。 これは多分本はないので自分でググって調べる あと多分非同期処理は必須。 最初.NET1.x時代の生のThreadとか使う記事に軽く目を通して、 その後は今時のTPLや非同期メソッドの記事を読めばいい。 本もあるけどたぶんweb上の記事で十分
891 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:26:24.07 ID:wBmuAStK0.net] 非同期メソッドの実行自体は慣れたけど win10のアップデート強制再起動時に 非同期処理中のタスクをきちんと終了させる方法がわからん 突然書き込み中のファイルがぶっ壊れそうで怖いわ
892 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:35:18.06 ID:z1GHd6rla.net] >>875 ありがとうございますm(_ _)m
893 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 01:39:57.58 ID:dygVDi5Yd.net] >>875 工場の制御ってRS-232CとかPLCとかGPIBとかやろ 別にアンマネージド必要ないだろ
894 名前:デフォルトの名無しさん [2019/10/03(木) 01:45:45.89 ID:pRlPv1jza.net] >>878 そうかもしれないけど拡張ボードの型式でライブラリはアンマネージドdllだけかもしれない。 USB接続でアンマネージドdllの可能性もある 何とも言えない
895 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 15:11:12.65 ID:xDvwVpv4p.net] マネージドなドライバーが無いなら使わないって選択をだな。
896 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:33:07.86 ID:65+5RZIm0.net] UI操作とawaitを使った非同期メソッドをまとめたasyncメソッドを別スレッドから呼び出すにはどうすればいいですか?
897 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:36:08.92 ID:XDm3DYNpd.net] >>881 ??何が聞きたいの?
898 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 18:42:35.24 ID:65+5RZIm0.net] >>882 すみませんでした。 例えばこういう感じのメソッドを別スレッドから呼び出す方法を教えてください。 async Task DoSome() { label1.Text="処理中..."; await DoLong(); label1.Text="完了"; }
899 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:27:59.44 ID:AKImZpfb0.net] 正直設計を考え直した方がいいけど メインスレッドで動作してる間に TaskScheduler.FromCurrentSynchronizationContext() でTaskScheduler確保しておいて、その"別スレッド"内で new Task(() => DoSome()).RunSynchronously(taskScheduler) する
900 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 20:48:28.97 ID:Cd3mzBuJ0.net] こうじゃダメなの? Invoke((MethodInvoker)(async () =>DoSome()));
901 名前:デフォルトの名無しさん mailto:sage [2019/10/03(木) 22:23:35.99 ID:Y5r0apvPr.net] 呪文化しただけにも見える
902 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 00:31:32.74 ID:hyuh0V300.net] メソッド側を修正する必要があるけど、 こういうことでは? 別スレッドからのUI操作 https://qiita.com/mounntainn/items/8a2b4f1cf47bd02657f3
903 名前:デフォルトの名無しさん [2019/10/04(金) 01:26:24.02 ID:oVLixzTMa.net] >>883 やっぱりそういうのは非UIスレッドからも呼び出せるようにする、ではなく、 逆に普通にUIスレッド専用のメソッドとして提供して、 もし必要ならXMLコメントとかで「UIスレッド以外からの呼び出し禁止」って 明示するのが筋なような気がするw
904 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 09:42:07.42 ID:7JHQ1IR60.net] >>884 >>888 filesystemwatcherのハンドラから呼び出すと別スレッドからの呼び出し扱いになってしまいます。
905 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 09:50:12.44 ID:K3mQ1Iatp.net] まあその用途ならやっぱコントロールのInvokeの中で呼べばいいだけの話しだな DoLongの中でさらに入り組んでるとデッドロックしそうだけど
906 名前:デフォルトの名無しさん [2019/10/04(金) 14:31:48.61 ID:RxmXvWZXa.net] こんなの考えてみたが、あんまり便利でもないなw private bool TryOnUIThread<T>(EventHandler<T> eh, object sender, T e) where T:EventArgs { if (!InvokeRequired) return false; Invoke((Action)(() => eh(sender, e))); return true; } private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e) { if (TryOnUIThread(FileSystemWatcher_Changed, sender, e)) return; var t = DoSome(); }
907 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 15:21:51.76 ID:5G6hsRzp0.net] FileSystemWatcherはSynchronizingObject持ってんじゃん 設定しとけば勝手にBeginInvokeでイベントハンドラ呼んでくれるよ
908 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:15:38.99 ID:hjSAU91p0.net] 質問なんですが 設定ってどこにどうやって保存してますか? .configが今ならベストなんでしょうが、保存先が C:\Documents and Settings\UserName\Local Settings\Application Data\ になり、.iniのように、アプリをコピーで2つの設定が使えるようになりません .configはファイルの場所が遠くて変更しにくい、iniは古くてC#で扱いにくい どうしてますか?
909 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:23:45.47 ID:BObIlSOA0.net] >>893 インストールするアプリはユーザーデータフォルダのどっかに保存しないと駄目じゃん どこでも置けるやつはexeと同じ階層に設定ファイルあったほうが使いやすいじゃん ってだけしか気にしたことない
910 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:30:58.10 ID:hjSAU91p0.net] >>894 れすさんくすです 確かにそのとおりだとおもいます インストーラーではなく、ZIPとかで配布で、ちいさなアプリで、主にシングルユーザーで ってなると.iniになるんでしょうか?
911 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:31:02.26 ID:elsuYLim0.net] >>893 設定を保存するクラスを作って、xamlかjsonにシリアライズ アプリのコピーで使い分けるなら、保存場所はアプリのexeと同じフォルダー
912 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:34:16.80 ID:BObIlSOA0.net] >>896 xmlとjsonなんて編集できるツールあるの? パンピーにインデント壊さないでねなんて無理よ
913 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 10:43:34.43 ID:elsuYLim0.net] >>897 元の質問に設定ファイルを手動で編集したいなんて書いてないが
914 名前:デフォルトの名無しさん [2019/10/05(土) 10:47:20.84 ID:xk/GxZ7j0.net] jsonもxmlもインデント関係ないから自由にさせろ 強制したいならyaml使え
915 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 12:25:09.61 ID:8Jk2Tveb0.net] >>897 インデントわろた
916 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 12:42:35.73 ID:sqkLDT76d.net] >>897 インデントwwww
917 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 15:47:01.45 ID:BObIlSOA0.net] インデントっていうかカッコの対応? でもその一点でxmlとjsonっておよびじゃ無くない? これらを使うなら設定ツールが必要になると思う
918 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 16:03:44.47 ID:8Jk2Tveb0.net] よく出てこれたな
919 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 16:30:09.26 ID:BObIlSOA0.net] >>903 何度でも言えるよ xmlとjsonは設定ツールがないと使えないゴミ
920 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 16:44:26.62 ID:LN1PiSPK0.net] 設定画面ぐらい作れよ
921 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:02:10.69 ID:8Jk2Tveb0.net] >>904 よおインデント
922 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:07:55.98 ID:hjSAU91p0.net] >>896 れすさんくす 結構ハードなことやってるんだね、一度クラス作ったら一緒か
923 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:16:21.03 ID:q6cvuv6U0.net] >>906 よおインシデント
924 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 17:17:03.15 ID:JDr+zhso0.net] >>907 今どきならjson.netを使うだけ ググればわかるけど呆れるほどかんたんだよ
925 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 18:01:24.61 ID:vEDwovccd.net] インポテンツ
926 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 18:06:22.26 ID:PVJcrjgV0.net] 初心者スレやからね
927 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:34:08.92 ID:hjSAU91p0.net] >>909 さんくす、ライブラリが公開されてるのか みんなこれ使ってるの?
928 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:36:45.83 ID:1kVSHcIG0.net] 令和の時代の新規プロジェクトでiniファイルはありえんだろw
929 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:38:02.29 ID:1kVSHcIG0.net] >>912 今のところデファクトスタンダードなライブラリだね
930 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:39:42.31 ID:BObIlSOA0.net] >>913 設定ファイルをユーザにどうして欲しいの?
931 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:46:18.14 ID:1kVSHcIG0.net] >>915 サンプルのjsonを添付してここを変更しろとドキュメント付けとけば問題ない インデントが変わっても問題ないし
932 名前:デフォルトの名無しさん [2019/10/05(土) 19:51:52.36 ID:kB6gz2T/F.net] >>913 www6.uniovi.es/cscene/CS3/ values.c
933 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:56:00.01 ID:8wZmV3QG0.net] >>912 俺はDataContractJsonSerializerだな これなら標準ライブラリだからインストール不要
934 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 19:57:33.02 ID:BObIlSOA0.net] >>916 jsonはカッコの対応で死ぬわ っていうかxmlもjsonもiniファイル駆逐できるほど性能よくねーじゃん っていうか用途が違うものを強引に適用しようとしてない? 設定ファイルに書いたコメントも消えちゃうしね
935 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:01:44.88 ID:BObIlSOA0.net] iniファイルを時代遅れだと主張するなら xmlやjsonで吐き出して設定ツールぐらい用意しろってことかな? それなら理解できるけど xmlとjsonのテキスト編集はキツイ
936 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:08:26.65 ID:1O88xYRBd.net] ユーザーがやることはjsonの値をちょい変更するくらいなのになんでカッコ対応が問題になるんだよ ユーザーがカッコを書く必要なんてないのに
937 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:11:42.09 ID:BObIlSOA0.net] >>921 いや、だからそれどこよ? ってのを見つけるのも結構骨が折れる作業よ だから、コメントをjsonファイルに書いておくだろ? ところが次のアプリの書き込みで消えてるんだなw
938 名前:デフォルトの名無しさん [2019/10/05(土) 20:13:16.91 ID:jRdA7zB80.net] 話はよーわからんが、JSONに慣れれない人もそれがあんたの能力なんだから しょうがないんじゃない
939 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:13:46.83 ID:WowcC4IHr.net] >>922 ちゃんとしたエディターかIDE使えば? VScode使えば対応簡単だけど まさかメモ帳でやってんの?
940 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:16:05.57 ID:BObIlSOA0.net] そもそもバグったときに凶悪であることは認めるだろ? 俺らだってxmlやjsonファイルでユーザーが編集したおかしな箇所を プログラムでピンポイントで指摘できない このファイルは完璧でないと読めない そんなモノをユーザーに触らせるような運用は間違っている 客がいいって言うならいいけど
941 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:16:19.70 ID:WowcC4IHr.net] vscodeとかtsとかnode.jsとか設定はjsonだけど それで大問題にはなってない みんな使いこなしてる 何故君だけ使えない? iniファイルなんて実際死んでるよ?
942 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:16:43.74 ID:BObIlSOA0.net] >>924 それを客に言うの? 趣味ならいいけど
943 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:17:55.69 ID:WowcC4IHr.net] >>927 客がなんでjsonファイルいじって中にコメント書くのかが分からん お前がいつまでボケ続けるのか興味があるが…
944 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:18:25.25 ID:BObIlSOA0.net] >>928 え?開発者向けなん?
945 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:19:04.85 ID:r/LR5Bg3d.net] iniファイルとかWin16の時代の化石だろ
946 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:19:40.75 ID:WowcC4IHr.net] 本当にいつまでボケ続けるのか 実務に携わってないんだろうなってのはわかる 空転を本人が気づいてない
947 名前:デフォルトの名無しさん [2019/10/05(土) 20:20:51.17 ID:jRdA7zB80.net] よく出てくくる、一本道コードのVisual Basicおじさんでしょ
948 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:21:03.98 ID:BObIlSOA0.net] はっきりさせておくけど ・設定ファイルをテキスト編集でユーザに触らせたい →xmlやjsonは向かないんじゃない? ・設定ファイルをユーザに触らせない →なんでもいいんじゃない? ってことな
949 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:22:45.53 ID:BObIlSOA0.net] あともう一つ ・ユーザは開発者である →なんでもいいんじゃない って感じな
950 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:24:09.45 ID:WowcC4IHr.net] ・設定ファイルをテキスト編集でユーザに触らせたい の時点で間違ってる バックアップすら取るかどうかわからんやつらに編集させんな馬鹿
951 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:24:53.35 ID:hjSAU91p0.net] >>914 なるほど、これはもうjson.netいれるしかないですね >>918 MS謹製のJson、これはかなりとっつきやすそうさんくす
952 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:25:02.19 ID:BObIlSOA0.net] >>935 じゃあ、俺と君の意見は一致してるね
953 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:25:51.75 ID:WowcC4IHr.net] ボケた会社の〜ボケた開発者が〜ボケた客にボケたことをさせて〜 メンテナンス費用だけとるつもりですか〜 死ね糞ゴミ!
954 名前:デフォルトの名無しさん [2019/10/05(土) 20:28:30.38 ID:jRdA7zB80.net] でも、初心者なのに仕事を取ってくる勇気は大したもんだよね
955 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:38:04.30 ID:8wZmV3QG0.net] >>933 俺なら >・設定ファイルをテキスト編集でユーザに触らせたい →そんな仕様にはしない なぜならあらゆるフォーマットに対応する実装とテストなんてしたくないし そもそも設定をテキスト編集するアプリとか使いにくい >・設定ファイルをユーザに触らせない →xmlにする なぜなら実装が簡単だし、開発者(俺)ならテキスト編集できるから
956 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 20:51:43.64 ID:RYV31rLj0.net] レガシーコードってなんかかっこいいから、どんどん増やすべき。 伝説の武器みたいなものでしょう。
957 名前:デフォルトの名無しさん [2019/10/05(土) 21:28:22.83 ID:Apziqq2fa.net] >>936 2chだとやたらとJSON推しの人が多いけど、.NET標準のシリアライザは他にもいろいろあるよw JSONに固執する必要がないなら他を検討した方がいいと思うけど
958 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 21:40:37.42 ID:kmFdI7ZBM.net] MSがJSON推しだからね
959 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 21:42:52.25 ID:mrk3SroR0.net] JSONは連想配列に順序の保証がない デバッグで差分比較するとかができない
960 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 21:45:37.47 ID:ZEfzfdRr0.net] 連想配列に順序ってそんな重要なんか
961 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 21:50:21.48 ID:SzWcISg6d.net] >>942 .NET標準でjson以外にほかにいろいろシリアイザがあるって、XML以外何かある?
962 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 21:54:42.26 ID:hjSAU91p0.net] >>942 なるべくネット上に解説とかサンプル多いと楽かなっと 多数派に流されるお
963 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 22:05:26.81 ID:VWTAP42j0.net] json schema用意すればvscodeで補完効くし、間違いも指摘してくれるし、普通json使うわ
964 名前:デフォルトの名無しさん [2019/10/05(土) 22:54:13.79 ID:Apziqq2fa.net] DataContractJsonSerializer、使ったことなかったが調べた感じ 一通りの機能はあるし、バージョントーレラントみたいだし、別にこれでもいいねw バージョントーレラントじゃないと思ってたが、勘違いだったみたいだ。
965 名前:デフォルトの名無しさん mailto:sage [2019/10/05(土) 23:34:01.62 ID:1i4Kj4Snd.net] トーレラントって何かググってみたけど中華鍋しか出てこない
966 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 01:39:32.41 ID:z+z4mE1D0.net] 確かにJsonはコメントが書けないか コメント用の文字列メンバを予め確保すれば良いのかな
967 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 01:49:26.58 ID:DPash9Py0.net] jsonのシリアライザ/デシリアライザは送受同じライブラリを使わないと、割とめんどい。 DateTimeの扱いとか。 あとライブラリによってはpublicクラスじゃないとダメとか変な制限があるものも・・ DataContractJsonSerializerは変換遅いし、いちいち[DataContract]や[DataMember]などのアノテーションがめんどい
968 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 02:10:45.36 ID:uOvq13Pn0.net] 以前REST APIを作ったときはVisual Studioがjson.netを利用するコードを自動生成してたけど、今はDataContractJsonSerializer化されてるのかな?
969 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 07:22:38.42 ID:DbrcOQgy0.net] >>953 System.Text.Json
970 名前:デフォルトの名無しさん [2019/10/06(日) 11:26:53.05 ID:yc9LKsYB0.net] >>939 software.aufheben.info/kouza/kouza_socket.html >936 cjson
971 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:18:55.28 ID:jjEkd1/A0.net] windows formsアプリについての相談なんですけれど、ロジックと見た目を分けろって聞くじゃないですか。なのでそうしようと思ったんです 例えばユーザーコントロールを作って、そこに何かしらの処理を行うボタンを配置したとします それで自分が考えたのは、計算をするクラスをユーザーコントロールクラスの内部クラスとして作る、ユーザーコントロールクラスのフィールドとしてその計算するクラスのインスタンスを持たせる でボタンが押されるイベントで計算をするクラスのオブジェクト.calculate()みたいにする 設計としてはこんな感じでも大丈夫ですかね?アプリを作る時に内部のコードはこう実装するみたいなことを教えてくれる本が無くてどう設計していけばいいのかわからないんです
972 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:29:48.44 ID:ofI4YMfJM.net] 右も左もわからないうちから俺俺アーキテクチャとか考えないで MVCやMVVMでも勉強したらいいと思うよ それから最強のアーキテクチャを考えるのでも遅くない
973 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 12:31:03.82 ID:U/2g+4lB0.net] >>956 >ロジックと見た目を分けろ windows formsアプリじゃなくWPFやった方がいいんじゃない? windows formsでそんな組み方するの逆にめんどくさい
974 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:48:38.81 ID:wAV7A9/e0.net] >>955 cjsonはわかりやすいのかな、ちょっとしらべてみるさんくす
975 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 13:52:51.65 ID:44yIwJmG0.net] >>956 そんなことしなくて良い 画面アプリなんて使い捨て上等 サーバーサイドと画面(クライアント)を分けろって話で 一つのアプリでそんなことやっても無意味
976 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 14:51:46.94 ID:BLgAYnXt0.net] そんな訳は(規模にもよるけど)当然無い。
977 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 15:03:12.76 ID:Ih3UpniZ0.net] 「既存メソッドの処理なんですが?ちょっと時間かかっちゃうんですよねー プログレスバーとかつかないですかね? 処理の進行状況も表示して」 こんな簡単な要望ですら そいつはケツまくって逃げ出すよ 花京院の魂を10000個ぐらい
978 名前:かけてもいい絶対だ 処理と表示は一見関係ないように見えて実は密接に関係していて 絶対に切り離せない 不可能なことを可能だと言う技術者を信用してはならない 何年もやっていてこの程度の因果関係もわからんような雑魚から 教えを請いてはならない [] [ここ壊れてます]
979 名前:デフォルトの名無しさん [2019/10/06(日) 15:33:01.89 ID:ZrFisUz2a.net] >>956 何でユーザーコントロールの話になるのかよく分からんけど、 >ユーザーコントロールクラスの内部クラスとして作る この部分は変だけど(内部クラスにする必然性がない)、その後の部分はそういう認識でいいと思うよ。 FormでもUserControlでも、基本的に書いていいのは上に乗ってる コントロールを操作するコードとイベントハンドラだけ。
980 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 18:11:15.25 ID:SEX7i46w0.net] >>962 C#にはIProgress<T>というクラスもタスクも横断的に使える便利なIFがあるから あんたが思っているようなことはない つか、偉そうなのにこれ知らないのか?
981 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 18:45:20.34 ID:pgF6GacOr.net] 自分は頭が悪すぎてIProgress<T>のどこが便利なのかわからないので 違う仕組みでやってる
982 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 19:21:15.12 ID:Ih3UpniZ0.net] >>964 はぁ? 既存の何も考えずに作ったメソッド(内部)のプログレスバー(表示)を分離したまま実装できないだろってのが俺のレスの主旨なんだけど 理解した上で反論しようとしてんの? Mr.ドン・キホーテ?
983 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 19:26:16.12 ID:SEX7i46w0.net] >>966 いや、簡単に実装できるよ 君が知らないだけで
984 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 19:36:10.31 ID:Ih3UpniZ0.net] >>967 あっそ、絶対無理なのにバカだなお前 テメーはさっさと技術者やめて詐欺師に看板替えろ
985 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 19:38:07.20 ID:fpn8B7qc0.net] 昔はイベントハンドラで実装してたな いまならObservablePropertyあたりでやるんかねRxとかどうも上手く使えてる気がしない
986 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 19:43:10.12 ID:fpn8B7qc0.net] >>968 いやできるだろう
987 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 19:53:20.87 ID:SEX7i46w0.net] >>969 確かにmvvmだとReactiveProperyを上位に伝搬するのが楽だし俺もそうやっている でもFormsの話のようだからIProgress<T>を出しました
988 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 20:02:50.65 ID:dGqjDCnwr.net] FormsだとしてもIProgressは不便だと思うよ
989 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 20:07:52.17 ID:DbrcOQgy0.net] >>972 なぜ?
990 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 20:18:09.12 ID:LuDxacSca.net] ID:Ih3UpniZ0って昨日iniファイル以外認めないって主張してた御仁か 15〜20年くらい前のスキルしかもちあわせてない人でしょ 技術的なキャッチアップも人間性の向上も怠って年齢だけ重ねてる人だからこういう物言いしかできないんだろう こういう人のいうことは表向きだけはいはいって聞いたふりして全部無視して問題ないよ
991 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 20:27:29.93 ID:dGqjDCnwr.net] ほっとくとイベントの参照が残ってるのでひとりでに消えなくなってしまう
992 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 20:39:48.56 ID:fpn8B7qc0.net] >>975 backgroundworkerを自前で作らずにformに貼って、イベントもデザイナから作るといいよ
993 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 20:40:18.92 ID:DbrcOQgy0.net] >>975 ソース
994 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 23:21:15.76 ID:zXgX+PCrr.net] ソースもくそもみんなそう
995 名前:デフォルトの名無しさん mailto:sage [2019/10/06(日) 23:28:20.92 ID:zXgX+PCrr.net] c# メモリリーク イベントハンドラ
996 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 00:20:35.80 ID:ilJKwzD30.net] だからIProgressでメモリーリークするソース出せってば
997 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 07:55:39.68 ID:PXpMNqVGd.net] IProgressはインターフェースなんだからそれ自体がリークってのはおかしいでしょ。使い方が悪いだけでは…?
998 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 08:49:33.99 ID:jeQW+1qp0.net] オッペケは自殺して転生して自分の頭のバグ直してこいやボケ
999 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 18:13:25.65 ID:jsaaj6Lxr.net] インターフェイスでメモリリークするわけがないはその通り ただ単純なイベントハンドラベースだとうっかりメモリリークさせやすい コンポジションなどで保持したままで寿命が違うと特にそう c++だとメモリリークしやすいが使い方が悪い!ちゃんとつかえ! という話で済まないので進化し続けてる そのProgressというけど偽りでProgressと言う動作と何の関係もない 実際はどこからも使われないく自分で使うコードを書くだけなのでProgressである必要もない どこが便利で使ってるのかさっぱりわからない
1000 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 18:17:14.49 ID:jsaaj6Lxr.net] 見返すとめちゃくちゃだけどIpregressは別にProgressに高度に特化されてないので 使う意味は薄いのではないか? nさんがどう思うか知らないけど
1001 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 19:14:35.69 ID:ilJKwzD30.net] ここまで具体的なコードは無し
1002 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 20:06:05.04 ID:GbsEPSwo0.net] >処理と表示は一見関係ないように見えて実は密接に関係していて >絶対に切り離せない ちゃんと考えて設計してもそうなるなら、絶望的にセンスがないわ おまえに不可能なことが技術的に不可能なこととは違うよ
1003 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 20:18:37.37 ID:9eyAES450.net] 次スレ ふらっと C#,C♯,C#(初心者用) Part145 https://mevius.5ch.net/test/read.cgi/tech/1570446977/ ワッチョイ無しは ふらっと C#,C♯,C#(初心者用) Part141 https://mevius.5ch.net/test/read.cgi/tech/1544838367/
1004 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 21:20:35.04 ID:jsaaj6Lxr.net] >>985 理解できないなら無理にレスしなくてもよい
1005 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 21:45:53.70 ID:/mGKDAACa.net] >>987 乙
1006 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:15:03.54 ID:QEMDFqtE0.net] >>987 乙
1007 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:16:20.26 ID:ilJKwzD30.net] >>988 はよ
1008 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:40:26.54 ID:H1QHa3mL0.net] >>986 バカだろ 物理的に不可能だろ 既存処理にプログレスバー付けてみろよ
1009 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:42:41.65 ID:d+4AHn7d0.net] IProgressというか、その実体のProgres<T>クラスは、普通に使えばメモリーリークなんか起こらないんだよな イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して 処理を実行するたびにインスタンス作ればいいだけ ラムダ使えない人はご愁傷さまとしか言えません
1010 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:50:14.57 ID:jsaaj6Lxr.net] >>993 外から複数のハンドラ指定して実行したい場合どうすんの? Actionにどうやって渡す?
1011 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:52:08.75 ID:jsaaj6Lxr.net] それと > 普通に使えばメモリーリークなんか起こらないんだよな と > イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して > 処理を実行するたびにインスタンス作ればいいだけ は矛盾してるよね?
1012 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:53:10.67 ID:s9APxj2Ed.net] >>994 複数のアクションを実行するアクションを渡す
1013 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 22:59:52.41 ID:d+4AHn7d0.net] >>995 サンプルぐぐっても、イベント使ったりクラスのメンバ変数にして使い回すって方が邪道じゃないかな?
1014 名前:デフォルトの名無しさん mailto:sage [2019/10/07(月) 23:21:18.60 ID:cpqLM3c60.net] >>986 多分切り離すとか分離するの意味を根本から間違えて捉えてるんだと思うので無駄だよ。関心の分離の基本がわかってない
1015 名前:デフォルトの名無しさん mailto:sage [2019/10/09(水) 02:47:43.58 ID:mpcY/05P0.net] ぅ
1016 名前:デフォルトの名無しさん mailto:sage [2019/10/09(水) 02:47:58.78 ID:mpcY/05P0.net] め 次スレ ふらっと C#,C♯,C#(初心者用) Part145 https://mevius.2ch.net/test/read.cgi/tech/1570446977/
1017 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 84日 11時間 11分 35秒
1018 名前:1002 [Over 1000 Thread.net] 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ https://premium.5ch.net/ ▼ 浪人ログインはこちら ▼ https://login.5ch.net/login.php
1019 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています