sha*_*oth 13 c# generics static-variables
在C#中我有一个泛型类:
public class MyGeneric<ParameterClass> where ParameterClass: MyGenericParameterClass, new() {
public static int Variable;
}
Run Code Online (Sandbox Code Playgroud)
现在在C++中如果我实例化一个带有不同参数的模板化类,每个完整的类都会得到它自己的Variable,所以我就是说不出来
MyGeneric.Variable = 1; // invalid in C++
Run Code Online (Sandbox Code Playgroud)
在C++中,但我似乎可以在C#中这样做.
我想澄清一下......
如果我有一个带有静态成员变量的泛型,那么该变量是否在所有泛型实例之间共享?
Hab*_*bib 15
泛型类声明中的静态变量在相同的闭合构造类型(第26.5.2节)的所有实例之间共享,但不在不同的闭合构造类型的实例之间共享. 无论静态变量的类型是否涉及任何类型参数,这些规则都适用.
您可能会看到此博客文章:Gus Perez 在泛型类中的静态字段
你也不能在C#中做到这一点.
MyGeneric.Variable = 1;
Run Code Online (Sandbox Code Playgroud)
请考虑ECMA语言规范中的以下示例.
class C<V>
{
static int count = 0;
public C()
{
count++;
}
public static int Count
{
get { return count; }
}
}
class Application
{
static void Main()
{
C<int> x1 = new C<int>();
Console.WriteLine(C<int>.Count); // Prints 1
C<double> x2 = new C<double>();
Console.WriteLine(C<double>.Count); // Prints 1
Console.WriteLine(C<int>.Count); // Prints 1
C<int> x3 = new C<int>();
Console.WriteLine(C<int>.Count); // Prints 2
}
}
Run Code Online (Sandbox Code Playgroud)
MyGeneric<MyClass>.Variable
MyGeneric<MyOther>.Variable
Run Code Online (Sandbox Code Playgroud)
这两个是不同的静态变量,像单独的类一样处理.