1 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:53:21.18 ID:dhjmiKBp0.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980 を踏んだ人は新スレを建てて下さい。>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part152 mevius.5ch.net/test/read.cgi/tech/1629888256/ ■関連スレ C#, C♯, C#相談室 Part94 mevius.5ch.net/test/read.cgi/tech/1553075856/ ■コードを貼る場合は↓を使いましょう。 https://ideone.com/ https://dotnetfiddle.net/ ■情報源 https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries/ https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/ https://docs.microsoft.com/en-us/dotnet/standard/class-libraries/ https://referencesource.microsoft.com/ https://source.dot.net/ ・Insider.NET > .NET TIPS - @IT https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html ・DOBON.NET .NET Tips https://dobon.net/vb/dotnet/index.html VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
473 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 11:41:47.82 ID:CKbwlJU4M.net] >>458 メソッドの宣言? ここの話だろ > IQueryable<Bar> result = xxxx.Where(predicate).Take(10); xxxx の定義によるけど普通は var で良くね?
474 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 12:18:50.36 ID:+o9sIybza.net] IQueryable<Bar> result = xxxx.Where(predicate).Take(10); ↑だとこの一行でBarとってるとわかる var result = xxxx.Where(predicate).Take(10); これだとなにかを取ってるとしかわからない。たった数文字の差だけど受け取れる情報が多くなって読みやすい 俺みたいなエスパー能力低い人間にとっては普通に書いてくれた方がありがたい
475 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 12:34:17.18 ID:B4j0C8aZM.net] 試してみたけどpredicateの型を明示的にExpression<Func<T>>にしてないと WhereがIEnumelableで解釈されてだめやね resultの型をIQueryable指定しててもコンパイルエラー Whereにlambdaのリテラル入れた場合は varでOk
476 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 12:57:35.75 ID:jegOl+WX0.net] >>465 すまん、そこ間違えた。varで良い。 言語によってはTask<IQuerable<Bar>>が要らない言語があるんよ。 確かにBar取ってるとわかるが、Barを取っているとわかる必要はある? >>467 スマホで書いたらダメだな、すまん。
477 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 13:20:28.91 ID:+o9sIybza.net] Barだと分かる必要はないけど分かったほうがありがたい 無地のジグソーパズルでも問題なく完成できるけど、絵柄があったほうがありがたいのと同じ
478 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 13:50:37.41 ID:A4g6fK0TM.net] わかる必要はないのわかったほうがありがたい? 初心者にありがちな必要ないのにやけに細部にこだわるタイプなのかな?
479 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:04:18.23 ID:+o9sIybza.net] その行の前後見ればvarとあってもそれがBarだとわかる でもBarと明示してくれたら前後見る手間なく分かる、たったそれだけの差をありがたいと言ってる var result = colBar.Where(predicate).Take(10); xxxxでなくcolBarというように書かれてたらvarでもBarだと分かるからありがたいし もっと言えばresultとかやめて var resBarTop10aroundPOI = colBarInTokyo.Where(predicate).Take(10); こんな風にしてくれたら、この一行見るだけでそれが何しているのかが分かってありがたい 俺みたいに理解力に乏しい人間にとっては情報量多いほうがありがたいんだよ。無駄に多すぎるのは勘弁だが
480 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:08:45.09 ID:t38juXmg0.net] class HogeBase { ・・・ } class Hoge : HogeBase { ・・・ } static Hoge GetHoge() { return new Hoge(); } の場合 HogeBase hoge = GetHoge(); だと右辺の型確認しない主義の人はhogeの実態がHogeBase型だと勘違いしたまま作業することになるからまずいんじゃないの?
481 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:13:52.71 ID:HsEWm91X0.net] それは勘違いじゃないんじゃないの?
482 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:15:52.97 ID:+o9sIybza.net] それはHogeBaseとして扱いたいからHogeBaseに入れてるんでしょ 中身はHoge2やHoge3かもしれない。Hogeと知らなくてもいいよ
483 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:19:47.84 ID:t38juXmg0.net] virtualメソッドがHogeとHogeBaseで違う動きするよ? virtualがHogeBaseの動きする前提でレビューしていいのかい? >>473 >>474
484 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:29:24.20 ID:HsEWm91X0.net] 何か問題が? それで困るなら派生させちゃ駄目
485 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:33:13.09 ID:+o9sIybza.net] HogeBaseがさらにIBaseってインターフェース派生だったらどうするよ IBase hoge = GetHoge(); hogeは何も実装できないInterfaceだから何の動作もしないはずなんて思うやつはいない そもそも型に対して前提としてる考え方が違う GetがHogeじゃなくてHogeBase返してきたら右辺見ても区別つかないよ static HogeBase GetHoge() { return new Hoge(); }
486 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:33:43.94 ID:t38juXmg0.net] >>476 へー、呼ばれるメソッドを間違えて認識しててもレビューできるんだ すげーな
487 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:37:00.03 ID:t38juXmg0.net] >>477 うん、だからレビューするなら真面目に右辺のメソッドの中身まで確認しろってこと
488 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:41:37.87 ID:A4g6fK0TM.net] >>478 えっ? 多態使ったことないんか?
489 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:54:39.91 ID:t38juXmg0.net] 使ってるからこの話題持ち出したんだけど >>480
490 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:15:22.51 ID:FKeKEAH4M.net] hoge.fuga(); って言うコードをレビューする時に実際に呼ばれるメソッドがまだ作られてないケースもあるんだけどどうやってレビューしてるの?
491 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:19:14.44 ID:Rudq/m5Ya.net] >>451 人の話聞かない人?何が言いたいのかさっぱり分からん。 恐らく誰も、少なくとも俺は 「varを使うと自動的に左辺の変数が不明瞭になるからvarは一切使うな」 などとは言ってないの。 例えば>>431 むしろ現実的にはほとんどの場合varでいいんだよ。 それはコードの書き手にも読み手にもメリットがある。 論点は>>412 に書いた通り、「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」だ。
492 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:20:25.57 ID:77VqpiEwM.net] var嫌がってるのってもしかしてテストコードを書かない種族の人?
493 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 16:21:47.64 ID:7whnQ4QD0.net] ワイはvarのほうが効率あがる うちはそこはレビューよりも書き手優先でvar推奨(c#) レビューも気にするならその段階でIDE起動してる その現場でいちいち書かせたいんなら型明示を強制すればいいんでね うちのとこはそんなとこまでちまちま言い合うほど暇じゃないし、それ以上にテスト充実してほしい勢 まあvarにわざわざ書き直させたりもしないねw
494 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 16:35:03.08 ID:+o9sIybza.net] 俺はvarが嫌なんじゃなくて読みにくいコードが嫌 で、読みにくい要因の一つがvarだということな さらに自分がvar使うのが嫌なんじゃなくて他人が使ってるのが嫌。自分のコードだったらそんなこと気にしなくても読めるし 自分に優しく他人に厳しくがモットーなんだよ
495 名前:デフォルトの名無しさん [2022/01/06(木) 16:36:42.04 ID:OeKJG00I0.net] 私C#良く分からないのですが、 そんな私がC#の説明することになりました。 クラスが参照型なのですが、どういう理由でこうなっているのか、 どういう意図でこうなっているのか、何と言って説明すればいいの? 本読んでも「参照型はポインタ的な雰囲気の何か」的な説明しかなくて なんでこうなっているのか全く書いてなかった。 ちなみに、参照型=ポインタと言い切っちゃってもいいのかな?? よろしくお願いいたします。
496 名前:デフォルトの名無しさん [2022/01/06(木) 16:38:59.36 ID:OeKJG00I0.net] コード書くときはvarで書いて、 それをintとかlongに変換してくれるツールを作ればいいだけなのでは??
497 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:01:20.10 ID:WCTWOnks0.net] >>487 書籍に例えるとどちらも目次に該当する ポインターがページ数だとすると参照型ってのはタイトル
498 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:31:36.72 ID:ae3RunliM.net] >>487 参照型はデータそのものじゃなくデータへの参照を持ってる型 C言語しか知らない人にC#を説明するんじゃなければわざわざポインタとの対比で説明する必要ないよ
499 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:35:14.31 ID:WCTWOnks0.net] Varでも何でもいいけど読みながらその都度型を類推するよりは読む前に何をしてるか理解してから読む 大まかな流れを理解してから読むのとメクラ滅法に読むのじゃ時間が100倍も1000倍も異なるからね 書く時だってそう
500 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:50:32.30 ID:rL+VifTwM.net] >>483 > 論点は>>412 に書いた通り、「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」だ。 具体的にどういうケースを言ってるの?
501 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:51:43.10 ID:VWdkYx+r0.net] >>492 型が分からなくてスルーできる脳みそが羨ましいわ〜
502 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:55:43.01 ID:h7LPoqLqM.net] そもそもvarがいいのって書くときだけじゃん 戻り値なんかでやられると最悪じゃん
503 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:58:59.73 ID:XJZjWgUBd.net] 結局宣言行まで戻って型見る面倒 ショートカットでいいような
504 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 18:41:32.37 ID:6bRgcWdcM.net] >>493 そういうレスしかできない時点でなにも困ってないのがバレバレやん
505 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:04:48.00 ID:VWdkYx+r0.net] >>496 トラが檻に戻ってないのに確認しないで施錠できる脳みそみたいな
506 名前:sage mailto:sage [2022/01/06(木) 19:25:09.72 ID:OeKJG00I0.net] >>489 >>490 返答ありがとうございます。 「参照型とは何か」を問うているのではなくて、 クラスが参照型なのは、どういう理由でこうなっているのか、 どういう意図でこうなっているのかを問うています。 クラスを参照型にしている思想は何かということです。
507 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:27:13.03 ID:6bRgcWdcM.net] 単なるアホかよ、NGしとくわ
508 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:34:15.72 ID:VWdkYx+r0.net] >>499 推測しづらいケースが一つも思い浮かばない→推測をしたことがない→馬鹿の壁
509 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:34:56.89 ID:jNRDp0FJa.net] >>498 逆に参照型じゃないならどうする? 多くのデータを抱えたクラスを毎度毎度コピーして渡すコピー型にでもする?
510 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:35:48.42 ID:Bcw/lb7Z0.net] >>498 C# クラス 参照型 でググれば一番上にお前が望んでいる答えがあるぞ
511 名前:デフォルトの名無しさん [2022/01/06(木) 19:38:04.42 ID:OeKJG00I0.net] var addFunc(var a, var b){ return (a + b); } とかはありですか??
512 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:42:33.04 ID:Z0ROnAB1M.net] >>503 その宣言内容だけでどうやって型推論するのか いくら何でもコンパイラに与える情報が足りなさすぎる
513 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:15:49.57 ID:pGhYWD4M0.net] >>499 気付くのが遅いぞ コレいつもの人だわ
514 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:27:11.92 ID:VWdkYx+r0.net] >>505 おまえの型推論はバグってるな。
515 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:53:48.44 ID:2nit6p8q0.net] >>471 これ、古より嫌われているシステムハンガリアンだから結構嫌がる人多いと思うよ
516 名前:デフォルトの名無しさん [2022/01/06(木) 20:55:39.69 ID:WSidiaMA0.net] winapiのクソキャストにはハンガリアンぐらいが丁度いい
517 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:59:03.64 ID:snULIxlRa.net] >>487 問題設定自体を変えた方がいいかもね。 なぜ値型ではだめなのか?と。 値型だと少なくとも「フールドを増やしたサブクラスの値を ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。 というか、こういう禅問答みたいな話は(たぶん重要なんだろうとは思うけど) 初心者は後回しにした方が絶対にいいと思う。
518 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 21:28:53.73 ID:TiVU33P2M.net] >>498 参照型を理解してないんだからそれを理解するのが先 クラスが参照型なのはポインタ型や値型だと困るから 文字列が値型だとどうなるか考えてみれば? ポインタを理解してるならすぐわかる
519 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:17:09.17 ID:mv8eR6oh0.net] C#のスレでメソッド名の先頭が小文字から始まってる時点で、 ・意識が低い ・まともに調べたり勉強していない どちらかであることを認識すべき。
520 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:20:50.62 ID:VWdkYx+r0.net] varがある時点でやっつけ専用言語なのに
521 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:32:25.27 ID:8QDluGwV0.net] >>512 ???
522 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:51:42.25 ID:t38juXmg0.net] >>512 今時C++でさえ型推論付いてるというのに
523 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:53:35.71 ID:VWdkYx+r0.net] どうしてもc++でやっつけコード書きたいから追加した仕様だろ
524 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:03:01.88 ID:IK3vjsT30.net] 今時型推論ないほうが珍しいだろ
525 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:09:41.99 ID:qow9t6Ky0.net] やっつけコードしか書かないプログラマだらけの時代に何言ってんだ 昔はOSの無償サポートは10年とかだったのに今はすぐサポート切れの切り捨て。 なぜならやっつけコードで保守する気ないからだ。Win8とかEdgeとかWPFとかぜーんぶやっつけで作ってたからすぐ捨てられた。
526 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:23:20.23 ID:bs4RpyaW0.net] 型推論はやっつけなのか。 古き良きなのか、時代についてこれないのか 考え方は人それぞれよね
527 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:30:28.71 ID:uWMJJK3h0.net] 型推論だめってチームいやだわ ギスギスしてそうw
528 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:32:56.56 ID:IK3vjsT30.net] 型推論付きの言語はやっつけ専用か 普段この人は何言語でやっつけじゃない開発してんだろう
529 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:40:49.40 ID:YgufRjXg0.net] 最近は「int key = 0」でなく「Key key = new(0)」みたいに書いてるからvarは使わんな
530 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 06:45:05.41 ID:j4Wq+RBJM.net] >>520 ・老害のCOBOLer ・自称スーパープログラマーな組込C使い ・Javascriptのvarと混同してるボンクラPG
531 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 08:15:52.34 ID:y6x0s+uzd.net] var一切使わない人ってラムダの引数型もクソ真面目に書いてそう
532 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 09:50:10.76 ID:qow9t6Ky0.net] スップw 初心者スレでラムダw
533 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 10:00:38.21 ID:qow9t6Ky0.net] 知らないうちにLINQスレもなくなってる。過疎なム板で落ちるとかよほど人気ないのか。 >>523 そうやってガキみたいに初心者相手にマウンティグして全部追い出したんじゃないのか。
534 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 11:42:40.26 ID:yxixByMw0.net] おーっとここでガキマウントです
535 名前:デフォルトの名無しさん [2022/01/07(金) 11:50:35.85 ID:FRwoYiaWM.net] >>524 初心者のくせにラムダなんて生意気だ! ってマウントですね
536 名前:デフォルトの名無しさん [2022/01/07(金) 12:38:03.65 ID:6zNCaZbD0.net] >>509 >> 値型だと少なくとも「フールドを増やしたサブクラスの値を >> ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。 すみません。良く分かりません。クラスが値型のC++で 「フールドを増やしたサブクラスの値をベースクラスの型の変数に入れる」 なんて芸当、なんの問題もなくできると思うのですが >>510 >>文字列が値型だとどうなるか考えてみれば? 文字列は内部実装は参照ですが、ユーザ見えは値型と同じだと思うんですが・・・ 内部でどう実装されているのかは、そんなに説明するつもりもないし・・・
537 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:00:57.38 ID:y6x0s+uzd.net] >>528 ベースクラスの変数に入れることはなんの問題もないけど逆の操作派生クラスに戻せなくなる C++でもそうだけどnewされた時の型をベースクラスが覚えておかないとvirtualとかasが使えない
538 名前:デフォルトの名無しさん [2022/01/07(金) 13:01:07.20 ID:6zNCaZbD0.net] 返答ありがとうございます。 >>501 >>逆に参照型じゃないならどうする? c++ではクラスは参照型ではないですよね? c#では構造体は参照型ではないですよね? >>502 >> C# クラス 参照型 >> でググれば一番上にお前が望んでいる答えがあるぞ 配列が参照型なのを考慮すると、高速化・・・・ いや、そのサイト見てると高速化よりも ポインタを無理やり追い出した弊害に思えてきました・・
539 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:03:35.17 ID:qow9t6Ky0.net] c++に参照あるのに
540 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:03:54.16 ID:y6x0s+uzd.net] >>528 型ってのはコンパイル時に大きさ(byte数と配置)が決まってないといけないという縛りがCのときからある 長さがいくつになるか分からんstringは参照型にするしかない
541 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:06:18.93 ID:qow9t6Ky0.net] クラスや構造体の中にポインタもって動的にメモリを確保するだけである。型のサイズは変わらない。
542 名前:デフォルトの名無しさん [2022/01/07(金) 13:08:54.79 ID:6zNCaZbD0.net] >>529 >>C++でもそうだけど まことに申し訳ないけど、何を言いたいのか全く理解できません。 クラスが値型のC++でも通用する話を出してきても???と思うんですが
543 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:09:35.44 ID:IAj8vN+S0.net] >>530 生のポインタだとオブジェクトを移動して断片化したメモリの整理が出来ない
544 名前:デフォルトの名無しさん [2022/01/07(金) 13:12:31.36 ID:6zNCaZbD0.net] >>532 それだとクラスは値型でOKという話になっちゃいます。
545 名前:デフォルトの名無しさん [2022/01/07(金) 13:17:33.66 ID:6zNCaZbD0.net] >>535 ひょっとして私根本的な所を理解していないのかな? class clsA { class clsB { class clsC { xxx }}} みたいなクラスの内部にクラスを含んだクラスであっても GCでガンガン割り当てられているメモリアドレスを 動かされると言いたいのでしょうか??
546 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:18:48.25 ID:qow9t6Ky0.net] で参照の何を議論してるんだ? c#のクラスが参照型なのが許せない!!って言いたいのか? キミがそういうのならそうだろう。キミの中ではな。
547 名前:デフォルトの名無しさん [2022/01/07(金) 13:26:11.81 ID:FRwoYiaWM.net] 参照のほうが便利だからじゃね?
548 名前:デフォルトの名無しさん [2022/01/07(金) 13:28:12.36 ID:6zNCaZbD0.net] >>538 >> c#のクラスが参照型なのが許せない!!って言いたいのか? 質問を読んでそういう理解なのでしょうか? 質問を読まずにそういう理解なのでしょうか?
549 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:34:18.44 ID:qow9t6Ky0.net] >>540 誰が質問をしたかすら知らないが、質問を質問で返す。つまりそれは構ってちゃんだ。
550 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:45:30.30 ID:BJs69ghP0.net] 流れを読まず、適当なところに突っかかる つまりそれは荒らしだ
551 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:51:09.32 ID:qow9t6Ky0.net] 話題が分散しすぎて流れが分からないから聞いただけなのに酷い言い掛かりだ。 C#のクラスがなぜ参照型かだって? C#は関係ないよ。.net側の仕様だから。vb.netでも同じ。で終わりの話。
552 名前:デフォルトの名無しさん [2022/01/07(金) 13:54:19.71 ID:FRwoYiaWM.net] >>543 その仕様をなぜ決めたかを聞いているんでしょ こんなところで
553 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 14:01:57.02 ID:IAj8vN+S0.net] >>537 そう頻繁では無いにしろ移動されない保証は無いね
554 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 14:24:42.02 ID:qow9t6Ky0.net] >>544 え? コピーのコストが違うから分けたという単純な話だが。 Cだって配列のコピーは重いから引数で参照渡しされるだろう?
555 名前:デフォルトの名無しさん [2022/01/07(金) 14:55:19.17 ID:FRwoYiaWM.net] だからみんな単純な回答してるじゃん あ、俺はどちてぼうやじゃないよ
556 名前:デフォルトの名無しさん [2022/01/07(金) 15:17:14.00 ID:6zNCaZbD0.net] >>546 >> コピーのコストが違うから分けたという単純な話 確かにそんな感じですね。 クラスが値型のc++が遅くて クラスが参照型のc#が早いなんて 全く聞いたことないのですが、 MSがトチ狂って高速化を優先(それ以外を犠牲)したようですね。
557 名前:デフォルトの名無しさん [2022/01/07(金) 15:54:45.54 ID:FRwoYiaWM.net] トチ狂っててワロタ
558 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 16:20:24.15 ID:EZdfrZXhM.net] >>548 C++ は値型のクラスを作れるけどそれをそのま他の関数に渡すなんてことはほぼやらんぞ そもそもCでも構造体をそのまま渡したらコピーされるからコピーコストを言うなら参照型にしてるだろ 要はC/C++はそういう制御もプログラマに開放してるがC#は開放してない(コピーはそれなりのメソッドを呼び出す)ってだけの話
559 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 17:18:23.04 ID:0zyZKkps0.net] 牛乳飲んで落ち着いて
560 名前:デフォルトの名無しさん [2022/01/07(金) 17:50:23.82 ID:7Nc+xMj80.net] >C++ は値型のクラスを作れるけど なんかもう、松永パソコン大先生みたいな話だな
561 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 18:17:48.54 ID:EoqFVcXVr.net] 割りきればいいものを、どうでもよく無駄にこだわるやついるよな
562 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:02:16.87 ID:NAsC2Vwba.net] >>528 正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね https://www.cloverfield.co.jp/%E7%B5%84%E8%BE%BC%E3%81%BF%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%80%8CC++%E3%80%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20%E6%98%8E%E6%97%A5%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%88%E3%82%8B%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80/3.3%20%E7%B6%99%E6%89%BF%E3%81%AE%E8%A3%8F%E5%81%B4.html だから他の人が指摘しているstringのようなケースを無視するとしても、 値型で無理に継承を実現しようとすると、 (1) >>509 に書いたように多態を諦めるか (2) メモリ効率を犠牲にして、ベースクラスの変数のメモリ上のサイズは全ての派生クラスの 「共用体」のサイズとする。当然全ての型はinternalとして定義する必要もある。 こういうありがたくない制約が出来ちゃうでしょ
563 名前:デフォルトの名無しさん [2022/01/07(金) 19:37:25.76 ID:6zNCaZbD0.net] >>546 >>Cだって配列のコピーは重いから引数で参照渡しされるだろう? つ【std::vectorは参照ではない】 [] [ここ壊れてます]
565 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:39:06.67 ID:46kMC38t0.net] Unityの座標系って左下起点がデフォなの? WindowsのGUIとのやり取りが凄い大変なんだけどなぜこういう仕様になってるのか教えてもらいたい
566 名前:デフォルトの名無しさん [2022/01/07(金) 19:41:19.72 ID:6zNCaZbD0.net] >>554 >> 正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね 菱形継承はいろいろと問題あるからね。菱形継承問題でググってみな それにc#は多重継承できないからね・・・
567 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:42:11.75 ID:46kMC38t0.net] >>555 push_backでコピーorムーブが発生するってことを言いたいん? そのコピーコストを無視できないくらい大きなもの扱ってるときは正にC#の参照型Listのようにポインタ型のvectorを作るか、resize+インデクサアクセスで直埋め込みするじゃん
568 名前:デフォルトの名無しさん [2022/01/07(金) 19:44:39.54 ID:6zNCaZbD0.net] >>554 >> ベースクラスの変数のメモリ上のサイズは いや、ベースクラスの変数のメモリ上のサイズは ベースクラスが持っている変数のメモリ上のサイズの合計 (パディング考慮)でしょうが・・・
569 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:46:03.22 ID:NAsC2Vwba.net] >>556 Unity知らんけど、印刷考えなきゃ最初から普通のデカルト座標採用してくれた方が 自然ではあるね。 むしろCRTなんていう前世紀の遺物の仕様をいまだに引きずってる方が「なぜ」のような気が
570 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:47:36.10 ID:NAsC2Vwba.net] >>559 だから、そうだとしてそれにフィールドを追加した派生クラスの値を入れられるんですかと
571 名前:デフォルトの名無しさん [2022/01/07(金) 19:48:35.26 ID:6zNCaZbD0.net] >>558 引数で参照渡しされるだろう? と言ってるので『std::vectorを引数にする時は参照渡しではない』という意味で言ってるが
572 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:54:08.11 ID:46kMC38t0.net] >>562 C/C++には参照型も糞なく全部値型だからvectorそのままだと当然値渡しになるから言葉そのまま受け取ればそういうことになるけど std::vectorって配列へのポインタを持ってるだけだから疑似参照型みたいなもんってことを言いたいんだろ sizeof(std::vector<T>)のTが何であろうと固定で16byteくらいだし
573 名前:デフォルトの名無しさん [2022/01/07(金) 19:54:17.18 ID:6zNCaZbD0.net] >>561 つまり『ポインタを無理やり追い出した弊害に』だよなぁ