Axiom.Runtime.Builtins.OOP.get_property_3.Getproperty C# (CSharp) Метод

Getproperty() публичный Метод

public Getproperty ( AbstractTerm obj, AbstractTerm method, AbstractTerm returnObject ) : bool
obj Axiom.Runtime.AbstractTerm
method Axiom.Runtime.AbstractTerm
returnObject Axiom.Runtime.AbstractTerm
Результат bool
        public bool Getproperty(AbstractTerm obj, AbstractTerm method, AbstractTerm returnObject)
        {
            if (obj.IsConstant)
            {
                // invoke a static get property
                Assembly asm = GetRequiredAssembly(obj.Data() as string, runtime); ;
                Type type = asm.GetType(obj.Data() as string);
                if (type == null)
                {
                    return false;
                }
                if (type.GetProperty(method.Data() as string) == null)
                {
                    return false;
                }
                object res = type.InvokeMember(method.Data() as string, BindingFlags.GetProperty | BindingFlags.Static | BindingFlags.Public, null, null, null);
                switch (res.GetType().ToString())
                {
                    case "System.String":
                        AbstractTerm rC = new ConstantTerm(res.ToString());
                        if (!returnObject.Unify(rC))
                        {
                            return false;
                        }
                        break;
                    case "System.Char":
                    case "System.Int32":
                    case "System.Boolean":
                        AbstractTerm returnConstant = new ConstantTerm(res.ToString());
                        if (!returnObject.Unify(returnConstant))
                        {
                            return false;
                        }
                        break;
                    default:
                        returnObject.Unify(new ObjectTerm(res));
                        break;
                }
            }
            else
            {
                if (obj.Data().GetType().GetProperty(method.Data() as string) == null)
                {
                    return false;
                }

                // invoke an instance get property
                object res = obj.Data().GetType().InvokeMember(method.Data() as string, BindingFlags.Default | BindingFlags.ExactBinding | BindingFlags.GetProperty, null, obj.Data(), null);
                switch (res.GetType().ToString())
                {
                    case "System.Char":
                    case "System.String":
                    case "System.Int32":
                    case "System.Boolean":
                        returnObject.Unify(new ConstantTerm(res.ToString()));
                        break;
                    default:
                        returnObject.Unify(new ObjectTerm(res));
                        break;
                }
            }
            return true;
        }