当前位置: 首页>>代码示例>>C#>>正文


C# IMethodSignature类代码示例

本文整理汇总了C#中IMethodSignature的典型用法代码示例。如果您正苦于以下问题:C# IMethodSignature类的具体用法?C# IMethodSignature怎么用?C# IMethodSignature使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


IMethodSignature类属于命名空间,在下文中一共展示了IMethodSignature类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CheckParametersAndValues

		void CheckParametersAndValues (IMetadataTokenProvider provider, IMethodSignature constructor, IList<CustomAttributeArgument> arguments)
		{
			for (int index = 0; index < arguments.Count; index++) {
				ParameterDefinition parameter = constructor.Parameters[index];
				if (parameter.ParameterType.IsNamed ("System", "String")) {
					string value = (string) arguments [index].Value;
					if (Contains (parameter.Name, "version")) {
						Version v = null;
						if (!Version.TryParse (value, out v)) {
							string msg = String.Format (CultureInfo.InvariantCulture, "The value passed: {0} can't be parsed to a valid Version.", value);
							Runner.Report (provider, Severity.High, Confidence.High, msg);
						}
						continue;
					}
					if (Contains (parameter.Name, "url") ||
						Contains (parameter.Name, "uri") ||
						Contains (parameter.Name, "urn")) {
						Uri parsed = null;
						if (!Uri.TryCreate (value, UriKind.Absolute, out parsed)) {
							string msg = String.Format (CultureInfo.InvariantCulture, "The valued passed {0} can't be parsed to a valid Uri.", value);
							Runner.Report (provider, Severity.High, Confidence.High, msg);
						}
						continue;
					}
					if (Contains (parameter.Name, "guid")) {
						Guid g;
						if (!Guid.TryParse (value, out g)) {
							string msg = String.Format (CultureInfo.InvariantCulture, "The valued passed {0} can't be parsed to a valid Guid.", value);
							Runner.Report (provider, Severity.High, Confidence.High, msg);
						}
						continue;
					}
				}
			}
		}
开发者ID:alfredodev,项目名称:mono-tools,代码行数:35,代码来源:AttributeStringLiteralsShouldParseCorrectlyRule.cs

示例2: CompareSignature

        /// <summary>
        /// Compare the IMethodSignature members with the one being specified.
        /// </summary>
        /// <param name="self">>The IMethodSignature on which the extension method can be called.</param>
        /// <param name="signature">The IMethodSignature which is being compared.</param>
        /// <returns>True if the IMethodSignature members are identical, false otherwise</returns>
        public static bool CompareSignature(this IMethodSignature self, IMethodSignature signature)
        {
            if (self == null)
                return (signature == null);

            if (self.HasThis != signature.HasThis)
                return false;
            if (self.ExplicitThis != signature.ExplicitThis)
                return false;
            if (self.CallingConvention != signature.CallingConvention)
                return false;

            if (!AreSameElementTypes(self.ReturnType, signature.ReturnType))
                return false;

            bool h1 = self.HasParameters;
            bool h2 = signature.HasParameters;
            if (h1 != h2)
                return false;
            if (!h1 && !h2)
                return true;

            IList<ParameterDefinition> pdc1 = self.Parameters;
            IList<ParameterDefinition> pdc2 = signature.Parameters;
            int count = pdc1.Count;
            if (count != pdc2.Count)
                return false;

            for (int i = 0; i < count; ++i)
            {
                if (!AreSameElementTypes(pdc1[i].ParameterType, pdc2[i].ParameterType))
                    return false;
            }
            return true;
        }
开发者ID:mdabbagh88,项目名称:arrayslice,代码行数:41,代码来源:MethodRocks.cs

示例3: CheckReturnVoid

		private bool CheckReturnVoid (IMetadataTokenProvider eventType, IMethodSignature invoke)
		{
			string full_name = invoke.ReturnType.FullName;
			if (String.Compare (full_name, "System.Void") == 0)
				return true;

			string msg = String.Format ("The delegate should return void, not {0}", full_name);
			Runner.Report (eventType, Severity.Medium, Confidence.High, msg);
			return false;
		}
开发者ID:nolanlum,项目名称:mono-tools,代码行数:10,代码来源:DeclareEventHandlersCorrectlyRule.cs

示例4: AppendMethodSignature

        //TODO: Consider creating a class that will represent member signature
        private static void AppendMethodSignature(StringBuilder scope, IMethodSignature method)
        {
            scope.Append(method.HasThis ? 's' : 'i');
            scope.Append(' ');
            scope.Append(method.CallingConvention.ToString());

            scope.Append(' ');
            AppendTypeSignature(scope, method.ReturnType);
            scope.Append(' ');
            AppendParametersString(scope, method.Parameters);
        }
开发者ID:Cadla,项目名称:OBFSCTR,代码行数:12,代码来源:CTSNameGenerator.cs

