Для чего стоит, вот пример того, как наследование от универсального класса используется в компиляторе Microsoft Roslyn, даже без изменения имени класса. (Я был настолько сбит с толку этим, что попал сюда в поисках, чтобы увидеть, действительно ли это возможно.)
В проекте CodeAnalysis вы можете найти это определение:
/// <summary>
/// Common base class for C# and VB PE module builder.
/// </summary>
internal abstract class PEModuleBuilder<TCompilation, TSourceModuleSymbol, TAssemblySymbol, TTypeSymbol, TNamedTypeSymbol, TMethodSymbol, TSyntaxNode, TEmbeddedTypesManager, TModuleCompilationState> : CommonPEModuleBuilder, ITokenDeferral
where TCompilation : Compilation
where TSourceModuleSymbol : class, IModuleSymbol
where TAssemblySymbol : class, IAssemblySymbol
where TTypeSymbol : class
where TNamedTypeSymbol : class, TTypeSymbol, Cci.INamespaceTypeDefinition
where TMethodSymbol : class, Cci.IMethodDefinition
where TSyntaxNode : SyntaxNode
where TEmbeddedTypesManager : CommonEmbeddedTypesManager
where TModuleCompilationState : ModuleCompilationState<TNamedTypeSymbol, TMethodSymbol>
{
...
}
Тогда в проекте CSharpCodeanalysis есть это определение:
internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
{
...
}
Этот неуниверсальный класс PEModuleBuilder широко используется в проекте CSharpCodeanalysis, и несколько классов в этом проекте наследуются от него, прямо или косвенно.
И затем в проекте BasicCodeanalysis есть это определение:
Partial Friend MustInherit Class PEModuleBuilder
Inherits PEModuleBuilder(Of VisualBasicCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState)
Поскольку мы можем (надеюсь) предположить, что Roslyn был написан людьми с обширными знаниями C # и как его следует использовать, я думаю, что это рекомендация метода.