public override IPermission Intersect(IPermission target)
        {
            SecurityPermission sp = Cast(target);

            if (sp == null)
            {
                return(null);
            }
            if (IsEmpty() || sp.IsEmpty())
            {
                return(null);
            }

            if (this.IsUnrestricted() && sp.IsUnrestricted())
            {
                return(new SecurityPermission(PermissionState.Unrestricted));
            }
            if (this.IsUnrestricted())
            {
                return(sp.Copy());
            }
            if (sp.IsUnrestricted())
            {
                return(this.Copy());
            }

            SecurityPermissionFlag f = flags & sp.flags;

            if (f == SecurityPermissionFlag.NoFlags)
            {
                return(null);
            }
            else
            {
                return(new SecurityPermission(f));
            }
        }