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

レス数が1000を超えています。これ以上書き込みはできません。
2021/03/23(火) 12:58:24.10ID:ACoFzk2L0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
http://mevius.5ch.net/test/read.cgi/tech/1608085775/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://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
http://referencesource.microsoft.com/
・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
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/05/11(火) 12:55:03.04ID:9XfnnIxq0
どれの話をしてるのかわからんけど困ったことない

Enumでやる
virtual List<enum> Lamps => 赤、青を返す
override List<enum> Lamps => base.Lampsと黄を返す

Flagでやる
virtual Color Lamp => Color.赤 | Color.青
override Color Lamp => base.Lamp | Color.黄

Flag側で継承
[flag]
enum Color{
赤=1,
青=2,
黄=4,
Hoge=赤 | 青,
Hoge2=Hoge | 黄
}
2021/05/11(火) 13:34:53.46ID:aDB05LmB0
>>917
そんなの未来永劫保証できないじゃん
enum作った人本当にバカなんだね
使えないもん作ってろよって感じ
2021/05/11(火) 13:38:39.20ID:aDB05LmB0
>>919
基底に黒とグレーを追加
2021/05/11(火) 14:03:01.12ID:9XfnnIxq0
>>921
別に俺が作ってる訳じゃないからそんなこと言われても知らんがな
enumでやりたくないならそれでいいと思うし好きにやりなよ
2021/05/11(火) 14:27:53.86ID:7X7kMfyca
>>919
enumの利点はコンパイル時に名前の集合を型として定義できる、
名前の集合が確定していて、だからインテリセンスが使えたり
集合に含まれないはずの名前が使われている間違いをコンパイル時に検出できることなので
それは代用にならんでしょ。

質問している人の問題はたぶん継承に固執してること。

部分集合を再利用して上位集合を定義したいって問題意識は分からんでもないけど、
emumなんてただの名前の集合なんだからそういう場合はコピペ継承するのが多分正解。
2021/05/11(火) 14:31:08.99ID:pmLjbtQdD
適材適所
2021/05/11(火) 14:40:19.26ID:/TD/rkCHM
C#や諸々の言語はそもそも、継承の仕様が出来損ないなんだよね
Java 16みたいにSealed Classを定義できるなら、まだしもねぇ

どんなクラスでも継承できます、なんて言われてもね
全てのサブクラスの面倒を見るなんて、事実上不可能だろ

だからサブクラスを限定する仕組みが必要なのだが…
C#はまだまだ、遅れてるね
2021/05/11(火) 14:45:04.15ID:9XfnnIxq0
>>923
ああ、そういう事ね
Nullとか空とかのEnumを用意しとくべきかみたいな話と似てるな
2021/05/11(火) 15:00:11.95ID:1Lpm83JY0
>>925
Javaのことは知らんけど
C#のsealed classでは駄目なの
2021/05/11(火) 15:07:01.36ID:9XfnnIxq0
自分ならカスタム属性と拡張メソッド作って、集合.Hoge.Colors()で一覧を取れるようにするかな
まあケースバイケース

enum 集合{
[AddColor(Color.赤, Color.青)]
Hoge,
[InheriteColor(集合.Hoge)]
[AddColor(Color.黄)]
Hoge2
}
2021/05/11(火) 15:14:49.86ID:Fjpe2RX80
>>927
そっちじゃなくて継承できる型を限定する機能だね
ShapeインターフェイスをRectangleクラスとCircleクラスのみ実装可能にする
他の奴がTriangleクラスを作ってShapeを実装するのは認めない
2021/05/11(火) 15:43:37.19ID:1Lpm83JY0
>>929
なるほどC#に限定する機能はないね
コンストラクタのアクセス権をinternalにしてアセンブリを分ければ実用上はそんなに困らなそうだけど
2021/05/11(火) 16:04:08.87ID:gVDvfxdk0
>>919
>override List<enum> Lamps => base.Lampsと黄を返す

