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 的另一个构造和初始化。意思是,在执行此语句后,我们是否会在运行时从泛型类堆栈中获得两个初始化类型?