private void AddSuperClass(StillOneScriptCore.EntityModel.LngObjectsModel._Object superClass, float rank, StillOneScriptCore.EntityModel.LngObjectsModel.Support.Internal._P_BaseInstace p_instance, bool isAddInstance)
        {
            if (superClass == null)
            {
                throw new ArgumentNullException("superClass");
            }

            if (!superClass.IsClass)
            {
                throw new System.Exception("Invalid superclass. The superclass must be a class.");
            }

            if(p_instance == null)
            {
                if (isAddInstance)
                {
                    throw new ArgumentNullException("p_instance");
                }
            }

            if (mParent.IsClass && superClass.IsInheritedFrom(mParent) > 0)
            {
                throw new System.Exception("Setting cyclic inheritance.");
            }

            var tmpInfo = FindSuperClassInMe(superClass);

            var tmpIsUpdateRank = false;

            if(tmpInfo == null)
            {
                tmpInfo = new StillOneScriptCore.EntityModel.LngObjectsModel.Support.InheritanceInfo(superClass);

                mSuperClasses.Add(tmpInfo);
            }
            else
            {
                tmpIsUpdateRank = true;
            }

            tmpInfo.Rank = rank;

            if (tmpIsUpdateRank)
            {
                EmitUpdatedEvent(superClass, rank);
            }
            else
            {
                if (isAddInstance)
                {
                    mP_InstancesCollection.AddItem(p_instance, superClass.AsClass);
                }

                EmitAddedEvent(superClass, rank);
            }
        }