開発における相違点
サポートされているプログラミング言語間で最も大きく異なるのは、当然ながら言語の構文です。C++ および Visual Basic にはそれぞれ確立された歴史があり、相当な量の既存のコードがあるため、.NET に対応するためにこれらの言語を最新化するときには、そうした点が考慮に入れられました。これに対して、Visual C# の場合は、それほど問題点はありませんでした。ビルド プロセスや名前空間の定義などのいくつかの高度なトピックについては、以降のセクションの該当するサンプル コードで説明しますが、ここでは、各言語間のより明確な相違点を示します。
大文字と小文字の区別 : C++ と Visual C# では大文字と小文字が区別されますが、Visual Basic では区別されません。しかし、CLS 準拠のプログラムでは、大文字と小文字の違いだけでパブリック メンバを区別することはできません。このような制限に対応するため、Visual Basic および CLS に準拠する他の言語のいくつかでは、大文字と小文字を区別する他の言語で作成されたコンポーネントを使用できるだけでなく、大文字と小文字を区別するコンポーネントを作成することもできます。
ライブラリの参照 : 名前空間内にあるクラスを使用するには、まず、必要とするその名前空間を含んだアセンブリへの参照を取得する必要があります。すべての .NET プログラムは、少なくとも (通常は Windows\System ディレクトリ内にある) Mscorlib.dll にある System 名前空間を使用します。Visual Basic および Visual C# は Mscorlib.dll を暗黙的に参照しますが、C++ マネージ拡張プログラムでは、次のプリプロセッサ ディレクティブを組み込む必要があります。
#using <mscorlib.dll>
Visual C# および Visual Basic は mscorlib アセンブリを暗黙的に参照しますが、それ以外のアセンブリに対しては /reference コンパイラ スイッチを使用する必要があります。通常、参照されるライブラリは、アプリケーション ディレクトリまたはそのアプリケーションのサブディレクトリにあります。たとえば、サードパーティによって提供されているツールのように、多数のアプリケーションで使用されるようにデザインされているライブラリは、アセンブリ キャッシュ (WindowsDirectory\Assembly) に格納し、特定のガイドラインに従う必要があります。アプリケーション構成ファイルで追加のオプションを提供できます。ただし、ASP.NET アプリケーションの場合は、コンポーネントがアプリケーションの仮想ディレクトリの開始点の下の \Bin サブディレクトリに格納されている必要があります。
名前空間のインポート : クラスは、完全に参照することも (たとえば、System.IO.FileStream のように、絶対パス名と同様の形式)、その名前空間をプログラムにインポートすることもできます。インポートした後は、その中に含まれているクラス名を完全限定名で指定する必要はありません。System オブジェクトに簡単にアクセスできるようにするには、その名前空間を次に示すようにインポートしておく必要があります。
C++ マネージ拡張 |
|
Visual C# |
|
Visual Basic |
|
オブジェクト メンバの参照 : Visual Basic と Visual C# は両方ともピリオド (.) をスコープ解決演算子として使用します。この演算子によって、たとえば、Console の WriteLine メソッドを参照するときに構文 Console.WriteLine を使用できます。C++ マネージ拡張では、二重コロン (::) を解決演算子として使用します。
オブジェクトの宣言 : C++ マネージ拡張および Visual C# で変数を使用する場合は、事前にその変数を宣言しておく必要がありますが、Visual Basic の場合はその必要はありません。new キーワードを使用することによって、オブジェクトの新しいインスタンスを作成します。3 つの言語別に、宣言および作成ステートメントの例を次に示します。各ステートメントは、Lib 名前空間に格納されている Comp 型の myComp という名前のオブジェクトを宣言して作成します。
C++ |
|
Visual C# |
|
Visual Basic |
|
プログラムのエントリ ポイント : すべての実行可能プログラムには、アプリケーションが実行を開始する位置を示す、外部エントリ ポイントが必要です。この構文は、C++ マネージ拡張では変更されていませんが、Visual C# および Visual Basic では、すべての情報をクラス内で指定するようになっています。次のコードは、C++ マネージ拡張の構文を示しています。
void main() {
}
Visual C# の構文を次のコードに示します。
class MainApp {
public static void Main() {
}
}
次のコードは、Visual Basic の構文を示しています。
Public Module modmain
Sub Main()
End Sub
End Module
しかし、内部的には、C++ マネージ拡張のコンパイラも、エントリ ポイントをクラス内にカプセル化しています。
名前空間とクラスの定義 : 3 つの各言語は、カスタム名前空間の作成と、その名前空間内でのクラスの作成をサポートしています。3 つの言語は、これらの処理をコード内で行いますが、その構文は多少異なります。たとえば、C++ マネージ拡張ではマネージ クラス宣言を使用しますが、Visual C# では名前空間とクラスの宣言に後続のセミコロンは必要ありません。次のコードは、C++ マネージ拡張の構文を示しています。
namespace CompVC {
__gc class StringComponent {
public:
StringComponent() {
}
};
};
Visual C# の構文を次のコードに示します。
namespace CompCS {
public class StringComponent {
public StringComponent() {...}
}
}
次のコードは、Visual Basic の構文を示しています。
Namespace CompVB
Public Class StringComponent
Public Sub New()
End Sub
End Class
End Namespace
参照
Hello World | サンプル .NET コンポーネントの作成 | 単純なコンポーネントのクライアント | 開発チュートリアルのまとめ | 付録 A: 名前空間を検索するためのツール