示例5: MethodSignatureFullName

		public static void MethodSignatureFullName (IMethodSignature self, StringBuilder builder)
		{
			builder.Append ("(");

			if (self.HasParameters) {
				var parameters = self.Parameters;
				for (int i = 0; i < parameters.Count; i++) {
					var parameter = parameters [i];
					if (i > 0)
						builder.Append (",");

					if (parameter.ParameterType.IsSentinel)
						builder.Append ("...,");

					builder.Append (parameter.ParameterType.FullName);
				}
			}

			builder.Append (")");
		}
开发者ID:FreshBirdZhe,项目名称:LSharp,代码行数:20,代码来源:IMethodSignature.cs

示例6: MakeByRefCallSimple

		void MakeByRefCallSimple(SsaBlock block, ref int instructionIndexInBlock, IMethodSignature targetMethod)
		{
			SsaInstruction inst = block.Instructions[instructionIndexInBlock];
			for (int i = 0; i < inst.Operands.Length; i++) {
				SsaVariable operand = inst.Operands[i];
				if (operand.IsSingleAssignment && operand.Usage.Count == 1 && IsLoadAddress(operand.Definition)) {
					// address is used for this method call only
					
					Instruction loadAddressInstruction = operand.Definition.Instruction;
					
					// find target parameter type:
					bool isOut;
					if (i == 0 && targetMethod.HasThis) {
						isOut = false;
					} else {
						ParameterDefinition parameter = targetMethod.Parameters[i - (targetMethod.HasThis ? 1 : 0)];
						isOut = parameter.IsOut;
					}
					
					SsaVariable addressTakenOf = GetVariableFromLoadAddressInstruction(loadAddressInstruction);
					
					// insert "Prepare" instruction on front
					SpecialOpCode loadOpCode = isOut ? SpecialOpCode.PrepareByOutCall : SpecialOpCode.PrepareByRefCall;
					block.Instructions.Insert(instructionIndexInBlock++, new SsaInstruction(
						block, null, operand, new SsaVariable[] { addressTakenOf }, specialOpCode: loadOpCode));
					
					// insert "WriteAfterByRefOrOutCall" instruction after call
					block.Instructions.Insert(instructionIndexInBlock + 1, new SsaInstruction(
						block, null, addressTakenOf, new SsaVariable[] { operand }, specialOpCode: SpecialOpCode.WriteAfterByRefOrOutCall));
					
					couldSimplifySomething = true;
					
					// remove the loadAddressInstruction later
					// (later because it might be defined in the current block and we don't want instructionIndex to become invalid)
					redundantLoadAddressInstructions.Add(operand.Definition);
				}
			}
		}
开发者ID:Costo,项目名称:Xamarin.Forms,代码行数:38,代码来源:SimplifyByRefCalls.cs

示例7: EmitCanReplace

        private void EmitCanReplace(CilWorker IL, IMethodSignature hostMethod, VariableDefinition provider)
        {
            var skipGetProvider = IL.Create(OpCodes.Nop);

            IL.Emit(OpCodes.Ldloc, provider);
            IL.Emit(OpCodes.Brfalse, skipGetProvider);

            IL.Emit(OpCodes.Ldloc, provider);

            // Push the host instance
            var pushInstance = hostMethod.HasThis ? IL.Create(OpCodes.Ldarg_0) : IL.Create(OpCodes.Ldnull);
            IL.Append(pushInstance);
            IL.Emit(OpCodes.Ldloc, _invocationInfo);
            IL.Emit(OpCodes.Callvirt, _canReplace);

            IL.Emit(OpCodes.Stloc, _canReplaceFlag);
            IL.Append(skipGetProvider);
        }
开发者ID:zxl359592450,项目名称:linfu,代码行数:18,代码来源:InterceptMethodCalls.cs

示例8: GetResultTreatment

            public override PexResultTracking GetResultTreatment(PexTrackingThread thread, int callId,
                IMethodSignature methodSignature, TypeEx[] varArgTypes,
                bool hasDerivedResult)
            {
                // track uninstrumented method calls
                if (!hasDerivedResult)
                {
                    var method = methodSignature as Method;
                    if (method.FullName.Equals(_trackMethod.FullName))
                    {
                        if (track)
                        {
                            Dump("start to track " + method.FullName);
                            TrackingMethods.Add(method);
                            return PexResultTracking.Track;
                        }
                        Dump("method " + method.FullName + " is not tracked!");
                    }

                //                    IssueTrackDatabase db;
                //                    if (host.TryGetService<IssueTrackDatabase>(out db))
                //                    {
                ////                        host.Log.Dump("size", "size", "uninstrumented methods: " + db.UnInstrumentedMethods.Count);
                //                        foreach (var uninstrumentedMethod in db.UnInstrumentedMethods)
                //                        {
                ////                            host.Log.Dump("Method", "Method", "uninstrumented methods: " + uninstrumentedMethod.Method.FullName);
                ////                            host.Log.Dump("Method", "Method2", "methods: " + method.Definition.FullName);
                //                            if (uninstrumentedMethod.Method.FullName.Equals(method.FullName))
                //                            {
                ////                                host.Log.Dump("Method", "track", "track: " + method.Definition.FullName);
                //                                if (TrackingMethods.Add(method))
                //                                {
                //                                    return PexResultTracking.Track;
                //                                }
                //                            }
                //                        }
                //                    }
                }

                return PexResultTracking.ConcreteOrDerived;
            }
