public override Frame Clone()
        {
            PrivateFrame frame = new PrivateFrame(owner);

            if (data != null)
            {
                frame.data = new ByteVector(data);
            }
            return(frame);
        }
        /// <summary>
        ///    Gets a specified private frame from the specified tag,
        ///    optionally creating it if it does not exist.
        /// </summary>
        /// <param name="tag">
        ///    A <see cref="Tag" /> object to search in.
        /// </param>
        /// <param name="owner">
        ///    A <see cref="string" /> specifying the owner to match.
        /// </param>
        /// <param name="create">
        ///    A <see cref="bool" /> specifying whether or not to create
        ///    and add a new frame to the tag if a match is not found.
        /// </param>
        /// <returns>
        ///    A <see cref="PrivateFrame" /> object containing the
        ///    matching frame, or <see langword="null" /> if a match
        ///    wasn't found and <paramref name="create" /> is <see
        ///    langword="false" />.
        /// </returns>
        public static PrivateFrame Get(Tag tag, string owner,
                                       bool create)
        {
            PrivateFrame priv;

            foreach (Frame frame in tag.GetFrames(FrameType.PRIV))
            {
                priv = frame as PrivateFrame;
                if (priv != null && priv.Owner == owner)
                {
                    return(priv);
                }
            }

            if (!create)
            {
                return(null);
            }

            priv = new PrivateFrame(owner);
            tag.AddFrame(priv);
            return(priv);
        }