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