给定一个MethodDeclarationSyntax对象,我该如何找出该方法的声明类型?找到一个方法的声明类型
我的实际问题是,我需要弄清楚引用的方法是否正在实现接口方法。例如,给定代码如下,如果我有一个MethodDeclarationSyntax的Dispose()方法,如何可以得出结论它是IDisposable.Dispose()的实现?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
我试图让方法的声明类型(检查类型),但没有成功(Parent属性让我回InterfaceImplementation类)。
我也想抓该方法的语义符号:
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
,但不能发现任何东西,可以帮助我。
想法?
因为'FindImplementationForInterfaceMember()'可以返回'null',所以我会在这里使用'=='运算符而不是'Equals()'。或者至少用另一种方式写出Equals()。 – svick 2012-02-17 22:29:53
@svick:交换Equals排序的好处。我对Equals的使用并非偶然,因为我们已经在Roslyn团队开发了一个重要习惯:只要您只使用特定于语言的类型,using ==就可以正常工作。如果你有两个IMethodSymbols,你*必须*使用Equals,因为==在这种情况下不会被重载。 – 2012-02-17 22:35:30
@Jason我恐怕这不会帮助我,因为它假定我知道我需要检查什么方法(在您的代码中,您获取对Dispose()方法符号的引用并与之进行比较),而不是这种情况。当然,我可以递归地检查基类/接口(直到我到达对象),但我会期望MethodSymbol类可以直接提供给我这些信息。 – Vagaus 2012-02-20 18:38:24