Buna değer, Microsoft’un Roslyn derleyicisinde ve sınıfın adını bile değiştirmeden, genel bir sınıftan miras almanın bir örneği. (Bundan gerçekten şaşırmıştım, bunun gerçekten mümkün olup olmadığını görmek için araştırmamda sona erdi.)
CodeAnalysis projesinde bu tanımı bulabilirsiniz:
/// <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>
{
...
}
Sonra CSharpCodeanalysis projesinde bu tanım var:
internal abstract class PEModuleBuilder : PEModuleBuilder<CSharpCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState>
{
...
}
Bu jenerik olmayan PEModuleBuilder sınıfı, CSharpCodeanalysis projesinde yaygın olarak kullanılır ve bu projedeki birkaç sınıf doğrudan veya dolaylı olarak ondan miras alır.
Ve sonra BasicCodeanalysis projesinde şu tanım var:
Partial Friend MustInherit Class PEModuleBuilder
Inherits PEModuleBuilder(Of VisualBasicCompilation, SourceModuleSymbol, AssemblySymbol, TypeSymbol, NamedTypeSymbol, MethodSymbol, SyntaxNode, NoPia.EmbeddedTypesManager, ModuleCompilationState)
İnşallah (umarım) Roslyn'in geniş C # bilgisi olan insanlar tarafından yazıldığını ve nasıl kullanılması gerektiğini varsayalım. Bunun bir teknik öneri olduğunu düşünüyorum.