これはEnumでやってるんじゃなくListでやってるだけのような・・
取りうる状態の範囲をEnumで表現してないしコンパイル時のチェックも無理だよね

>override Color Lamp => base.Lamp | Color.黄

こっちも型としてはColorになるので既存のColor定義が赤と青だけなら
全く別のEnumを新しく定義することか、既存の定義自体を変更して黄を足すかになるので
既存のコードを維持したまま新しいコードを追加することはできないよね?

Enumを使うべきユースケースじゃないからできなくて当たり前なんだけどさ
2021/05/11(火) 16:18:03.82ID:qWgZ839v0
>>896
文字列の雛形をDBに持たせて、パラメータ部分を置換して出力するみたいなことやってたのよ
『置換して出力』部分を$使う挿入文字列で置き換えられたらいいなって夢想した

pythonの似たような機能でキーワード引数による指定が出来るから、似たようなこと出来ないかなって
> print('{first} and {second}'.format(first=a, second=b))

string.format使えばいいだけなんだけどね
2021/05/11(火) 20:06:26.01ID:7D4cBYXWM
>>932のやりたいことが挿入文字列を共通化したいってことならおとなしくメソッド化して
string ToHelloText(string name, DateTime date) => $"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.";

Console.WriteLine(ToHelloText(name, date));
みたいな使い方するほうがいいんじゃ
934デフォルトの名無しさん (エムゾネ FF8a-dxvU)
垢版 |
2021/05/12(水) 09:24:40.12ID:HCx7UYF5F
プラごみを減らすためにレジ袋有料化するって話と似てるな
そもそもピントがずれてるし前提も可笑しい
2021/05/12(水) 14:46:53.00ID:kcMRoKH40
リソースで他言語対応すると考えると欲しい気持ちは分かる
"Hello, I'm {givenName} {surname}."
"こんにちは、私は {surname}{givenName} です。"
みたいに書きたい
2021/05/12(水) 14:52:52.50ID:KOpdkLhcM
All your base are belong to us
2021/05/12(水) 18:25:12.05ID:l5b/FJ1ur
evalをやりたいと言うことだな

テスト不可になるからいらんけど
2021/05/12(水) 22:11:27.01ID:rLfxFtSp0
c#ってvisual studioインストールしたときに入ってるコンパイラじゃなくて
.Net 5に移行するのが良いでしょうか?
Microsoftも.Net 5移行を推進していきますかね?
2021/05/12(水) 22:18:36.03ID:ApiPrDZMM
同じもの
2021/05/12(水) 23:16:35.91ID:rLfxFtSp0
そうだったんですね!
2021/05/13(木) 01:52:12.91ID:Q5JRmth30
コンパイラは同じ
実行環境やフレームワークは違う
2021/05/14(金) 12:23:19.63ID:4kCY9pobM
まさかC#でメンバ変数名のprefixにアンダーバー付けてないやつおる?
https://anond.hatelabo.jp/20210513215649
2021/05/14(金) 12:27:21.06ID:hPLmdAiv0
なんで今更感が半端ない
アンダースコアつけて怒られた記憶あるわ
944デフォルトの名無しさん (ブーイモ MM5b-M3SR)
垢版 |
2021/05/14(金) 12:32:54.76ID:o+OksdyUM
アンスコあかんの?
2021/05/14(金) 12:45:33.90ID:4kCY9pobM
今まで記載がずっとなくて、同じMicrosoftの子会社が出してるStylecopっていうコード解析ツールの言ってることなら正しいだろうって風潮だったんだけど逆転敗訴した感じ
2021/05/14(金) 12:49:56.23ID:idb/Si4k0
前までただのキャメルだったよな? 何かしっくりこないなあと思いつつあわせてたのに
というか>>942はちゃんとprivateのメンバ変数って書いてくれ
2021/05/14(金) 12:59:44.72ID:ty8DhYlQ0
俺は今まで通り m_ + PascalCase でいく
2021/05/14(金) 13:15:24.24ID:fGdsMbaSD
キャメルケースの事をキャメルって略すのはどうも抵抗がある
2021/05/14(金) 13:52:15.03ID:xt/CNvYd0
スコープで付けると便利だけどね

