public ICallableCore BindTypes(Types genericTypes) { ClrTypeCore core; _BindedGenericCache.TryGetValue(genericTypes, out core); if (core != null) { return(core); } var type = BindingType; if (type != null) { if (genericTypes.Count == _GenericParams.Count) { try { var btype = type.MakeGenericType(genericTypes.ToArray()); if (btype != null) { var rv = ClrTypeCore.GetTypeCore(btype); if (rv != null) { _BindedGenericCache[genericTypes] = rv as ClrTypeCore; return(rv); } } } catch { } } } return(null); }
protected internal override object GetFieldImp(object key) { if (key != null) { var ukey = key.UnwrapDynamic(); if (ukey == null) { ukey = key; } if (ukey is string) { string strkey = (string)ukey; switch (strkey) { case "___ol": return(_Core.CreateOverloadSelector(Target)); case "___bind": return(new CallableRebinder(_Core)); default: if (Binding is Delegate) { var tcore = ClrTypeCore.GetTypeCore(Binding.GetType()); return(tcore.GetFieldFor(Binding, key)); } break; } } return(base.GetFieldImp(key)); } return(null); }
public void Init(object obj) { _Binding = null; BindingCore = null; if (obj != null) { BindingCore = ClrTypeCore.GetTypeCore(obj.GetType()); } Binding = obj; }
public void Init(object obj, Type type) { _Binding = null; BindingCore = null; if (type == null) { if (obj != null) { BindingCore = ClrTypeCore.GetTypeCore(obj.GetType()); } Binding = obj; } else { BindingCore = ClrTypeCore.GetTypeCore(type); if (type.IsInstanceOfType(obj)) { Binding = obj; } } }
protected internal ClrTypeCoreWithGeneric(Type ntype, Type[] gtypes, Dictionary <Types, ClrTypeCore> cache) { List <Type> types = new List <Type>(); if (ntype != null) { _NormalCore = ClrTypeCore.GetTypeCore(ntype); types.Add(ntype); } if (gtypes != null && gtypes.Length > 0) { if (gtypes.Length > 1) { _GenericCore = new GroupGenericTypeCore(gtypes, cache); } else { _GenericCore = ClrGenericTypeCore.GetGenericTypeCore(gtypes[0], cache); } types.AddRange(gtypes); } _GroupTypes = types.ToArray(); }
public void Init(Type type) { _Binding = type; BindingCore = ClrTypeCore.GetTypeCore(type); TypeObjectWrapper = ClrObjectWrapper.GetFromPool(type, null); }