Why isn't a static constructor invoked on a class used as a generic type parameter?

Viewed 751

Given the following classes:

public class Foo {
    static Foo() {
        Console.WriteLine("Foo is being constructed");
    }
}

public class Bar {
    public void ReferenceFooAsGenericTypeParameter<T>() {
        Console.WriteLine("Foo is being referenced as a generic type parameter");
    }
}

public class SampleClass
{
    public static void Main()
    {
        new Bar().ReferenceFooAsGenericTypeParameter<Foo>();
    }
}

The output is

Foo is being referenced as a generic type parameter

This makes sense, according to the spec:

A static constructor is called automatically to initialize the class before the first instance is created or any static members are referenced.

But I'm curious why the static constructor is not invoked when the type is referenced as a generic type parameter.

3 Answers
Related