gグローバルgUnko
mメンバmUnko
in引数入力inUnko
out引数出力outUnko
valローカルvalUnko
2021/05/14(金) 14:00:51.83ID:E7dr4uiDa
>>942
さすがにアホなガイドラインでほとんど同意は得られない気がする。
バッキングフィールド限定なら少なくとも俺は賛成するけど。

まあ、普通のフィルドもバッキングフィールドも出番減ってるから
どうでもいいと言えばどうでもいいかも
2021/05/14(金) 14:04:32.36ID:vWTxavwv0
アンダースコアはライブラリと被った記憶
C言語時代だが
2021/05/14(金) 14:10:10.14ID:xt/CNvYd0
ぶっちゃけ客先のカスタマイズできない環境で文字ちっちゃくて見にくいときあるからイラネ
2021/05/14(金) 14:16:07.40ID:E7dr4uiDa
しかし、_でプリフィクスしとくとインテリセンスでフィールドが一覧できて便利だよ、
ってコメントは泣けてくるねw

普通逆じゃないかw
インテリセンスの候補に登場して欲しくない奴を_でプリフィクスするのが普通のセンスだと思うけど。
2021/05/14(金) 14:36:58.65ID:idb/Si4k0
>>953
そのコメントどこに書いてある?


ところで別の話なんだけど、
とあるデータの集計や加工をメソッドチェーンで書きたい考えと、その集計や加工をデータとは別のクラスかつステートレスで書きたい考えって両立できるのかな?
拡張メソッド使うくらい?
2021/05/14(金) 16:32:10.35ID:0kdm8qdh0
>>954
コンテナ(データ).加工(…).集計(…)

インスタンスメソッドは暗黙的にthisを使ってるのでステートレスじゃないってことなら拡張メソッドも同じじゃない?
956デフォルトの名無しさん (ワッチョイ cb68-gSvD)
垢版 |
2021/05/14(金) 19:49:54.05ID:xeRYEvYS0
オセロのプログラム作っています。
オセロが盤面にの上にくると影を描きたいのですが
これはフォームアプリでできますか?
2021/05/14(金) 20:01:11.64ID:7GBYwo1U0
>>946
publicなメンバ変数って一般的か?
2021/05/14(金) 20:03:38.54ID:7vyBBBSUM
>>956
半透明の影を書き込んだ画像と影なしの画像の2種類を用意しといて切り替えたらいい
それ以上を求めるならFormsなんか捨ててちゃんとゲーム作りとしてUnityとかに再入門した方がいいよ
2021/05/14(金) 20:38:27.45ID:8fzMB91td
>>956
あくまでもWinFormでやるならGDI+っていう機能を調べて、
円をキャンバスに描けばオセロ程度のアプリケーションを作るのは楽かもね。
そりゃあ本気でゲーム作るならUnityだろうけど、
オセロの内容にこだわるなら、コンソールで十分なんだけど。
2021/05/14(金) 20:41:16.98ID:95pD/4XI0
WPFならDropShadowEffectで一発
2021/05/14(金) 21:13:06.87ID:VM2FDDZI0
>>946
いや、そもそもそんなコーディングガイドラインは存在しなかった。各ツールやライブラリごとに好き勝手やってる
あと、privateだけじゃなくてinternalもな
2021/05/14(金) 21:29:52.56ID:d3AihMu6a
>>956
「オセロが盤面にの上にくる」っていうのがどういう状況かよく分からんのだけど、
プレーヤーが置いた位置まで石が移動するアニメーション的な演出をしたいってこと?
2021/05/14(金) 21:45:19.42ID:Hk5V+gvwr
m_とかアンダースコアつけるとかは原始人に見えてしまう
2021/05/14(金) 21:49:55.96ID:d3AihMu6a
フィールドにmつけるのは割とそんな悪い習慣じゃないと思うけどアンダースコアは要らんね
mFooでいい。m_Fooにする意味が分からん
2021/05/14(金) 21:50:54.76ID:Hk5V+gvwr
そっちの方が原始人度が高いとおもうがw
2021/05/14(金) 21:51:52.40ID:Hk5V+gvwr
フィールドにメンバーのmをつけるのもどうなのかとw
2021/05/14(金) 21:54:28.98ID:2Onmey4o0
プロジェクトで統一されてりゃなんでもええよ
センスだのなんだのは個人の信仰でしかあらへんのじゃ
2021/05/14(金) 21:56:28.53ID:et+gRElJM
一般的な流儀はキャメルmFooかスネークm_fooのどちらか
2021/05/14(金) 22:00:45.23ID:krSfg/SG0
てめぇの流儀を勝手に一般化するな
2021/05/14(金) 22:05:44.68ID:d3AihMu6a
>>968
キャメルとスネークの差異は単語の区切り方にあると思うけど、フィールド(メンバー)にmつけるのは
ハンガリアンだと思うので本来はちょっと別物だよね。

