佐々木屋

技術的なことから趣味まで色々書きます

1.C#、VB.NET-1.C#、VB.NETの違い

ここがダメだよ!VB.NET⑤(静的クラスが無いのよ)

そうなんです。VB.NETには静的クラスが無いんです。「モジュールがあるやん?」と思った方。 VB.NETのモジュールがC#の静的クラスとよく混同されますが、残念ながら100%同じというわけではないのです。 呼び出し方 静的クラスの場合、メンバーの呼び出し…

ここがダメだよ!VB.NET④(「=」の意味)

C#の場合、単に「=」の場合は代入を表します。つまり、下記のコードは変数xに1を代入します。 x = 1; では、等価の意味はというと、「==」のようにイコールを重ねます。 if (x == y) { //~ } このように等価と代入が異なる演算子として用意されています。し…

ここがダメだよ!VB.NET③(参照渡しの曖昧さ)

メソッドの引数は主にByValの値渡しとByRefの参照渡しがあります。VB.NETでは以下は等価です。 Private Sub Test(ByVal num As Integer) Private Sub Test(num As Integer) ByValの省略は意見が分かれますが、正直どちらでも私はいいと思います。ただ、VB6の…

ここがダメだよ!VB.NET②(「()」の省略)

メソッドは必ず「()」が付きます。引数が必須であればいいのですが、VB.NETで引数無しの場合は「()」を省略してもコンパイルエラーにはなりません。 Dim a As String = (123).ToString() Dim b As String = (123).ToString C#は「()」が無いとコンパイルが通…

ここがダメだよ!VB.NET①

どういうタイトルをつけようか迷いましたが、これが一番しっくりくるかな~? 私は手続き型言語もオブジェクト指向言語も関数言語も一通り経験してきましたが、一番好きな言語は何?と聞かれたら、断然C#と答えます。そしてC#とよく比較される言語の一つとし…

デリゲートの使いどころ ③(マルチキャストデリゲート)

一つのデリゲートで複数のメソッドを連続で実行することをマルチキャストデリゲートと呼びます。これによってメソッドを任意のタイミングで追加して最後に実行するような処理も簡潔に書くことができます。例えば以下のようなメソッドをデリゲートで呼ぶとし…

シャドウとオーバーライドの違い

VB.NETにはオーバーライドに似たような機能でシャドウがあります。但し、オーバーライドとシャドウは機能としては似ているかもしれませんが、使用される意味としては全くの別物です。初学者は混同しがちなので注意して下さい。読んで字のごとくですが、シャ…

オプション引数①

メソッドの引数を省略、既定値を設定できる機能をオプション引数と呼びます。オプション引数はC++やVB.NETでは昔からありましたが、C#では.NET Framework4.0から初めて導入されました。 オプション引数 C#は引数に既定値を設定するとオプション引数となりま…

null許容型(C#とVB.NETの違い)

参照型はnullを許容していますが、値型はどうでしょうか。実はここでもC#とVB.NETで微妙に挙動が異なります。 C#におけるnull代入時の挙動 参照型はnullを許容していますが、値型はnull非許容です。つまり、以下のような構文はそもそもコンパイルエラーとな…

VB.NETでブロック文を作成したい

C#には構造文を作る区切り文字「{ }」があります。 { string hoge = "piyo"; Console.WriteLine(hoge); } { int hoge = 123; Console.WriteLine(hoge); } こんな感じで局所的に変数を作ったり、処理を分けたりするのにすごく便利なのです。お馴染みのforやIf…

Option Strict Off は悪なのか?

とある方からこんな質問。 「Option Strict Off は使うべきか」 私の判断は、「どちらでも良い」が正解です。 他のWEBや本を見ると、「On」にしないと駄目プラグラマやで~みたいな風潮で洗脳するように書かれていますが・・・。そもそも、「Option Stric…

文字列分割(Split)の挙動

C#とVB.NETでは文字列分割の挙動で若干の違いがあります。これはVB.NET初学者でもよく間違いますので、しっかり覚えておきましょう。 例えば、文字列「lowhogemiddlehogehighhogenone」を「hoge」で分割することを考えます。分割後を列挙した場合、以下のよ…

似ているようで違うC#とVB.NET

ランキング参加中プログラミングランキング参加中エンジニアグループ私はC#とVB.NETどちらでもプログラミング出来ますが、片方しか知らない方向けに違いをいくつか紹介していきたいと思います。 そもそも親戚?他人? C#とVB.NETはどちらもWindows系アプリケ…

VB.NETのプロパティは引数を付けられる

便利なのか余計なお世話なのか分かりませんが、VB.NETのプロパティは引数を実装できます。 例えば以下のような感じ。 Private piyo As String() = {"a", "b", "c"} Public ReadOnly Property Hoge(ByVal index As Integer) As String Get Return piyo(index)…