public MetaHashComponent Clone()
        {
            MetaHashComponent c = new MetaHashComponent();

            this.Clone(c);

            return(c);
        }
        protected void Clone(MetaHashComponent c)
        {
            //Console.WriteLine ("[MetaHashComponent.Clone] Base MetaHashComponent...");
            base.Clone((MetaHashEntity)c);

            c.Package = package;
            c.Kind    = kind;

            if (usingList != null)
            {
                c.UsingList = new List <string> ();

                foreach (string u in usingList)
                {
                    c.UsingList.Add(u);
                }
            }

            if (parameters != null)
            {
                c.Parameters = new List <MetaParameter> ();

                //Para os nossos propósitos, não se deve clonar os parameters.
                foreach (MetaParameter p in parameters)
                {
                    c.Parameters.Add(p);
                }
            }

            if (innerComponents != null)
            {
                c.InnerComponents = new List <MetaInnerComponent> ();

                MetaInnerComponent clone;
                foreach (MetaInnerComponent mic in innerComponents)
                {
                    clone        = mic.Clone();
                    clone.Father = c;
                    c.InnerComponents.Add(clone);
                }
            }

            if (superComponent != null)
            {
                c.SuperComponent        = superComponent.Clone();
                c.SuperComponent.Father = c;
            }

            if (units != null)
            {
                MetaUnit clone;
                c.Units = new Dictionary <string, MetaUnit>();
                foreach (string key in units.Keys)
                {
                    clone        = units[key].Clone();
                    clone.Father = c;
                    c.Units.Add(key, clone);
                }
            }

            c.LastIdCode = lastIdCode;
        }