Visual C# でのコンポーネント
Visual C# では単純な文字列コンポーネントがどのように記述されるかを次に示します。
リスト 1. Visual C# でのコンポーネント (CompCS.cs)
using System;
namespace CompCS {
public class StringComponent {
private string[] StringsSet;
public StringComponent() {
StringsSet = new string[] {
"C# String 0",
"C# String 1",
"C# String 2",
"C# String 3"
};
}
public string GetString(int index) {
if ((index < 0) || (index >=
StringsSet.Length)) {
throw new IndexOutOfRangeException();
}
return StringsSet[index];
}
public int Count {
get { return StringsSet.Length; }
}
}
}
前述したように、namespace ステートメントを使用して、作成対象のクラスをカプセル化するための新しい名前空間を作成します。
namespace CompCS {
この名前空間は、入れ子にすることができ、複数のファイルに分割できます。また、1 つのソース コード ファイルに、入れ子になっていない複数の名前空間を格納することもできます。すべての Visual C# コードはクラスの中に格納する必要があるため、クラスを含む名前空間が必要となります。
public class StringComponent {
StringComponent のインスタンスは共通言語ランタイムによって作成され、ガベージ コレクション ヒープで管理されます。このクラス コンストラクタは、クラスの新しいインスタンスが作成されるたびに実行され、そのクラスと同じ名前を持ち、戻り値の型はありません。
public StringComponent() {
Visual C# ではマネージ型だけを使用するため、変数を宣言するときに、C++ マネージ拡張の場合には必要とされる特別な処理を行う必要はありません。
整数を受け取って文字列を返す GetString メソッドを次に示します。このメソッドはシンプルで、3 つの言語のサンプルすべてで同じです。
public string GetString(int index) {
...
return StringsSet[index];
}
GetString メソッド内の throw ステートメントに注目してください。
throw new IndexOutOfRangeException();
このステートメントは、IndexOutOfRangeException 型のランタイム ベースの例外処理オブジェクトを作成してスローします。
最後に、読み取り専用の Length プロパティを次のように作成します。
public int Count {
get { return StringsSet.Length; }
}
Visual C# コンポーネントのコンパイル プロセスは、スタンドアロンのプログラムのコンパイル プロセスよりも多少複雑です。
csc.exe /t:library /debug+ /out:..\bin\CompCS.dll CompCS.cs
C++ マネージ拡張コンポーネントの場合と同様に、/out スイッチを使用して、コンパイル済みのコンポーネントを ..\Bin サブディレクトリに配置します。同様に、.dll ファイル名拡張子付きの実行可能ファイルではない DLL を作成するには /t(arget):library スイッチが必要です。
参照
Visual Basic でのコンポーネント | 単純なコンポーネントのクライアント | 開発チュートリアルのまとめ | 付録 A: 名前空間を検索するためのツール