class Stack<T>
{
T[] items;
int index;
public delegate void StackDelegate(T[] items);
internal static void DoWork(int[] items) { }
}
class TestStack
{
public static void TestSta()
{
Stack<float> s = new Stack<float>();
Stack<int>.StackDelegate d = Stack<float>.DoWork;
}
static void Main()
{
TestSta();
}
}
}
上記のコードでは、非ジェネリック デリゲートがジェネリック クラス内で定義されています。非ジェネリック デリゲートは、包含クラスの型パラメーターを使用します。
デリゲートを参照するときは、デリゲート型が定義された包含クラス名と、包含クラスの型パラメーターの型引数の両方を使用して、デリゲート型の名前を修飾する必要があります。そうしないと、コンパイラーは、デリゲート。
型引数を使用して StackDelegate デリゲートを参照する場合、それはデリゲートの構築に使用される型引数ですか?
Stack<int>.StackDelegate d = Stack<float>.DoWork;
この場合、デリゲートの構築に使用される型はどれですか? <int>
または<float>
?
また、デリゲートなどのネストされた型が参照されたときにクラスは初期化されますか。次のステートメントStack<int>.StackDelegate d
により、クラス Stack が<int>
構築および初期化されますか。その後、ステートメントStack<float>.DoWork;
により、クラス Stack の別の構築および初期化が行われますか。つまり、このステートメントを実行した後、実行時にジェネリック クラス スタックから 2 つの初期化された型を取得しますか?