>>967
確かに人間には適応能力があるので基本的にはその通りだけど、
それでも優劣の差がないというのも欺瞞だとは思う
あるとしてもどうでもいい程度の差だろ?はいその通りですw
2021/05/14(金) 22:20:25.04ID:Hk5V+gvwr
>>957
Xamlで
2021/05/14(金) 23:16:17.86ID:ijV+D4Iw0
>>969
そういうゴタクはキャメルとスネークより一般的な流儀出してから言いなよ
2021/05/15(土) 10:06:46.25ID:DyddzWuxM
>>954>>953が書いてるコメントって
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions
のヒントのことか・・・・・公式ドキュメントでお墨付きつけてるのはちょっと酷いような

VS2019標準のLintでアンダースコア始まり変数名って許容されてたっけ?
最近VSCodeでしか書いてないから分からん
2021/05/15(土) 10:11:49.42ID:I4FgZZwl0
作ってるやつがゴミカスなんだな
昔のインド人は頭が良かったということで
2021/05/15(土) 13:01:38.70ID:K7/xaqOQ0
複数ルール混在するのが一番面倒なので、mでもm_でも_でもいいから統一してくれればいいかなあ
そんで_に統一しませんかって事か
2021/05/15(土) 13:35:41.44ID:u3bkv4kna
クラス内で揃ってればどうでもいい
2021/05/15(土) 13:39:10.32ID:X2M8i/YMD
>>976
これ
978デフォルトの名無しさん (ラクッペペ MM17-JFKK)
垢版 |
2021/05/15(土) 13:45:45.41ID:Q8PHpDoBM
すまん
2021/05/15(土) 16:04:03.86ID:k7UiOGH90
ほんまそれなんやが
アホな中華は1クラス1万ステップとか作ってくるからめちゃくちゃになるんや
2021/05/15(土) 16:17:10.56ID:/1WA0n4U0
パフォーマンスどうなんそれ
2021/05/15(土) 18:21:31.59ID:aVMlO2Jw0
c#のprivateメンバー変数にアンダースコア付けろだと…
これが今後のルールになるのかな?
2021/05/15(土) 19:22:05.87ID:En4kpP4hr
ゴミみたいなルールで泣けてくる
2021/05/15(土) 19:28:07.03ID:I4FgZZwl0
ゴミカスが普段組んでもいないのにいいと思って考えちゃったクソルール
2021/05/15(土) 19:53:08.40ID:En4kpP4hr
これはひどい…

