![](http://img.e-com-net.com/image/product/5d71ea316b96431990b91a03b2f090bb.gif)
public class MethodDelegateMatch ...{
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
/**//// <summary>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 判断某方法与某委托签名是否匹配。(.net 2.0)
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// </summary>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <remarks>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// DelegateInfo类可以通过Microsoft.Cci命名空间下的类构造:)
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// </remarks>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <param name="methodInfo"></param>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <param name="delegateInfo"></param>
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
/// <returns>true:可匹配。false:匹配失败</returns>
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
public static bool IsMatchable(MethodInfo methodInfo, DelegateInfo delegateInfo) ...{
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
return IsReturnTypeMatchable(methodInfo, delegateInfo) &&
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
IsParamsMatchable(methodInfo, delegateInfo);
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
/**//// <summary>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 判断返回类型是否可匹配
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// </summary>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <remarks>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 在.net 2.0之前,要求返回类型相同。
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
///
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 在.net 2.0中,仅要求方法的返回类型可以赋给委托签名中声明的返回类型,
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 这样就允许方法返回签名中规定类型的子类。此谓之“协变”也。
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// </remarks>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <param name="methodInfo"></param>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <param name="delegateInfo"></param>
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
/// <returns>true:可匹配。false:匹配失败</returns>
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
private static bool IsReturnTypeMatchable(MethodInfo methodInfo, DelegateInfo delegateInfo) ...{
![](http://img.e-com-net.com/image/product/9e7f8c1d826f487fb4c8138af539c3e4.gif)
The mapping logic used before .net 2.0#region The mapping logic used before .net 2.0
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// if (methodInfo.ReturnType == delegateInfo.ReturnType) {
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// return true;
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// }
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// return false;
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
#endregion
![](http://img.e-com-net.com/image/product/9e7f8c1d826f487fb4c8138af539c3e4.gif)
The current mapping logic#region The current mapping logic
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
if (delegateInfo.ReturnType.IsAssignableFrom(methodInfo.ReturnType)) ...{
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
return true;
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
return false;
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
#endregion
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
/**//// <summary>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 判断参数列表是否匹配
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// </summary>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <remarks>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 在.net 2.0之前,要求参数列表中的每个参数的类型都分别相同。
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
///
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 在.net 2.0中,仅要求委托签名中声明的各参数可分别赋给方法中声明的相应参数,
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// 这样就允许前者是后者的继承类。此谓之“协变”也。
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// </remarks>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <param name="methodInfo"></param>
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
/// <param name="delegateInfo"></param>
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
/// <returns>true:可匹配。false:匹配失败</returns>
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
private static bool IsParamsMatchable(MethodInfo methodInfo, DelegateInfo delegateInfo) ...{
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
ParameterInfo[] methodParameterInfos = methodInfo.GetParameters();
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
ParameterInfo[] delegateParameterInfos = delegateInfo.GetParameters();
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
if (delegateParameterInfos.Length != delegateParameterInfos.Length) ...{
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
return false;
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
for (int i = 0; i < methodParameterInfos.Length; i++) ...{
![](http://img.e-com-net.com/image/product/9e7f8c1d826f487fb4c8138af539c3e4.gif)
The mapping logic used before .net 2.0#region The mapping logic used before .net 2.0
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// if(methodParameterInfos[i].ParameterType != delegateParameterInfos[i].ParameterType) {
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// return false;
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
// }
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
#endregion
![](http://img.e-com-net.com/image/product/9e7f8c1d826f487fb4c8138af539c3e4.gif)
The current mapping logic#region The current mapping logic
![](http://img.e-com-net.com/image/product/7c85a012ce3449989f24337e8e369d5f.gif)
if (!methodParameterInfos[i].ParameterType.IsAssignableFrom(delegateParameterInfos[i].ParameterType)) ...{
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
return false;
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
#endregion
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/676e9d2fc4ab4565a433d97564e8b037.gif)
return true;
![](http://img.e-com-net.com/image/product/422034fff1bc4f568d8d1890a6b7b3f4.gif)
}
![](http://img.e-com-net.com/image/product/1ba03523890140d392c6b3d7a94787f9.gif)
}