가치있는 것을 위해, 클래스의 이름을 변경하지 않고 Microsoft의 Roslyn 컴파일러에서 일반 클래스에서 상속하는 방법의 예가 있습니다. (나는 이것에 의해 매우 독창적이어서 이것이 실제로 가능한지 알기 위해 검색에서 끝났습니다.)
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 #에 대한 광범위한 지식을 가진 사람들이 작성했다고 가정 할 수 있기 때문에 (어떻게 사용 해야하는지) 이것이 기술의 권장 사항이라고 생각합니다.