/// <summary>
        /// Removes Member from this ObjectType
        /// </summary>
        /// <param name="a_Name">
        /// Member name <see cref="System.String"/>
        /// </param>
        public void RemoveMember(string a_Name)
        {
            VirtualMember member = this[a_Name];

            if (member != null)
            {
                RemoveMember(member.Index);
            }
            else
            {
                throw new ExceptionCreatingVirtualPropertyTwiceWithDifferentType(a_Name);
            }
            member = null;
        }
 /// <summary>
 /// Removes Member from this ObjectType
 /// </summary>
 /// <param name="a_Member">
 /// Virtual member <see cref="VirtualMember"/>
 /// </param>
 public void RemoveMember(VirtualMember a_Member)
 {
     if (a_Member == null)
     {
         return;
     }
     if (a_Member.Name == properties[a_Member.Index].Name)
     {
         RemoveMember(a_Member.Index);
     }
     else
     {
         throw new ExceptionRemovingMemberWithDifferentName();
     }
 }
        /// <summary>
        /// Adds new memeber for this ObjectType
        /// </summary>
        /// <param name="a_Name">
        /// Member name <see cref="System.String"/>
        /// </param>
        /// <param name="a_Type">
        /// Member type <see cref="System.Type"/>
        /// </param>
        public void AddMember(string a_Name, System.Type a_Type)
        {
            if (IsLocked == true)
            {
                throw new ExceptionCantAddMemberToLockedVirtualObject();
            }
            VirtualMember member = this[a_Name];

            if (member != null)
            {
                if (a_Type == member.PropertyType)
                {
                    return;
                }
                else
                {
                    throw new ExceptionCreatingVirtualPropertyTwiceWithDifferentType(a_Name);
                }
            }
            member = null;

            VirtualMember[] newprops;
            if (properties != null)
            {
                newprops = new VirtualMember [properties.Length + 1];
                properties.CopyTo(newprops, 0);
                newprops[newprops.Length - 1] = new VirtualMember(a_Name, a_Type, newprops.Length - 1);
            }
            else
            {
                newprops    = new VirtualMember [1];
                newprops[0] = new VirtualMember(a_Name, a_Type, 0);
            }
            properties = null;
            properties = newprops;
            newprops   = null;
        }