One of today's questions had to do with how static fields work in generic types in the upcoming C# 2.0. For example, what would the output be from the following code?

using System;

class Gen<T> {
    public static int X = 0;
}

class Test {
    static void Main() {
        Console.Write(Gen<int>.X);
        Console.Write(Gen<string>.X);
        
        Gen<int>.X = 5;

        Console.Write(Gen<int>.X);
        Console.Write(Gen<string>.X);
    }
}

The correct answer is: 0050. The details can be found in section 25.1.4 of the ECMA C# Language specification:

A static variable in a generic class declaration is shared amongst all instances of the same closed constructed type (§26.5.2), but is not shared amongst instances of different closed constructed types. These rules apply regardless of whether the type of the static variable involves any type parameters or not.