Про те, що це варто, ось приклад того, як успадковування від загального класу використовується в компіляторі Roslyn від Microsoft, і навіть не змінюючи назву класу. (Мене це настільки спалахнуло, що я опинився тут, шукаючи, чи справді це можливо.)
У проекті 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)
Оскільки ми можемо (сподіваємось) припустити, що Рослін були написані людьми з великими знаннями C # і як це слід використовувати, я думаю, що це рекомендація методики.