/// <summary> /// Creates a new CloneType based on a <see cref="System.Type"/>, gathering all the information that is necessary for cloning. /// </summary> /// <param name="type"></param> public CloneType(Type type) { this.type = type.GetTypeInfo(); this.plainOldData = this.type.IsPlainOldData() || typeof(MemberInfo).GetTypeInfo().IsAssignableFrom(this.type); /* Handle MemberInfo like POD */ this.investigateOwnership = !this.plainOldData; this.surrogate = CloneProvider.GetSurrogateFor(this.type); if (this.type.IsArray) { if (this.type.GetArrayRank() > 1) { throw new NotSupportedException( "Cloning multidimensional arrays is not supported in Duality. " + "Consider skipping the referring field via [CloneField] or [DontSerialize] " + "attribute, or use a regular array instead."); } this.elementType = CloneProvider.GetCloneType(this.type.GetElementType()); } CloneBehaviorAttribute defaultBehaviorAttrib = CloneProvider.GetCloneBehaviorAttribute(this.type); if (defaultBehaviorAttrib != null && defaultBehaviorAttrib.Behavior != CloneBehavior.Default) { this.behavior = defaultBehaviorAttrib.Behavior; } else { this.behavior = CloneBehavior.ChildObject; } }
/// <summary> /// Creates a new CloneType based on a <see cref="System.Type"/>, gathering all the information that is necessary for cloning. /// </summary> /// <param name="type"></param> public CloneType(Type type) { this.type = type; this.plainOldData = this.type.IsPlainOldData() || typeof(MemberInfo).IsAssignableFrom(this.type); /* Handle MemberInfo like POD */ this.investigateOwnership = !this.plainOldData; this.surrogate = CloneProvider.GetSurrogateFor(this.type); if (this.type.IsArray) { this.elementType = CloneProvider.GetCloneType(this.type.GetElementType()); } CloneBehaviorAttribute defaultBehaviorAttrib = CloneProvider.GetCloneBehaviorAttribute(this.type); if (defaultBehaviorAttrib != null && defaultBehaviorAttrib.Behavior != CloneBehavior.Default) { this.behavior = defaultBehaviorAttrib.Behavior; } else { this.behavior = CloneBehavior.ChildObject; } }