本文整理汇总了C#中System.Reflection.Emit.MethodBuilder.SetSignature方法的典型用法代码示例。如果您正苦于以下问题:C# MethodBuilder.SetSignature方法的具体用法?C# MethodBuilder.SetSignature怎么用?C# MethodBuilder.SetSignature使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Reflection.Emit.MethodBuilder
的用法示例。
在下文中一共展示了MethodBuilder.SetSignature方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CopyMethodSignature
public static void CopyMethodSignature(MethodInfo from, MethodBuilder to, bool substituteDeclaringType) {
ParameterInfo[] paramInfos = from.GetParameters();
Type[] parameterTypes = new Type[paramInfos.Length];
Type[][] parameterRequiredModifiers = null, parameterOptionalModifiers = null;
Type[] returnRequiredModifiers = null, returnOptionalModifiers = null;
#if !SILVERLIGHT
#if CLR2
bool copyModopts = !from.IsGenericMethodDefinition || ModopsSupported;
#else
bool copyModopts = true;
#endif
if (copyModopts) {
returnRequiredModifiers = from.ReturnParameter.GetRequiredCustomModifiers();
returnOptionalModifiers = from.ReturnParameter.GetOptionalCustomModifiers();
}
#endif
for (int i = 0; i < paramInfos.Length; i++) {
if (substituteDeclaringType && paramInfos[i].ParameterType == from.DeclaringType) {
parameterTypes[i] = to.DeclaringType;
} else {
parameterTypes[i] = paramInfos[i].ParameterType;
}
#if !SILVERLIGHT
if (copyModopts) {
var mods = paramInfos[i].GetRequiredCustomModifiers();
if (mods.Length > 0) {
if (parameterRequiredModifiers == null) {
parameterRequiredModifiers = new Type[paramInfos.Length][];
}
parameterRequiredModifiers[i] = mods;
}
mods = paramInfos[i].GetOptionalCustomModifiers();
if (mods.Length > 0) {
if (parameterOptionalModifiers == null) {
parameterOptionalModifiers = new Type[paramInfos.Length][];
}
parameterOptionalModifiers[i] = mods;
}
}
#endif
}
to.SetSignature(
from.ReturnType, returnRequiredModifiers, returnOptionalModifiers,
parameterTypes, parameterRequiredModifiers, parameterOptionalModifiers
);
CopyGenericMethodAttributes(from, to);
for (int i = 0; i < paramInfos.Length; i++) {
to.DefineParameter(i + 1, paramInfos[i].Attributes, paramInfos[i].Name);
}
}