ふらっと C#,C♯,C#(初心者用) Part154
レス数が950を超えています。1000を超えると書き込みができなくなります。
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part153
https://mevius.5ch.net/test/read.cgi/tech/1639403601/
■関連スレ
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
■コードを貼る場合は↓を使いましょう。
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 switch文は各caseの末尾にbreak必須で、main関数もJavaと同様にクラスで囲い込まないと
いけなくて、それで同じ.net frameworkのプログラムを作るだけだからVBと同じだ。
C#は関数にデフォルト引数が使えない。旧VB6の関数も使うならVBが良し、そして文字列
の扱いでは、VBならLike演算子も使える。C#でExcelを制御するCOM対応のDLLも作ったこと
もあるが、元々VBAでやることをDLLで作るなら、素直に同じ系統の言語であるVB(.net)でや
ればいいものを、何でC#で作るのか疑問だ。
C#なら複雑な文字列の扱いはどうやってるんかいな。VBならLike演算子で済ませられるもの
でも、毎度正規表現クラスを使ったりしてるんかいな。
C#はC++の良さもVBの良さも生かせない言語とちゃうんかいな。 最も基本的なところの記述はCに似てるが、switch文のbreak必須仕様はVBのSelect Case文と結局同じで、
ヘッダーファイルというものはなく、#include文もなく、クラスの書き方はC++とは類似点が皆無と
言えるもので、実際にはVBのほうが十分に似てる。 マネージ拡張C++ならボクシングやアンボクシングも必要になるところも、C#にはそれが
無くて、VBとの書き方は末尾にセミコロンを付けるだけの違いでしかない。 >>851
VBと同じで何が問題なの?
Basicに慣れてる人はVB、C/C++に慣れてる人はC#、と多くの人に対してハードルを低くしてる
あと、デフォルト引数もあるし、Like演算子の代わりもあるよ トップレベルステートメントとか出たし、
VB使ってるからって妙にc#だけを意識してない?
活かせないとか皆無とか強い言葉で自分を守ろうとしてるのが見え見えで悲しい デフォルト引数が導入されたのがC#4だから昔のC#を思い出しながら書いてるのかもしれん >>848
まあそれでも選択肢増えたのはありがたいわ
ランタイム別で単一EXEにするのも出来るし VB→Delphi→C#←C/C++
の進化は古参なら皆知ってるよね
右矢印は同じ人の仕業だし Int16,32,64の使い分けって必要でしょうか
メモリが非常に少ない環境であればシビアになるべきでしょうが
普通の環境であればInt32を使用すれば問題ないと考えていますが合ってますかね >>863
即レスありがとうございます
型について書かれてるサイトやブログはありますが、各数値型の用途についてまで言及されているサイトはあまりなくて困っていました
助かりました >>864
Int16,Int32,Int64ではなく、それぞれの別名であるshort, int , longと記述することが多い
大抵のお手本はintとだけ書いてあるでしょ
long(Int64)は32bitでは表現出来ない大きな数値を扱う時に使う
それ以外はint(Int32)
short(Int16)はあまり使わないな クソ長い円周率とか宇宙規模の計算とか、doubleでもlongでも無理とかのとき、型はどうするん
まあ聞いてどうすることもないんやけど >>867
整数ならBigInteger構造体があるよ 宇宙規模の計算とか、桁数が有ってればOKみたいな世界やからへーきへーき(何が 1ビットも無駄にしてはならない
shortでいいのにintなんか使った日には島流し DBならまだしもC#でshortとか使う価値が無いのだけどね 細かい型を使ってもRustみたいにメモリギチギチに詰めてもらえる訳でもなく、何をするにもキャストばかり発生・・・・使い所は難しい >>870
ビット単位で言うなら組み込み型そのまま使ってる時点で無駄にしまくり
上限値が分かってる場合はC/C++のビットフィールドを利用すると以下の3フィールドで4バイトしか使われない
int Year : 23; //MaxValue = 8388607
int Month : 4; //MaxValue = 15
int Day : 5; //MaxValue = 31 >>866
そのshortを使わなくてよい根拠を知りたかったのです
サンプルやお手本がつかってないからではなく、ハードウェアの制限があるシーンで使うとか…
ただそんなシーンでC#は選ばれない気もしますが。
整数型以外も
>>867
にもありますが、例えばdouble型ってどういう用途で使うんでしょうかね。
decimalはお金等の電卓通りの計算になるような(ならないケースもありますが)項目に使いますよね。
floatはポリゴンの計算とか?
そういった数値型の利用シーンが知りたかった次第です。 >>874
shortをあまり使わないのはメモリー効率以外に恩恵が無いから
・16bit変数は思ったよりもすぐに表現出来なくなることが多い
・キャストが面倒
大した意味は無いよ スタックの幅は可変じゃ無いから 32bit幅なら16bitの値を入れても32bit喰うよ o/rマッパのコードファーストでテーブルカラム定義する場合にもよく使う。
postgreのsmallintならC#のshortとか。
また小型機器なんかとバイナリ通信する場合もshortが2バイト幅って原理を使って通信フォーマット組み立てたりする >>877
そうそう、組み込みデバイスとの通信はshort,floatを使うことが多いね
それとC言語出身者は char=1バイトと勘違いし易いみたい バイナリフォーマットが決まってるケースならともかく、通常はintでええやろ っていうか用途はあくまでも○○ってケースが多いねってだけ
占いや天気予報の類
マニュアルなどの最小最大の仕様や今回の目的にあった型を変数ごとに決定しないと駄目
結構辛い作業になることもある >>859 元々はデフォルト引数がなくて、随分出遅れてから追加されたんであって、そんなことも知らずにwwwかいな >>877
postgreのドキュメントには、integerが一番バランスが取れているからsmallint使うのは限定的とあるね。
.NETでも同じことが言えるのでは。
integer型は数値の範囲、格納サイズおよび性能において最も釣合いが取れていますので、一般的に使用されます。 smallint型は一般的にディスク容量に制限が付いている場合にのみ使用します。 bigint型はintegerの許容範囲では十分ではない場合にのみ使用すべきです。 integerデータ型の方がずっと速いからです。 >>882
.NET Framework 2.0 からようこそw >>854
同じだから、あんなのどっちでも普通に書けてハードルはない。
vbとc#は相互に書き換えができる。
決してCを継承した言語ではないのにC#って名前が実態と合ってない。
で、Like演算子の代わりって何。VBでは使えずC#でのみで使える何かがあるんかいな。 >>845 >>846
プログラム初級者だな。
文末のセミコロンの有無と、ブロックの先頭が"{"末尾が"}"かどうかの違いだけで判断して、全然違うと思い込んでしまう人か。
その基準で言えばC++に似た言語と思ってるのかもしれんが、実際にはC#は決してCを継承した言語ではなく、C++やCと何ら
似ているものはない。
見かけ上は、C++の改良言語。
フタを開ければ中身はVB。このVBを、VBに見えなくするように構文を変化させただけのものでしかない。
実際に、いつもVB使っててC#は使ってなかったが、業務で初めてC#のプログラム改修も、言語の問題で行き詰まりはなかった。
このことからも、やはりC#はVBだ。 C♯の兄弟言語だったVB.netはもう無くなったのか VB.NETってもう言語に機能追加しないって言われてなかったっけ >>886
煽っといてふわふわな主観と思い込みしか書いてないけど、その根拠が書いてないのよね
プログラミングに向いてないのでは? たぶんその人は.NET使って 一緒だー って言ってるんだと思うよ >>883
俺には数百万以上のレコードが見込まれるテーブルに対して、smallintで済むカラムをintには変更できないw
まぁ容量無視できる小さいテーブルならintでもいいんじゃないですかね。ケースバイケース ref構造体は全滅だね
それによってSystem.Text.Jsonなんかは一部使えない インターフェースのデフォルト実装もVBでは使えないはずだけど、デフォルト実装を持ったインターフェースをVBで触ったらどうなるんだろ
既存インターフェースに安全にメンバを追加するための機能だから、良かれと思ってメンバを追加したらVBユーザーが切り捨てられるという悲しい事態になるんだろうか >>893
一千万レコードで列数100としても高々
10M × 100 × 2バイト = 2GB
増えるだけだろ
どんだけしょぼいサーバーなんだよw やたらとLike演算子持ち上げてるからドキュメント見たけど
普通にVB6相当の機能でワロタ
これがRegexの代替になると思ってるのか… VB6.0ならともかくVB.NETで動いているものなんて現存するのか >>896
その単純計算は影響を小さく見過ぎ
indexやfill factorとかカラムの大きさ/レコード長はいろんな要素に関わってくる
それにストレージサイズよりも一番大きな影響は1ページに収まるレコード数か減りあらゆる処理速度が低下すること
要求性能次第では致命的になるから気をつけて 業務アプリだとそこそこ大きい企業でもあるぞ
保守する人間がC#使えないからって向こうから指定されるケースもある >>903
VB6やExcelVBAのコードをVB.NETに移植する案件はたまにあるな >>902
> まぁ容量無視できる小さいテーブルならintでもいいんじゃないですかね。
とか書いてあるのに今度は性能ですか
いろいろ大変ですねw そもそもC#内でメモリに持つような話と、DBに格納するような話を一緒にされてもなぁ >>900
持ち上げてるとか、Regexの代替になるとか、不正解な読解しとる。 >>890
どこがVBなのかの疑問に答えてんだが、何か不足か?
まさか本気でC++のほうが似てる言語と思い込んでないよな。 >>910
C#に似ているのはVB.netの話だろそれ
VB6とは似せてるだけの別物 >>910
c++が似てるとかじゃなくて、どこが「(c#が)VBと同じ」なん?
886に書いてないじゃん?
まさか851-853ので「同じ」って言ってるん? >>912
別言語のように見せてるだけで、中身の実体は同じだ。
C#で学んだプログラムの作り方を、そのままVBにも適用できるのだから、同じ言語だ。
いつもVB使ってC#は未経験なものの、業務でC#で既存の改修と、それともう一つC#での新規の開発を
頼まれたことがあったけど、普通にやり遂げた。それはC#というのは、実質はVBと同じだからだ。 >>913
いやだから具体的にどこが同じなん
違うところはいっぱいあると思うけど(それこそ宣言の仕方とか)、それでも「似ていることが」じゃなくて「同じ」て言い張る根拠があるんやろ >>914
宣言の仕方のような、外側の見かけは違っていて、そこしか見れなくて違うとしか思えないのは、適性に疑問だな。
中身の実体を見て、本質を理解したら同じだということがわかる。 C♯とVB.netは言語仕様がBASIC風になってるだけで中身はほぼ同じ物に間違い無いけど
昔からあるVisualBASIC6.0までのシリーズとは似せてるだけで別物 言語の本質って、ライブラリの使い方が本質だと思ってるのかね c#とVisualBASIC.NETはどっちもネイティブじゃなくて
.netフレームワーク上で動くからコンパイルした後は同じ物だな
VisualBASIC6.0の代替として開発された物なんだけど
中途半端にVB6.0と似てるので混乱を招いて非難轟々
VBと言うと普通VB6.0を指してVB.netの略称としては使われない VisualBASIC.NETはc#をベースにBASIC風に改造された物だから
同じ物と言って間違いではない VisualBASIC6.0のソースを楽に.net環境に移植出来るのが
VisualBASIC.NETが作られたMSの目論見だったが
中途半端に仕様が違うのでVisualBASIC6.0を使い続けるか
C#に流れる人が殆どでVisualBASIC.NETはマイナーな開発環境となってしまった VisualBASIC6.0はランタイム自体が.NET Frameworkと互換性が全く無い >>909
>>851で書いてる
> C#なら複雑な文字列の扱いはどうやってるんかいな。VBならLike演算子で済ませられるもの
> でも、毎度正規表現クラスを使ったりしてるんかいな。
これは、Like演算子がRegex.IsMatch()と同等の機能を提供してると言ってるのと同じだよね?
もし違う意図だというのならプログラム言語の前に日本語学び直した方がいい
あとやたら同一同一言ってるが、unsafeはどうなんだよ 名前の最初の文字が大文字か小文字については、
JavaならClassは大文字、フィールドは小文字、メソッドは小文字、ローカル変数は小文字、定数だけは最初の文字に限らずすべて大文字、と定番的ルールがあったけど、
C#ではどうなってますか?
いろんな本読んでますがバラバラな印象。
自分的C#のルールとして、Classは大文字、フィールドは小文字、プロパティは大文字、メソッドは大文字、ローカル変数は小文字、定数だけは最初の文字に限らずすべて大文字、にしてもいいですか? VB.NETはC#の構文に比べて冗長だよな。3項演算子やインクリメント、ラムダ式のアロー演算子が使えないのもかなり致命的 三項演算子はどちらかと言うと新世界から排除されつつある >>923
同じではない。同等の機能を提供してると言ってると思い込んだのは、大きな誤読だ。
より本格的に文字列のパターンを評価をするには、正規表現クラスが必要にはなるものの、Like演算子で間に合わせられる
事例のものなら一手間省けるが、C#ではまさか毎度正規表現クラスを用意するしかないのかなと疑問を感じての問いかけだ。 とりあえず何年前から来たのか知らないけど勉強しろや >>915
だからその「中身」の「実体」って具体的にそれぞれ何を指しててどう同じなんだよw
「本質」ってどの本質のことだよw
そのふわふわ言うクセどうにかしろよw
そもそもコードの見た目も機能も名前が違えば言語としてもう違うことになると思うが?
それを押して「同じ」っていう根拠が主観過ぎるんだよ
今そっちは、例えばdiff取ったとき同一にならなくても「ファイルは同じだ」って言い張ってるようなもんだぞ
Wc3Gが言うVB.NETが.NETとして同じものだ、っていう主張は理解できるよ
言語仕様としては違うと思うけど、
お互いunsafe以外出来るできないの機能的な差自体は少ないやろ、当たり前やけど。
でも「VB」と「c#」は「同じ」と軽々と断定出来ないと思うよ。少なくともワイには言えない >>928
> まさか毎度正規表現クラスを用意するしかないのかな
いや今時のIDE使ってたらいきなりRegexって書いても補完機能呼べば自動でusing付与までしてくれるでしょ
「Like」って書くのとなんら変わらん
メモ帳でコーディングしてるのか? >>928
「同じ」って主張する割にはc#知らない? >>923
unsafeの話を持ち出したが、そういった特殊で普段は一般には使わないところにまで、細かく意識して議論するつもりはない。
特殊な事例も含めて、厳密に正確を突き詰めないといけない何らかの場ならともかく、たかが(初心者用)の名前のつくスレッ
ドの場だ。
多くの物事には、原則だけでなく、例外というのものあるのは当たり前なことだ。 C++/CLIも同じだーって言い出すんじゃないの? >>930
C#とVBのコードを相互に書き換えができれば、同じ実体であり、本質であるものを双方に持ち合わせている。
これでも納得できなければ、元のソースと書き換えた言語ソースのコンパイルしたものを、それぞれ逆コンパイルして比較すればはっきりする。
何がふわふわなんだ。これで十分な話だ。ほかに何を求めるのか。 >>931
サクラエディタで編集してコマンドプロンプトでコンパイル >>935
C++/CLIでマネージコードだけ記述したらほぼ同じものが出来上がるよね
つまりC++/CLI=C#=VB.Net
ひいてはC++=VB >>936
エアプすぎるだろw
C#に限ってもバージョンが違うだけで出来上がる実行ファイルに差が出る可能性があるぞ
実体と本質の定義をさっさと記述しろよ >>932
931で、正解だということが判明した。
ただしIDEの機能でプログラマーを支援するという情報は得られた。
間違ってなかったので、「知らない」にはなってないな。 >>936
1行目がまたふわふわしてんなあw
そりゃあ.NET使ってりゃ合わせようとすれば同じになるわw
でも言語として「VB」と「c#」が「同じ言語」と言い切ったんだぞ?
コンパイルして同じものができれば全部「同じ」言語か?
言語仕様も同じか?片方は言語として今後積極的にアップデートもされないとされてるのに同じか?
その程度の認識で普段も「同じ」って言葉使ってるの?こええよw
10数年前ならいざしらず、今の現場とかで「VBとc#は同じだ」なんて言ったら鼻で笑われるぞw こういうVBおじさんをいまc#案件で使ったらすごい苦労しそう
教えても理解できず、「VBならこうしたのに」とかブツブツ言って進まなそうw >>939
そこにこだわって何の意味があるんだ。
目的のプログラムを完成させれば終わりだ。 >>940
判明した、って知らなかっただけじゃん
負けず嫌いでかわいいなあw >>933
>unsafeの話を持ち出したが、そういった特殊で普段は一般には使わない
C#でアンマネージリソース扱うのなんて珍しくもなんともないだろw
OS標準の簡単なUIプログラミングしかしたことなさそう
釣りなのか知らんけどテンプレ読めないアホは別スレ行け >>944
知らなかったのではなくて、知っていた。
そして、それが間違っていない確信を得たんやないか。 次のスレから勉強しない馬鹿が噛みついてくるスレに名前を変えよう 今勉強しようと思っていたじゃなくてC# ver〇 新機能でググって勉強しろ >>936
>C#とVBのコードを相互に書き換えができれば
VB.NETでできてc#にできないこととかあるんだが
言語仕様だって全く違うわけで、同じなのは.NET Frameworkを使うってだけ
ただ、それがc#とVB.Netのプログラミングのほとんどだったりするだけだ >>945
(初心者用)なスレには十分な合格点やないか >>950
オレオレ基準で話したって誰も共感なんかしてくれないぞ
質問が無いなら普通に迷惑だから消えろ レス数が950を超えています。1000を超えると書き込みができなくなります。