本文整理汇总了C#中IMethodSymbol.IsImplementationOfInterfaceMethod方法的典型用法代码示例。如果您正苦于以下问题:C# IMethodSymbol.IsImplementationOfInterfaceMethod方法的具体用法?C# IMethodSymbol.IsImplementationOfInterfaceMethod怎么用?C# IMethodSymbol.IsImplementationOfInterfaceMethod使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMethodSymbol
的用法示例。
在下文中一共展示了IMethodSymbol.IsImplementationOfInterfaceMethod方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: IsGetHashCodeInterfaceImplementation
/// <summary>
/// Checks if a given method implements IEqualityComparer.GetHashCode or IHashCodeProvider.GetHashCode.
/// </summary>
/// <param name="method"></param>
/// <param name="compilation"></param>
/// <returns></returns>
private static bool IsGetHashCodeInterfaceImplementation(IMethodSymbol method, Compilation compilation)
{
if (method.Name != WellKnownMemberNames.ObjectGetHashCode)
{
return false;
}
if (method.ReturnType.SpecialType == SpecialType.System_Int32 && method.Parameters.Length == 1)
{
// Substitute the type of the first parameter of Equals in the generic interface and then check if that
// interface method is implemented by the given method.
INamedTypeSymbol iEqualityComparer = WellKnownTypes.GenericIEqualityComparer(compilation);
if (method.IsImplementationOfInterfaceMethod(method.Parameters.First().Type, iEqualityComparer, WellKnownMemberNames.ObjectGetHashCode))
{
return true;
}
INamedTypeSymbol iHashCodeProvider = WellKnownTypes.IHashCodeProvider(compilation);
if (method.IsImplementationOfInterfaceMethod(null, iHashCodeProvider, WellKnownMemberNames.ObjectGetHashCode))
{
return true;
}
}
return false;
}
示例2: IsEqualsInterfaceImplementation
/// <summary>
/// Checks if a given method implements IEqualityComparer.Equals or IEquatable.Equals.
/// </summary>
private static bool IsEqualsInterfaceImplementation(IMethodSymbol method, Compilation compilation)
{
if (method.Name != WellKnownMemberNames.ObjectEquals)
{
return false;
}
int paramCount = method.Parameters.Length;
if (method.ReturnType.SpecialType == SpecialType.System_Boolean &&
(paramCount == 1 || paramCount == 2))
{
// Substitute the type of the first parameter of Equals in the generic interface and then check if that
// interface method is implemented by the given method.
INamedTypeSymbol iEqualityComparer = WellKnownTypes.GenericIEqualityComparer(compilation);
if (method.IsImplementationOfInterfaceMethod(method.Parameters.First().Type, iEqualityComparer, WellKnownMemberNames.ObjectEquals))
{
return true;
}
// Substitute the type of the first parameter of Equals in the generic interface and then check if that
// interface method is implemented by the given method.
INamedTypeSymbol iEquatable = WellKnownTypes.GenericIEquatable(compilation);
if (method.IsImplementationOfInterfaceMethod(method.Parameters.First().Type, iEquatable, WellKnownMemberNames.ObjectEquals))
{
return true;
}
}
return false;
}