public new MetadataClassDescriptor BindMetadataClassDescriptor(SimplTypesScope metadataTScope)
        {
            if (metadataClassDescriptor != null)
            {
                return(metadataClassDescriptor);
            }

            // create a temporary local metadata translation scope
            SimplTypesScope localMetadataTScope = SimplTypesScope.Get("mmd_local_tscope:" + Name, metadataTScope);

            // record the initial number of classes in the local translation scope

            int initialLocalTScopeSize = localMetadataTScope.EntriesByClassName.Count;

            // do actual stuff ...
            base.BindMetadataClassDescriptor(localMetadataTScope);

            // if tag overlaps, or there are fields using classes not in metadataTScope, use localTScope
            MetadataClassDescriptor thisCd = this.MetadataClassDescriptor;

            if (thisCd != null)
            {
                MetadataClassDescriptor thatCd = (MetadataClassDescriptor)metadataTScope.GetClassDescriptorByTag(thisCd.TagName);
                if (thisCd != thatCd)
                {
                    localMetadataTScope.AddTranslation(thisCd);
                    this.localMetadataTranslationScope = localMetadataTScope;
                }
                else if (localMetadataTScope.EntriesByClassName.Count > initialLocalTScopeSize)
                {
                    this.localMetadataTranslationScope = localMetadataTScope;
                }
                else
                {
                    this.localMetadataTranslationScope = metadataTScope;
                }
            }

            // return the bound metadata class descriptor
            return(thisCd);
        }