MethodDeclarationSyntax 개체가 주어지면 메서드의 선언 형식을 어떻게 알 수 있습니까?메서드의 선언 형식 찾기
내 실제 문제는 참조 된 메소드가 인터페이스 메소드를 구현하는지 여부를 알아 내야한다는 것입니다.
예를 들어, Dispose() 메서드에 대한 MethodDeclarationSyntax가있는 경우 코드를 지정하면 어떻게 IDisposable.Dispose()를 구현할 수 있습니까?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
내가 메소드의 선언 형식을 얻을 수 (및 유형 검사)없이 성공을 위해 노력했습니다 (부모 속성은 InterfaceImplementation 클래스를 날 다시 제공).
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
을하지만, 나에게 도움이 될 수 아무것도 발견하지 못했습니다 :
나는 또한 방법에 대한 의미 론적 기호를 잡기 위해 노력했다.
아이디어가 있으십니까?
'FindImplementationForInterfaceMember()'가'null'을 반환 할 수 있기 때문에'Equals()'대신에'=='연산자를 사용합니다. 또는 적어도 'Equals()'를 다른 방법으로 써라. – svick
@svick : 동등 주문을 교환 할 때 좋은 점. Roslyn 팀에서 개발 한 중요한 습관 인 Equals를 사용하는 것은 우연이 아닙니다. 언어 별 유형 만 사용하는 경우 ==를 사용하면 문제가 없습니다. IMethodSymbols가 두 개인 경우에는 ==이 과부하되지 않으므로 같음을 사용해야합니다. –
@ Jason이 방법은 내가 확인해야 할 메소드가 무엇인지 알고 있다고 가정하고 나에게 도움이되지 않을까 걱정됩니다. 코드에서 Dispose() 메소드 심볼에 대한 참조를 가져 와서 비교합니다. 물론 (객체에 도달 할 때까지) 기본 클래스/인터페이스를 재귀 적으로 확인할 수 있지만 MethodSymbol 클래스가이 정보를 직접 제공 할 것으로 기대합니다. – Vagaus