Untuk apa nilainya, inilah contoh bagaimana mewarisi dari kelas generik digunakan dalam kompiler Roslyn Microsoft, dan bahkan tanpa mengubah nama kelas. (Saya sangat bingung dengan ini sehingga saya berakhir di sini dalam pencarian saya untuk melihat apakah ini benar-benar mungkin.)
Dalam ProjectAnalysis proyek Anda dapat menemukan definisi ini:
/// <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>
{
...
}
Kemudian dalam analisis proyek CSharpCode ada definisi ini:
internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
{
...
}
Kelas PEModuleBuilder non-generik ini digunakan secara luas dalam proyek analisis CSharpCode, dan beberapa kelas dalam proyek itu mewarisi darinya, secara langsung atau tidak langsung.
Dan kemudian dalam proyek BasicCodeanalysis ada definisi ini:
Partial Friend MustInherit Class PEModuleBuilder
Inherits PEModuleBuilder(Of VisualBasicCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState)
Karena kita dapat (semoga) berasumsi bahwa Roslyn ditulis oleh orang-orang dengan pengetahuan luas tentang C # dan bagaimana seharusnya digunakan, saya berpikir bahwa ini adalah rekomendasi dari teknik ini.