Nachstehend finden Sie ein Beispiel dafür, wie das Erben von einer generischen Klasse im Microsoft Roslyn-Compiler verwendet wird, ohne den Namen der Klasse zu ändern. (Ich war so verblüfft, dass ich hier auf meiner Suche gelandet bin, um zu sehen, ob dies wirklich möglich ist.)
Im Projekt CodeAnalysis finden Sie diese Definition:
/// <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>
{
...
}
Dann gibt es in Projekt CSharpCodeanalysis diese Definition:
internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
{
...
}
Diese nicht generische PEModuleBuilder-Klasse wird häufig im CSharpCodeanalysis-Projekt verwendet, und mehrere Klassen in diesem Projekt erben direkt oder indirekt davon.
Und dann gibt es im Projekt BasicCodeanalysis diese Definition:
Partial Friend MustInherit Class PEModuleBuilder
Inherits PEModuleBuilder(Of VisualBasicCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState)
Da wir (hoffentlich) davon ausgehen können, dass Roslyn von Leuten mit umfassenden Kenntnissen in C # geschrieben wurde und wie es verwendet werden sollte, denke ich, dass dies eine Empfehlung der Technik ist.