Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9725

VB.Net から移行した人のための C# Tips

$
0
0
VB.Net が、言語的な発展をしないということなどから、VB.Net を C# に移行しました。 その際に、もうちょっと早くに知っていればよかった、、、という C# 経験者には不要ですが、VB.Net から移行した人向けの Tips で検索にひっかかりにくいものをまとめてみました。 間違いがあったらすいません💦 特定のModuleの関数をグローバル関数にしたい。 C# でグローバル関数を使う事の是非はあるかと思いますが、そんな時はソースの最初にこんなのを書きましょう。 using static Project.Module1; これで、Module1 に書いた static な関数がグローバルに扱えるようになります。 複数のファイルに共通した using を定義したい。 上のようなことをやろうとすると、すべてのファイルに using を書かないといけないので面倒ですよね。 VB.Net では、それをプロジェクトの定義でできたのですが、(たぶん)C#ではできません。 ソースコードを、他のプロジェクト等に移行しやすいように、プログラムはソースコードで完結すべきというのが理由のようです。 残念ですが、あきらめましょう。 System.IO.Path を IO.Path で記述したい。 C# では残念なことに、using System; と書いても、その namespace 内のクラスが直接書けるようになるだけです。 VB.Net では、Imports System と記述すると System.IO.File 内のクラスを書きたいときには、IO.File と書いて参照できましたが C# では参照してくれません。 こんな時は、下記のように書きましょう。 using IO = System.IO; 参照先ひとつづつ書くのは面倒ですが、がんばりましょう。 インデックスプロパティを使いたい。 VB.Net ではプロパティに引数をつけれるインデックスプロパティというのがあります。 残念ながら、C# にはありません。 Dictionary の Item のように、C# にもあるじゃないかと思うこともありますが、これは各クラスに一つだけインデクサとして作成することができます。 VB.Net では次のように、Default をつけたプロパティが、C# でいうインデクサに相当します。そのため一つしか作成できません。 VB.Net Public Default Property Hoge( key As String ) 回避するには、次ぐらいでしょうか。 代入構文での記述をあきらめて、SetHoge というような関数を作る。 配列や、Dictionary オブジェクトを返すようにする。 専用のクラスを作る。 これだけでも、それぞれをまじめに書くとけっこうな量になるのでとりあえずこれぐらいで。 ==演算子のoverroad はやめておいた方がいい。 あんまり使ってる人もいない気がしますが、まれに==演算子を overroad することがあるかと思います。 VB.Net では、Nothing との比較に==演算子を使う事はあまりないかと思いますが、C# では、isnot 比較演算子がないことから、null との比較を == や != でやることが多いです。 その際に、== 演算子を overroad していると想定外の動作をすることがあります。詳しくは、こちら イベントを一覧から追加したい。 VB.Net だと、ソースエディタの上の方でイベントを追加できましたが、C# では(たぶん)できません。 プロパティウィンドウの中に「雷」アイコンがあるのでそこから追加しましょう。 ByRef 相当の構文は二つある。 VB.Net は値の参照渡しで、ByRef という構文要素がありました。 これは C# では out と ref と二つに分かれます。使い分けは、こんな感じ。 void Hoge( out int value ) { value = 0; } void Fuga( ref int value ) { value = ( value == 0 ? value : value + 1 ); } つまり out は中身を参照しない値、ref は値を参照したうえで結果も渡す場合。 ぶっちゃけ、ref だけでもそんなに問題ない気もしますが、ちゃんとしておくと変数の初期化の警告で丁寧に教えてくれるので幸せになれます。 カッコとかのコーディング規則は、後から決めてもいい。 VB.Net だとほとんど強制されるので気にしなくてよかったですが、C# では、{ の位置とか、いろいろ決めたくなります。 これは、後から Visual Studio のツールで一括変換できるので後から考えても大丈夫。 VB.Net だと、Me をつけるかどうか統一されてなかったりしますが、C# はこういうのもツールで一括変換できるのでこういうところでも C# にしてよかったなぁと思っちゃいます。

Viewing all articles
Browse latest Browse all 9725

Trending Articles