Membres statiques partagés entre les instances des types génériques construits fermés

Chaque type générique construit fermé possède son propre accès aux membres statiques.

Si Class<T> a pour membre statique Value alors Class<int> et Class<string> possèdent deux valeurs distinctes de Value.

En effet, tel que mentionné dans cet article sur les interfaces, il n'existe pas en C# d'opérateur diamond permettant d'accéder au type générique ouvert sous-jacent aux types fermés, ce qui empêche le polymorphisme générique.

Comment avoir une Value identique pour tous les types ou comment avoir une valeur statique commune à des classes simples telles que Class1 et Class2 ?

Voici une solution.

Le factory de base :

La classe de base :

Exemple d'utilisation : le nom de classe de base du singleton est initialisé une seule fois et chaque classe dérivée fournit la même valeur.