Skip to content

类型关系

本文档介绍如何分析类型之间的关系,包括继承、实现、转换和兼容性。


📋 文档信息

属性
难度高级
阅读时间30 分钟
前置知识基本类型、C# 类型系统
相关文档基本类型类型系统索引

继承关系

检查继承

csharp
public bool InheritsFrom(INamedTypeSymbol derived, INamedTypeSymbol baseType)
{
    var current = derived.BaseType;
    while (current != null)
    {
        if (SymbolEqualityComparer.Default.Equals(current, baseType))
        {
            return true;
        }
        current = current.BaseType;
    }
    return false;
}

接口实现

检查接口实现

csharp
public bool ImplementsInterface(INamedTypeSymbol type, INamedTypeSymbol interfaceType)
{
    return type.AllInterfaces.Contains(interfaceType, SymbolEqualityComparer.Default);
}

类型转换

检查转换可能性

csharp
public bool CanConvert(Compilation compilation, ITypeSymbol from, ITypeSymbol to)
{
    var conversion = compilation.ClassifyConversion(from, to);
    return conversion.Exists;
}

public bool IsImplicitConversion(Compilation compilation, ITypeSymbol from, ITypeSymbol to)
{
    var conversion = compilation.ClassifyConversion(from, to);
    return conversion.IsImplicit;
}

类型兼容性

检查赋值兼容性

csharp
public bool IsAssignableFrom(ITypeSymbol target, ITypeSymbol source, Compilation compilation)
{
    // 检查是否可以从 source 赋值给 target
    var conversion = compilation.ClassifyConversion(source, target);
    return conversion.IsImplicit || conversion.IsIdentity;
}

关键要点

  • ✅ 遍历 BaseType 链检查继承关系
  • ✅ 使用 AllInterfaces 检查接口实现
  • ✅ 使用 ClassifyConversion 检查类型转换
  • ✅ 使用 SymbolEqualityComparer 比较类型

相关文档


最后更新: 2026-02-06

基于 MIT 许可发布