給定一個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