https://www.sejuku.net/blog/102559
2021/05/15(土) 20:00:50.49ID:x5z5lzlG0
一般的にって根拠を示しにくいけど、Microsoft公認のコーディングルールって言うとStylecopが示しているキャメルケースしかありえないんだよな
mHogeやm_Hogeは論外で今回の更新によって_Hogeが台頭したけど
2021/05/15(土) 20:14:20.26ID:tihXB0Cj0
hogの意味を辞書で引く
2021/05/15(土) 21:11:59.64ID:EZTpChRKM
>>985
_Hogeじゃなくて_hogeな
MS自身が書くコードでは昔から一般的に使われてるルールなんで、そんなに驚くほどのことでもない
意識高いとこだとわりと採用されてるよ
988デフォルトの名無しさん (ワッチョイ 6dda-gSvD)
垢版 |
2021/05/15(土) 21:55:57.08ID:P/ScDIg90
いま入門書で勉強中の初心者です
コードは基本的に上から下に処理されていくと理解しているのですが
本に出てくるサンプルコードは呼び出す側のあとに呼び出される側のコードが書かれていることが多くてしっくりきません
何か理由があるのでしょうか?
2021/05/15(土) 21:57:54.60ID:Cs9vHg9X0
ないよ
2021/05/15(土) 22:00:38.14ID:18pqJB1E0
そんなん言うたら、呼び出すメソッドが別ファイルの別クラスにあるのはいいんか?っちゅう話だよな。
2021/05/15(土) 22:03:52.54ID:t/RrGLho0
>>987
さすがにs_を標準にしちゃうのはかなり疑問だけどね
2021/05/15(土) 22:23:45.04ID:kOi9a7N70
>>988
多くの場合「全体 -> 部分」の順で理解したほうが
「部分 -> 全体」の順で理解するよりも圧倒的に脳にやさしいので
コードの構造もそれに合わせることで読みやすくしてる
2021/05/15(土) 22:39:14.46ID:Tm9lZ4XLa
>>988
呼び出し元を上から下に進んで
呼び出し先に亜空間ワープして
呼び出し先を上から下に進んで
呼び出し先が終わったらまた亜空間ワープで呼び出し元に戻って
呼び出し元をまた上から下に進む
2021/05/15(土) 23:03:58.43ID:tihXB0Cj0
関数など邪道
2021/05/15(土) 23:08:38.70ID:Cs9vHg9X0
全てasyncとlinqで実装
2021/05/16(日) 01:12:40.73ID:cPyU4P820
>>988
昔のC言語は呼び出す前に関数宣言しておくか関数を定義しないとエラーだったから考え方は正しいよ
単にプログラム言語としての利便性が上がっただけ
2021/05/16(日) 02:38:29.44ID:sFLeX0L5a
前方参照が不可でプロトタイプ宣言が必要だったのは単に当時の技術的な制約に過ぎず
本質的な物じゃないと思うよw

メソッドのソースコード上の位置(どのファイルの何行目にあるか?)は
「技術的には」何の意味も持たない、と言うのが正しい。

一か所からしか呼ばれないメソッドがあるとき、呼ばれる側のメソッドを呼ぶ側より上の行に
書きたがる人がいるし気持ちは分からんでもないけど、そんなのあくまで好みの問題。どーでもいいよそんなの、が正解。
2021/05/16(日) 05:34:08.17ID:fcFZ09AZ0
最近の言語だとどこでも関数宣言できるし、かと言って関数内だと一番下で宣言した関数を上で使えるって訳でもない場合もあるからね
トップレベルの処理は言語仕様によって分けられていることを理解するのは最初は結構大変なもんだ
2021/05/16(日) 09:15:56.70ID:RjyUN9Py0
>>988
呼び出される側のあとに呼び出す側のコードが書かれていても
> コードは基本的に上から下に処理されていくと理解しているのですが
ならしっくり来なくね?
Pythonみたいに動的に関数定義したいということかな?
2021/05/16(日) 09:16:15.77ID:RjyUN9Py0
>>996
それ逆やぞ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 53日 20時間 17分 52秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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