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
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 だけど