ひょんなことから VB と C# の項目テンプレートで違いはあるのかな? と思い、比べて見ました。結果としては、追加できる項目テンプレートそのものに違いがあったのと、同じ項目テンプレートでも生成されるコードに違いがありました(Visual Studio 2005 Standard Edition で確認しています)。

追加できる項目テンプレートの違い

 VB と C# で追加できる項目テンプレートは次のとおりです。

VB C#
COM クラス
HTML ページ HTML ページ
Jscript ファイル
MDI 親フォーム MDI親
SQL データベース SQL データベース
VBScript ファイル
Web カスタム コントロール Web カスタム コントロール
Windows Script Host ファイル
Windows サービス Windows サービス
Windows フォーム Windows フォーム
XML スキーマ XML スキーマ
XML ファイル XML ファイル
XSLT ファイル XSLT ファイル
アイコン ファイル アイコン ファイル
アセンブリ リソース ファイル
アセンブリ情報ファイル
アプリケーション構成ファイル アプリケーション構成ファイル
インストーラ クラス インストーラ クラス
インターフェイス インターフェイス
エクスプローラ フォーム
カーソル ファイル カーソル ファイル
カスタム コントロール カスタム コントロール
クラス クラス
クラス ダイアグラム クラス ダイアグラム
継承されたフォーム 継承されたフォーム
継承されたユーザ コントロール 継承されたユーザ コントロール
コード ファイル コード ファイル
コンポーネント クラス コンポーネント クラス
情報ボックス 情報ボックス
スプラッシュ スクリーン
スタイル シート
設定ファイル 設定ファイル
ダイアログ
データセット データセット
テキスト ファイル テキスト ファイル
トランザクション コンポーネント
デバッガ ビジュアライザ
ビットマップ ファイル ビットマップ ファイル
モジュール
ユーザー コントロール ユーザ コントロール
リソース ファイル
レポート レポート
ログイン フォーム

 この結果から VB と C# の特徴が良く出ていると思います。VB には「エクスプローラ フォーム」や「ダイアログ」といったユーザインタフェースを持った項目テンプレートが用意されています。このことから VB ではユーザインタフェースの開発がよく行われていると思います。また「COM クラス」が用意されているのも VB らしさを感じさせられます。

 一方 C# には「Jscript ファイル」や「Windows Script Host ファイル」といったコードに関する項目テンプレートが用意されています。このことから C# ではコマンドやライブラリの開発がよく行われていると思います。

生成される項目テンプレートのコードの違い

 次は VB と C# の項目テンプレートの生成されるコードの違いについてです。それぞれ少なからず違いはあるものの、大体同じようなコードになっていました。しかし、一つだけ興味深いものを見つけてしまいました。それが Dispose メソッドの処理で Try-Finally を使用しているかという点です。

 VB では Dispose メソッド内の処理を Try-Finally で囲っています。

VB の Dispose メソッド
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
    Finally
        MyBase.Dispose(disposing)
    End Try
End Sub

 C# では Dispose メソッド内の処理を Try-Finally で囲っていません。

C# の Dispose メソッド
protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}

 いままで Dispose メソッドから例外は発生しないと思っていました。が、あらためて考えてみると Stream 系 の Dispose メソッドでは例外が発生することもあるので、一概に Dispose メソッドから例外は発生しないと考えるのは危険だと思いました。そういう場合もあるので VB では Dispose メソッドの処理を Try-Finally でいるんだと思います。

 このように VB と C# の項目テンプレートにはいろいろと違いがあることがわかりました。どちらか片方の言語だけで開発されている方でも、もう片方にはどういうものがあるのか知っておく事でいろいろと役に立つ場面もあるかと思います。一つの言語に縛られずに複数の言語に目を向けることで、知識の幅が広がるということを改めて感じさせられました。