Để biết giá trị của nó, đây là một ví dụ về cách kế thừa từ một lớp chung được sử dụng trong trình biên dịch Roslyn của Microsoft và thậm chí không thay đổi tên của lớp. (Tôi đã rất bối rối vì điều này đến nỗi tôi đã kết thúc ở đây để tìm kiếm xem điều này có thực sự khả thi không.)
Trong dự án CodeAnalysis, bạn có thể tìm thấy định nghĩa này:
/// <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>
{
...
}
Sau đó, trong dự án CSharpCodeanalysis có định nghĩa này:
internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
{
...
}
Lớp PEModuleBuilder không chung này được sử dụng rộng rãi trong dự án CSharpCodeanalysis và một số lớp trong dự án đó kế thừa từ nó, trực tiếp hoặc gián tiếp.
Và sau đó trong dự án BasicCodeanalysis có định nghĩa này:
Partial Friend MustInherit Class PEModuleBuilder
Inherits PEModuleBuilder(Of VisualBasicCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState)
Vì chúng ta có thể (hy vọng) cho rằng Roslyn được viết bởi những người có kiến thức sâu rộng về C # và cách sử dụng nó nên tôi nghĩ rằng đây là một khuyến nghị về kỹ thuật.