• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# ICallableType类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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



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

示例1: VisitCallableType

		public virtual void VisitCallableType(ICallableType callableType)
		{
			CallableSignature sig = callableType.GetSignature();
			foreach (IParameter parameter in sig.Parameters)
			{
				Visit(parameter.Type);
			}
			Visit(sig.ReturnType);
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:9,代码来源:TypeVisitor.cs


示例2: CreateEndInvokeMethod

        public Method CreateEndInvokeMethod(ICallableType anonymousType)
        {
            CallableSignature signature = anonymousType.GetSignature();
            Method method = CodeBuilder.CreateRuntimeMethod("EndInvoke", signature.ReturnType);

            int delta = 1;
            foreach (IParameter p in signature.Parameters)
            {
                if (p.IsByRef)
                {
                    method.Parameters.Add(
                        CodeBuilder.CreateParameterDeclaration(++delta,
                                p.Name,
                                p.Type,
                                true));
                }
            }
            delta = method.Parameters.Count;
            method.Parameters.Add(
                CodeBuilder.CreateParameterDeclaration(delta + 1, "result", TypeSystemServices.Map(typeof(IAsyncResult))));
            return method;
        }
开发者ID:Rfvgyhn,项目名称:boo,代码行数:22,代码来源:AnonymousCallablesManager.cs


示例3: ProcessCallableTypeInvocation

        void ProcessCallableTypeInvocation(MethodInvocationExpression node, ICallableType type)
        {
            NamedArgumentsNotAllowed(node);

            if (node.Arguments.Count == 1)
            {
                AssertTypeCompatibility(node.Arguments[0], type, GetExpressionType(node.Arguments[0]));
                node.ParentNode.Replace(
                    node,
                    CodeBuilder.CreateCast(
                        type,
                        node.Arguments[0]));
            }
            else
            {
                IConstructor ctor = GetCorrectConstructor(node, type, node.Arguments);
                if (null != ctor)
                {
                    BindConstructorInvocation(node, ctor);
                }
                else
                {
                    Error(node);
                }
            }
        }
开发者ID:stuman08,项目名称:boo,代码行数:26,代码来源:ProcessMethodBodies.cs


示例4: AssertParameterTypes

 bool AssertParameterTypes(ICallableType method, ExpressionCollection args, int count, bool reportErrors)
 {
     IParameter[] parameters = method.GetSignature().Parameters;
     for (int i=0; i<count; ++i)
     {
         IParameter param = parameters[i];
         IType parameterType = param.Type;
         IType argumentType = GetExpressionType(args[i]);
         if (param.IsByRef)
         {
             if (!(args[i] is ReferenceExpression
                 || args[i] is SlicingExpression
                 || (args[i] is SelfLiteralExpression && argumentType.IsValueType)))
             {
                 if (reportErrors)
                     Error(CompilerErrorFactory.RefArgTakesLValue(args[i]));
                 return false;
             }
             if (!CallableResolutionService.IsValidByRefArg(param, parameterType, argumentType, args[i]))
             {
                 return false;
             }
         }
         else
         {
             if (!CanBeReachedFrom(args[i], parameterType, argumentType))
                 return false;
         }
     }
     return true;
 }
开发者ID:stuman08,项目名称:boo,代码行数:31,代码来源:ProcessMethodBodies.cs


示例5: AddInferredClosureParameterTypes

        private void AddInferredClosureParameterTypes(BlockExpression node, ICallableType callableType)
        {
            IParameter[] parameters = (callableType == null ? null : callableType.GetSignature().Parameters);
            for (int i = 0; i < node.Parameters.Count; i++)
            {
                ParameterDeclaration pd = node.Parameters[i];
                if (pd.Type != null) continue;

                IType inferredType;
                if (parameters != null && i < parameters.Length)
                {
                    inferredType = parameters[i].Type;
                }
                else if (pd.IsParamArray)
                {
                    inferredType = TypeSystemServices.ObjectArrayType;
                }
                else
                {
                    inferredType = TypeSystemServices.ObjectType;
                }

                pd.Type = CodeBuilder.CreateTypeReference(inferredType);
            }
        }
开发者ID:stuman08,项目名称:boo,代码行数:25,代码来源:ProcessMethodBodies.cs


示例6: CheckVarArgsParameters

 protected bool CheckVarArgsParameters(ICallableType method, ExpressionCollection args)
 {
     return CallableResolutionService.IsValidVargsInvocation(method.GetSignature().Parameters, args);
 }
开发者ID:stuman08,项目名称:boo,代码行数:4,代码来源:ProcessMethodBodies.cs


示例7: CheckExactArgsParameters

 protected bool CheckExactArgsParameters(ICallableType method, ExpressionCollection args, bool reportErrors)
 {
     if (method.GetSignature().Parameters.Length != args.Count) return false;
     return AssertParameterTypes(method, args, args.Count, reportErrors);
 }
开发者ID:stuman08,项目名称:boo,代码行数:5,代码来源:ProcessMethodBodies.cs


示例8: InferCallableType

		private bool InferCallableType(ICallableType formalType, IType actualType, TypeInference inference)
		{
			ICallableType callableActualType = actualType as ICallableType;
			if (callableActualType == null) return false;

			CallableSignature formalSignature = formalType.GetSignature();
			CallableSignature actualSignature = callableActualType.GetSignature();

			if (formalSignature.AcceptVarArgs)
			{
				if (actualSignature.Parameters.Length < formalSignature.Parameters.Length)
					return false;
			}
			else if (formalSignature.Parameters.Length != actualSignature.Parameters.Length)
			{
				return false;
			}

			// Infer return type, maintaining inference direction
			if (!Infer(formalSignature.ReturnType, actualSignature.ReturnType, inference))
			{
				return false;
			}

			// Infer parameter types, inverting inference direction
			for (int i = 0; i < formalSignature.Parameters.Length; ++i)
			{
				bool inferenceSuccessful = Infer(
					formalSignature.Parameters[i].Type,
					actualSignature.Parameters[i].Type,
					Invert(inference));

				if (!inferenceSuccessful) return false;
			}
			return true;
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:36,代码来源:TypeInferrer.cs


示例9: GenericConstructedCallableType

		public GenericConstructedCallableType(ICallableType definition, IType[] arguments) 
			: base(definition, arguments) 
		{
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:4,代码来源:GenericConstructedType.cs


示例10: CreateBeginInvokeMethod

		Method CreateBeginInvokeMethod(ICallableType anonymousType)
		{
			Method method = CodeBuilder.CreateRuntimeMethod("BeginInvoke", TypeSystemServices.Map(typeof(IAsyncResult)),
															anonymousType.GetSignature().Parameters, false);

			int delta = method.Parameters.Count;
			method.Parameters.Add(
					CodeBuilder.CreateParameterDeclaration(delta + 1, "callback", TypeSystemServices.Map(typeof(AsyncCallback))));
			method.Parameters.Add(
					CodeBuilder.CreateParameterDeclaration(delta + 1, "asyncState", TypeSystemServices.ObjectType));
			return method;
		}
开发者ID:transformersprimeabcxyz,项目名称:boo,代码行数:12,代码来源:AnonymousCallablesManager.cs


示例11: GetAdaptor

 ClassDefinition GetAdaptor(ICallableType to, ICallableType from)
 {
     ClassDefinition adaptor = FindAdaptor(to, from);
     if (null == adaptor)
         adaptor = CreateAdaptor(to, from);
     return adaptor;
 }
开发者ID:Bombadil77,项目名称:boo,代码行数:7,代码来源:InjectCallableConversions.cs


示例12: CheckParameters

 private bool CheckParameters(ICallableType method, ExpressionCollection args, bool reportErrors)
 {
     return AcceptVarArgs(method)
         ? CheckVarArgsParameters(method, args)
         : CheckExactArgsParameters(method, args, reportErrors);
 }
开发者ID:w4x,项目名称:boolangstudio,代码行数:6,代码来源:ProcessMethodBodies.cs


示例13: AssertParameters

        bool AssertParameters(Node sourceNode, IEntity sourceEntity, ICallableType method, ExpressionCollection args)
        {
            if (CheckParameters(method, args, true)) return true;

            Error(CompilerErrorFactory.MethodSignature(sourceNode, sourceEntity.ToString(), GetSignature(args)));
            return false;
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:7,代码来源:ProcessMethodBodies.cs


示例14: CalculateCallableScore

        private static int CalculateCallableScore(ICallableType parameterType, ICallableType argType)
        {
            // upcast
            // parameterType == ICallableType, "ThreadStart"
            // argumentType == ICallableType, "Anonymous Closure"
            // RULES:
            // Number of arguments for argumentType && parameterType == same
            // Either: all arguments "IsAssignableFrom"
            //			OR
            //			all arguments == exactly (best case scenario)
            // ExactMatch -- (best case)
            // UpCast -- "not exact match, but very close" (this is OK)
            // ImplicitConversion -- "assignable, but wrong number of parameters / whatever" (boo does the normal thing)

            CallableSignature siggyType = parameterType.GetSignature();
            CallableSignature siggyArg = argType.GetSignature();
            // Ensuring that these callables have same number of arguments.
            // def foo(a, b,c) == { a, b, c| print foobar }
            if (siggyType.Parameters.Length != siggyArg.Parameters.Length)
            {
                return CallableUpCastScore;
            }
            for (int i = 0; i < siggyType.Parameters.Length; i++)
            {
                if (siggyType.Parameters[i].Type != siggyArg.Parameters[i].Type)
                {
                    return CallableImplicitConversionScore;
                }
            }
            return siggyType.ReturnType == siggyArg.ReturnType
                ? CallableExactMatchScore : CallableUpCastScore;
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:32,代码来源:CallableResolutionService.cs


示例15: RegisterAdaptor

 void RegisterAdaptor(ICallableType to, ICallableType from, ClassDefinition adaptor)
 {
     _adaptors.Add(new AdaptorRecord(to, from, adaptor));
     TypeSystemServices.GetCompilerGeneratedTypesModule().Members.Add(adaptor);
 }
开发者ID:rmartinho,项目名称:boo,代码行数:5,代码来源:InjectCallableConversions.cs


示例16: ProcessDelegateInvocation

        void ProcessDelegateInvocation(MethodInvocationExpression node, ICallableType delegateType)
        {
            if (!AssertParameters(node.Target, delegateType, delegateType, node.Arguments))
            {
                Error(node);
                return;
            }

            var invoke = ResolveMethod(delegateType, "Invoke");
            node.Target = CodeBuilder.CreateMemberReference(node.Target, invoke);
            BindExpressionType(node, invoke.ReturnType);
        }
开发者ID:boo-lang,项目名称:boo,代码行数:12,代码来源:ProcessMethodBodies.cs


示例17: AdaptorRecord

 public AdaptorRecord(ICallableType to, ICallableType from, ClassDefinition adaptor)
 {
     To = to;
     From = from;
     Adaptor = adaptor;
 }
开发者ID:rmartinho,项目名称:boo,代码行数:6,代码来源:InjectCallableConversions.cs


示例18: IsCallableTypeAssignableFrom

		public bool IsCallableTypeAssignableFrom(ICallableType lhs, IType rhs)
		{
			if (lhs == rhs) return true;
			if (Null.Default == rhs) return true;

			var other = rhs as ICallableType;
			if (null == other) return false;

			CallableSignature lvalue = lhs.GetSignature();
			CallableSignature rvalue = other.GetSignature();
			if (lvalue == rvalue) return true;

			IParameter[] lparams = lvalue.Parameters;
			IParameter[] rparams = rvalue.Parameters;
			if (lparams.Length < rparams.Length) return false;

			for (int i = 0; i < rparams.Length; ++i)
				if (!CanBeReachedFrom(lparams[i].Type, rparams[i].Type))
					return false;

			return CompatibleReturnTypes(lvalue, rvalue);
		}
开发者ID:HaKDMoDz,项目名称:GNet,代码行数:22,代码来源:TypeSystemServices.cs


示例19: InferInputTypesFromContextType

 private void InferInputTypesFromContextType(ICallableType type)
 {
     CallableSignature sig = type.GetSignature();
     for (int i = 0; i < Math.Min(ParameterTypes.Length, sig.Parameters.Length); i++)
     {
         if (ParameterTypes[i] != null) continue;
         ParameterTypes[i] = sig.Parameters[i].Type;
     }
 }
开发者ID:BITechnologies,项目名称:boo,代码行数:9,代码来源:ClosureSignatureInferrer.cs


示例20: Adapt

 Expression Adapt(ICallableType expected, Expression callable)
 {
     ICallableType actual = GetExpressionType(callable) as ICallableType;
     if (null == actual)
     {
         // TODO: should we adapt System.Object, System.Delegate,
         // System.MulticastDelegate and ICallable as well?
         return null;
     }
     ClassDefinition adaptor = GetAdaptor(expected, actual);
     Method adapt = (Method)adaptor.Members["Adapt"];
     return CodeBuilder.CreateMethodInvocation((IMethod)adapt.Entity, callable);
 }
开发者ID:rmartinho,项目名称:boo,代码行数:13,代码来源:InjectCallableConversions.cs



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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# ICallerContext类代码示例发布时间:2022-05-24
下一篇:
C# ICallable类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap