นี่คือตัวอย่างของการสืบทอดจากคลาสทั่วไปในคอมไพเลอร์ 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)
เนื่องจากเราสามารถ (หวังว่า) สมมติว่า Roslyn ถูกเขียนขึ้นโดยผู้ที่มีความรู้อย่างกว้างขวางเกี่ยวกับ C # และวิธีการใช้งานฉันคิดว่านี่เป็นคำแนะนำของเทคนิค