本文整理汇总了C#中MethodBase类的典型用法代码示例。如果您正苦于以下问题:C# MethodBase类的具体用法?C# MethodBase怎么用?C# MethodBase使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MethodBase类属于命名空间,在下文中一共展示了MethodBase类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: ComputeToString
public static String ComputeToString(MethodBase contextMethod, RuntimeType[] methodTypeArguments, RuntimeParameterInfo[] runtimeParametersAndReturn)
{
StringBuilder sb = new StringBuilder(30);
sb.Append(runtimeParametersAndReturn[0].ParameterTypeString);
sb.Append(' ');
sb.Append(contextMethod.Name);
if (methodTypeArguments.Length != 0)
{
String sep = "";
sb.Append('[');
foreach (RuntimeType methodTypeArgument in methodTypeArguments)
{
sb.Append(sep);
sep = ",";
String name = methodTypeArgument.InternalNameIfAvailable;
if (name == null)
name = ToStringUtils.UnavailableType;
sb.Append(methodTypeArgument.Name);
}
sb.Append(']');
}
sb.Append('(');
sb.Append(ComputeParametersString(runtimeParametersAndReturn, 1));
sb.Append(')');
return sb.ToString();
}
开发者ID:huamichaelchen,项目名称:corert,代码行数:27,代码来源:RuntimeMethodCommon.cs
示例2: Intercept
public object Intercept(MethodBase decoratedMethod, MethodBase implementationMethod, object[] arguments)
{
if (this.implementationMethodTarget == null)
{
throw new InvalidOperationException("Something has gone seriously wrong with StaticProxy.Fody." +
".Initialize(implementationMethodTarget) must be called once before any .Intercept(..)");
}
// since we only support methods, not constructors, this is actually a MethodInfo
var decoratedMethodInfo = (MethodInfo)decoratedMethod;
ITargetInvocation targetInvocation = this.targetInvocationFactory.Create(this.implementationMethodTarget, implementationMethod);
IInvocation invocation = this.invocationFactory
.Create(targetInvocation, decoratedMethodInfo, arguments, this.interceptors.ToArray());
invocation.Proceed();
if (invocation.ReturnValue == null && !this.typeInformation.IsNullable(decoratedMethodInfo.ReturnType))
{
string message = string.Format(
CultureInfo.InvariantCulture,
"Method {0}.{1} has return type {2} which is a value type. After the invocation the invocation the return value was null. Please ensure that your interceptors call IInvocation.Proceed() or sets a valid IInvocation.ReturnValue.",
this.implementationMethodTarget.GetType().FullName,
decoratedMethodInfo,
decoratedMethodInfo.ReturnType.FullName);
throw new InvalidOperationException(message);
}
return invocation.ReturnValue;
}
开发者ID:OmerRaviv,项目名称:StaticProxy.Fody,代码行数:31,代码来源:DynamicInterceptorManager.cs
示例3: BindToMethod
public override MethodBase BindToMethod(
BindingFlags bindingAttr,
MethodBase[] match,
ref object[] args,
ParameterModifier[] modifiers,
CultureInfo culture,
string[] names,
out object state)
{
if (match == null)
{
throw new ArgumentNullException("match");
}
// Arguments are not being reordered.
state = null;
// Find a parameter match and return the first method with
// parameters that match the request.
foreach (MethodBase mb in match)
{
ParameterInfo[] parameters = mb.GetParameters();
if (ParametersMatch(parameters, args))
{
return mb;
}
}
return null;
}
开发者ID:crankycoder,项目名称:PyInception,代码行数:28,代码来源:sample.cs
示例4: RuntimeFatMethodParameterInfo
private RuntimeFatMethodParameterInfo(MethodBase member, MethodHandle methodHandle, int position, ParameterHandle parameterHandle, ReflectionDomain reflectionDomain, MetadataReader reader, Handle typeHandle, TypeContext typeContext)
: base(member, position, reflectionDomain, reader, typeHandle, typeContext)
{
_methodHandle = methodHandle;
_parameterHandle = parameterHandle;
_parameter = parameterHandle.GetParameter(reader);
}
开发者ID:huamichaelchen,项目名称:corert,代码行数:7,代码来源:RuntimeFatMethodParameterInfo.cs
示例5: SelectMethod
public override sealed MethodBase SelectMethod(BindingFlags bindingAttr, MethodBase[] match, Type[] types, ParameterModifier[] modifiers)
{
if (!((bindingAttr & ~SupportedBindingFlags) == 0) && modifiers == null)
throw new NotImplementedException();
return LimitedBinder.SelectMethod(match, types);
}
开发者ID:tijoytom,项目名称:corert,代码行数:7,代码来源:DefaultBinder.cs
示例6: BindToMethod
public override sealed MethodBase BindToMethod(BindingFlags bindingAttr, MethodBase[] match, ref object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] names, out object state)
{
if (!((bindingAttr & ~SupportedBindingFlags) == 0) && modifiers == null && culture == null && names == null)
throw new NotImplementedException();
state = null;
return LimitedBinder.BindToMethod(match, ref args);
}
开发者ID:tijoytom,项目名称:corert,代码行数:7,代码来源:DefaultBinder.cs
示例7: RuntimeMethodParameterInfo
protected RuntimeMethodParameterInfo(MethodBase member, int position, ReflectionDomain reflectionDomain, MetadataReader reader, Handle typeHandle, TypeContext typeContext)
: base(member, position)
{
_reflectionDomain = reflectionDomain;
Reader = reader;
_typeHandle = typeHandle;
_typeContext = typeContext;
}
开发者ID:huamichaelchen,项目名称:corert,代码行数:8,代码来源:RuntimeMethodParameterInfo.cs
示例8: Init
public override void Init(object instance, MethodBase method, object[] args)
{
_instance = instance;
_method = method;
_args = args;
if (method.Name == "ApiHandler") _logoType = "接口通道ApiHandler";
else if (method.Name == "InfoApiHandler") _logoType = "接口通道InfoApiHandler";
else if (method.Name == "StreamApiHandler") _logoType = "接口通道StreamApiHandler";
}
开发者ID:waitaction,项目名称:RESTfulFramework.NET,代码行数:9,代码来源:RecordLog.cs
示例9: GetParameterTypes
// returns array of the types of the parameters of the method specified by methodinfo
public static Type[] GetParameterTypes( MethodBase methodbase )
{
ParameterInfo[] parameterinfos = methodbase.GetParameters();
Type[] paramtypes = new Type[ parameterinfos.GetUpperBound(0) + 1 ];
for( int i = 0; i < parameterinfos.GetUpperBound(0) + 1; i ++ )
{
paramtypes[i] = parameterinfos[i].ParameterType;
}
return paramtypes;
}
开发者ID:achoum,项目名称:spring,代码行数:11,代码来源:AbicWrapperGenerator.cs
示例10: GetFullNameForStackTrace
public static void GetFullNameForStackTrace (StringBuilder sb, MethodBase mi)
{
var declaringType = mi.DeclaringType;
if (declaringType.IsGenericType && !declaringType.IsGenericTypeDefinition)
declaringType = declaringType.GetGenericTypeDefinition ();
// Get generic definition
var bindingflags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
foreach (var m in declaringType.GetMethods (bindingflags)) {
if (m.MetadataToken == mi.MetadataToken) {
mi = m;
break;
}
}
sb.Append (declaringType.ToString ());
sb.Append (".");
sb.Append (mi.Name);
if (mi.IsGenericMethod) {
Type[] gen_params = mi.GetGenericArguments ();
sb.Append ("[");
for (int j = 0; j < gen_params.Length; j++) {
if (j > 0)
sb.Append (",");
sb.Append (gen_params [j].Name);
}
sb.Append ("]");
}
ParameterInfo[] p = mi.GetParameters ();
sb.Append (" (");
for (int i = 0; i < p.Length; ++i) {
if (i > 0)
sb.Append (", ");
Type pt = p[i].ParameterType;
if (pt.IsGenericType && ! pt.IsGenericTypeDefinition)
pt = pt.GetGenericTypeDefinition ();
sb.Append (pt.ToString());
if (p [i].Name != null) {
sb.Append (" ");
sb.Append (p [i].Name);
}
}
sb.Append (")");
}
开发者ID:BogdanovKirill,项目名称:mono,代码行数:51,代码来源:StackTraceHelper.cs
示例11: ParameterBuilder
// Constructor.
internal ParameterBuilder(TypeBuilder type, MethodBase method,
int position, ParameterAttributes attributes,
String strParamName)
{
// Initialize the internal state.
this.type = type;
this.method = method;
// Register this item to be detached later.
type.module.assembly.AddDetach(this);
// Create the parameter.
lock(typeof(AssemblyBuilder))
{
this.privateData = ClrParameterCreate
(((IClrProgramItem)method).ClrHandle,
position, attributes, strParamName);
}
}
开发者ID:jjenki11,项目名称:blaze-chem-rendering,代码行数:20,代码来源:ParameterBuilder.cs
示例12: GetVTableMethods
MethodBase[] GetVTableMethods(VTableFixups fixups)
{
var methods = new MethodBase[fixups.Count];
byte[] buf = new byte[8];
int fixuprva = fixups.RVA;
for (int i = 0; i < fixups.Count; i++)
{
module.__ReadDataFromRVA(fixuprva, buf, 0, 4);
methods[i] = module.ResolveMethod(BitConverter.ToInt32(buf, 0));
if ((fixups.Type & COR_VTABLE_32BIT) != 0)
{
fixuprva += 4;
}
if ((fixups.Type & COR_VTABLE_64BIT) != 0)
{
fixuprva += 8;
}
}
return methods;
}
开发者ID:jfrijters,项目名称:ikdasm,代码行数:20,代码来源:VTableFixups.cs
示例13: Log
/// <summary>
/// Used by MethodTimer.
/// </summary>
/// <param name="methodBase"></param>
/// <param name="milliseconds"></param>
public static void Log(MethodBase methodBase, long milliseconds)
{
Log(methodBase.DeclaringType, methodBase.Name, milliseconds);
}
开发者ID:WildGums,项目名称:Orc.LicenseManager,代码行数:9,代码来源:MethodTimeLogger.cs
示例14: ApplyAttributes
// Define each type attribute (in/out/ref) and
// the argument names.
public void ApplyAttributes (IMemberContext mc, MethodBase builder)
{
if (Count == 0)
return;
MethodBuilder mb = builder as MethodBuilder;
ConstructorBuilder cb = builder as ConstructorBuilder;
var pa = mc.Module.PredefinedAttributes;
for (int i = 0; i < Count; i++) {
this [i].ApplyAttributes (mb, cb, i + 1, pa);
}
}
开发者ID:RainsSoft,项目名称:playscript-monodevelop,代码行数:15,代码来源:parameter.cs
示例15: GetMetaInfo
public MethodBase GetMetaInfo ()
{
//
// inflatedMetaInfo is extra field needed for cases where we
// inflate method but another nested type can later inflate
// again (the cache would be build with inflated metaInfo) and
// TypeBuilder can work with method definitions only
//
if (inflatedMetaInfo == null) {
if ((state & StateFlags.PendingMetaInflate) != 0) {
var dt_meta = DeclaringType.GetMetaInfo ();
if (DeclaringType.IsTypeBuilder) {
if (IsConstructor)
inflatedMetaInfo = TypeBuilder.GetConstructor (dt_meta, (ConstructorInfo) MemberDefinition.Metadata);
else
inflatedMetaInfo = TypeBuilder.GetMethod (dt_meta, (MethodInfo) MemberDefinition.Metadata);
} else {
#if STATIC
// it should not be reached
throw new NotImplementedException ();
#else
inflatedMetaInfo = MethodInfo.GetMethodFromHandle (MemberDefinition.Metadata.MethodHandle, dt_meta.TypeHandle);
#endif
}
state &= ~StateFlags.PendingMetaInflate;
} else {
inflatedMetaInfo = MemberDefinition.Metadata;
}
}
if ((state & StateFlags.PendingMakeMethod) != 0) {
var sre_targs = new MetaType[targs.Length];
for (int i = 0; i < sre_targs.Length; ++i)
sre_targs[i] = targs[i].GetMetaInfo ();
inflatedMetaInfo = ((MethodInfo) inflatedMetaInfo).MakeGenericMethod (sre_targs);
state &= ~StateFlags.PendingMakeMethod;
}
return inflatedMetaInfo;
}
开发者ID:OpenFlex,项目名称:playscript-mono,代码行数:43,代码来源:method.cs
示例16: CompareMethod
//-1 不存在替换, 1 保留左面, 2 保留右面
static int CompareMethod(MethodBase l, MethodBase r)
{
int s = 0;
if (!CompareParmsCount(l,r))
{
return -1;
}
else
{
ParameterInfo[] lp = l.GetParameters();
ParameterInfo[] rp = r.GetParameters();
List<Type> ll = new List<Type>();
List<Type> lr = new List<Type>();
if (!l.IsStatic)
{
ll.Add(type);
}
if (!r.IsStatic)
{
lr.Add(type);
}
for (int i = 0; i < lp.Length; i++)
{
ll.Add(lp[i].ParameterType);
}
for (int i = 0; i < rp.Length; i++)
{
lr.Add(rp[i].ParameterType);
}
for (int i = 0; i < ll.Count; i++)
{
if (!typeSize.ContainsKey(ll[i]) || !typeSize.ContainsKey(lr[i]))
{
if (ll[i] == lr[i])
{
continue;
}
else
{
return -1;
}
}
else if (ll[i].IsPrimitive && lr[i].IsPrimitive && s == 0)
{
s = typeSize[ll[i]] >= typeSize[lr[i]] ? 1 : 2;
}
else if (ll[i] != lr[i])
{
return -1;
}
}
if (s == 0 && l.IsStatic)
{
s = 2;
}
}
return s;
}
开发者ID:xlwangcs,项目名称:LuaFramework_UGUI,代码行数:68,代码来源:ToLuaExport.cs
示例17: Compare
static int Compare(MethodBase lhs, MethodBase rhs)
{
int off1 = lhs.IsStatic ? 0 : 1;
int off2 = rhs.IsStatic ? 0 : 1;
ParameterInfo[] lp = lhs.GetParameters();
ParameterInfo[] rp = rhs.GetParameters();
int pos1 = GetOptionalParamPos(lp);
int pos2 = GetOptionalParamPos(rp);
if (pos1 >= 0 && pos2 < 0)
{
return 1;
}
else if (pos1 < 0 && pos2 >= 0)
{
return -1;
}
else if(pos1 >= 0 && pos2 >= 0)
{
pos1 += off1;
pos2 += off2;
if (pos1 != pos2)
{
return pos1 > pos2 ? -1 : 1;
}
else
{
pos1 -= off1;
pos2 -= off2;
if (lp[pos1].ParameterType.GetElementType() == typeof(object) && rp[pos2].ParameterType.GetElementType() != typeof(object))
{
return 1;
}
else if (lp[pos1].ParameterType.GetElementType() != typeof(object) && rp[pos2].ParameterType.GetElementType() == typeof(object))
{
return -1;
}
}
}
int c1 = off1 + lp.Length;
int c2 = off2 + rp.Length;
if (c1 > c2)
{
return 1;
}
else if (c1 == c2)
{
List<ParameterInfo> list1 = new List<ParameterInfo>(lp);
List<ParameterInfo> list2 = new List<ParameterInfo>(rp);
if (list1.Count > list2.Count)
{
if (list1[0].ParameterType == typeof(object))
{
return 1;
}
list1.RemoveAt(0);
}
else if (list2.Count > list1.Count)
{
if (list2[0].ParameterType == typeof(object))
{
return -1;
}
list2.RemoveAt(0);
}
for (int i = 0; i < list1.Count; i++)
{
if (list1[i].ParameterType == typeof(object) && list2[i].ParameterType != typeof(object))
{
return 1;
}
else if (list1[i].ParameterType != typeof(object) && list2[i].ParameterType == typeof(object))
{
return -1;
}
}
return 0;
}
else
{
return -1;
}
}
开发者ID:xlwangcs,项目名称:LuaFramework_UGUI,代码行数:94,代码来源:ToLuaExport.cs
示例18: ProcessParams
static int ProcessParams(MethodBase md, int tab, bool beConstruct, bool beCheckTypes = false)
{
ParameterInfo[] paramInfos = md.GetParameters();
bool beExtend = IsExtendFunction(md);
if (beExtend)
{
ParameterInfo[] pt = new ParameterInfo[paramInfos.Length - 1];
Array.Copy(paramInfos, 1, pt, 0, pt.Length);
paramInfos = pt;
}
int count = paramInfos.Length;
string head = string.Empty;
PropertyInfo pi = null;
int methodType = GetMethodType(md, out pi);
int offset = ((md.IsStatic && !beExtend )|| beConstruct) ? 1 : 2;
if (md.Name == "op_Equality")
{
beCheckTypes = true;
}
for (int i = 0; i < tab; i++)
{
head += "\t";
}
if ((!md.IsStatic && !beConstruct) || beExtend)
{
if (md.Name == "Equals")
{
if (!type.IsValueType && !beCheckTypes)
{
CheckObject(head, type, className, 1);
}
else
{
sb.AppendFormat("{0}{1} obj = ({1})ToLua.ToObject(L, 1);\r\n", head, className);
}
}
else if (!beCheckTypes)// && methodType == 0)
{
CheckObject(head, type, className, 1);
}
else
{
ToObject(head, type, className, 1);
}
}
for (int j = 0; j < count; j++)
{
ParameterInfo param = paramInfos[j];
string arg = "arg" + j;
bool beOutArg = param.Attributes == ParameterAttributes.Out;
bool beParams = IsParams(param);
Type t = GetGenericBaseType(md, param.ParameterType);
ProcessArg(t, head, arg, offset + j, beCheckTypes, beParams ,beOutArg);
}
StringBuilder sbArgs = new StringBuilder();
List<string> refList = new List<string>();
List<Type> refTypes = new List<Type>();
for (int j = 0; j < count; j++)
{
ParameterInfo param = paramInfos[j];
if (!param.ParameterType.IsByRef)
{
sbArgs.Append("arg");
}
else
{
if (param.Attributes == ParameterAttributes.Out)
{
sbArgs.Append("out arg");
}
else
{
sbArgs.Append("ref arg");
}
refList.Add("arg" + j);
refTypes.Add(GetRefBaseType(param.ParameterType));
}
sbArgs.Append(j);
if (j != count - 1)
{
sbArgs.Append(", ");
}
}
if (beConstruct)
{
sb.AppendFormat("{2}{0} obj = new {0}({1});\r\n", className, sbArgs.ToString(), head);
string str = GetPushFunction(type);
//.........这里部分代码省略.........
开发者ID:xlwangcs,项目名称:LuaFramework_UGUI,代码行数:101,代码来源:ToLuaExport.cs
示例19: Create
internal static MethodWrapper Create(TypeWrapper declaringType, string name, string sig, MethodBase method, TypeWrapper returnType, TypeWrapper[] parameterTypes, Modifiers modifiers, MemberFlags flags)
{
Debug.Assert(declaringType != null && name!= null && sig != null && method != null);
if(declaringType.IsGhost)
{
// HACK since our caller isn't aware of the ghost issues, we'll handle the method swapping
if(method.DeclaringType.IsValueType)
{
Type[] types = new Type[parameterTypes.Length];
for(int i = 0; i < types.Length; i++)
{
types[i] = parameterTypes[i].TypeAsSignatureType;
}
method = declaringType.TypeAsBaseType.GetMethod(method.Name, types);
}
return new GhostMethodWrapper(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags);
}
else if(method is ConstructorInfo)
{
return new SmartConstructorMethodWrapper(declaringType, name, sig, (ConstructorInfo)method, parameterTypes, modifiers, flags);
}
else
{
return new SmartCallMethodWrapper(declaringType, name, sig, (MethodInfo)method, returnType, parameterTypes, modifiers, flags, SimpleOpCode.Call, method.IsStatic ? SimpleOpCode.Call : SimpleOpCode.Callvirt);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:27,代码来源:MemberWrapper.cs
示例20: SmartMethodWrapper
internal SmartMethodWrapper(TypeWrapper declaringType, string name, string sig, MethodBase method, TypeWrapper returnType, TypeWrapper[] parameterTypes, Modifiers modifiers, MemberFlags flags)
: base(declaringType, name, sig, method, returnType, parameterTypes, modifiers, flags)
{
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:4,代码来源:MemberWrapper.cs
注:本文中的MethodBase类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论