Static members shared amongst instances of closed constructed generic types

Each closed constructed generic type has its own access to static members.

If Class<T> has a static member Value then Class<int> and Class<string> have two separate values for Value.

Indeed, as mentioned in this article about interfaces, there is no diamond operator in C# to access the open generic type underlying to closed types, which prevents generic polymorphism.

How have the same Value for all types or how to have a common static value to simple classes such as Class1 and Class2?

Here is a solution.

The base factory:

The base class:

Example of usage: the singleton base class name is initialized once time and every derived class provides the same value.