类型关系
本文档介绍如何分析类型之间的关系,包括继承、实现、转换和兼容性。
📋 文档信息
| 属性 | 值 |
|---|---|
| 难度 | 高级 |
| 阅读时间 | 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