开发者ID:spati2,项目名称:ICSE-2011-Covana,代码行数:41,代码来源:ResultTracingObserver.cs

示例9: MethodReturnType

 public MethodReturnType(IMethodSignature method)
 {
     this.method = method;
 }
开发者ID:hjlfmy,项目名称:cecil,代码行数:4,代码来源:MethodReturnType.cs

示例10: GetSentinelPosition

        public static int GetSentinelPosition(IMethodSignature ms)
        {
            if (!ms.HasParameters)
                return -1;

            var parameters = ms.Parameters;
            for (int i = 0; i < parameters.Count; i++)
                if (parameters[i].ParameterType.IsSentinel)
                    return i;

            return -1;
        }
开发者ID:adisik,项目名称:simple-assembly-explorer,代码行数:12,代码来源:InsUtils.cs

示例11: ParameterDefinition

		internal ParameterDefinition (TypeReference parameterType, IMethodSignature method)
			: this (string.Empty, ParameterAttributes.None, parameterType)
		{
			this.method = method;
		}
开发者ID:mayuki,项目名称:Inazuma,代码行数:5,代码来源:ParameterDefinition.cs

示例12: FindImpurity

		private MethodReference FindImpurity (IMethodSignature method, Instruction end)
		{
			MethodReference impure = null;
			
			Instruction ins = FullTraceBack (method, end);
			if (ins != null) {
				Log.WriteLine (this, "checking args for call at {0:X4} starting at {1:X4}", end.Offset, ins.Offset);
				while (ins.Offset < end.Offset && impure == null) {
					if (ins.OpCode.Code == Code.Call || ins.OpCode.Code == Code.Callvirt) {
						MethodReference candidate = ins.Operand as MethodReference;
						if (!IsPure (candidate))
							return candidate;
					}
					ins = ins.Next;
				}
			}
			
			return impure;
		}
开发者ID:alfredodev,项目名称:mono-tools,代码行数:19,代码来源:AvoidMethodsWithSideEffectsInConditionalCodeRule.cs

示例13: FullTraceBack

		// This is like the TraceBack rock except that it continues traversing backwards
		// until it finds an instruction which does not pop any values off the stack. This
		// allows us to check all of the instructions used to compute the method's
		// arguments.
		internal static Instruction FullTraceBack (IMethodSignature method, Instruction end)
		{
			Instruction first = end.TraceBack (method);
			
			while (first != null && first.GetPopCount (method) > 0) {
				first = first.TraceBack (method);
			}
			
			return first;
		}
开发者ID:alfredodev,项目名称:mono-tools,代码行数:14,代码来源:AvoidMethodsWithSideEffectsInConditionalCodeRule.cs

示例14: CheckParameters

		private void CheckParameters (IMethodSignature concat, MethodDefinition caller, Instruction ins)
		{
			// check for boxed (likely char, but could be other types too) on any parameter
			for (int i = 0; i < concat.Parameters.Count; i++) {
				Instruction source = ins.TraceBack (caller, -i);
				if ((source == null) || (source.OpCode.Code != Code.Box))
					continue;
				ReportBoxing (caller, source, Confidence.High);
			}
		}
开发者ID:nolanlum,项目名称:mono-tools,代码行数:10,代码来源:AvoidConcatenatingCharsRule.cs

示例15: PopulateMethodParameters

        private static void PopulateMethodParameters(IMethodSignature member,
            CodeParameterDeclarationExpressionCollection parameters, bool isExtension = false)
        {
            foreach (var parameter in member.Parameters)
            {
                FieldDirection direction = 0;
                if (parameter.IsOut)
                    direction |= FieldDirection.Out;
                else if (parameter.ParameterType.IsByReference)
                    direction |= FieldDirection.Ref;

                var parameterType = parameter.ParameterType.IsByReference
                    ? parameter.ParameterType.GetElementType()
                    : parameter.ParameterType;

                var type = CreateCodeTypeReference(parameterType);

                if (isExtension)
                {
                    type = ModifyCodeTypeReference(type, "this");
                    isExtension = false;
                }

                var name = parameter.HasConstant
                    ? string.Format("{0} = {1}", parameter.Name, FormatParameterConstant(parameter))
                    : parameter.Name;
                var expression = new CodeParameterDeclarationExpression(type, name)
                {
                    Direction = direction,
                    CustomAttributes = CreateCustomAttributes(parameter)
                };
                parameters.Add(expression);
            }
        }
开发者ID:Particular,项目名称:ServiceControl.Plugin.Nsb6.CustomChecks,代码行数:34,代码来源:PublicApiGenerator.cs


注:本文中的IMethodSignature类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。