Beispiel #1
0
        public static int Remove_FromNullToDelegate(int value)
        {
            var dlg1 = new IntRefDelegate(IntRefImpl1);

            // null - dlg1 = null
            var dlg = (IntRefDelegate)Delegate.Remove(null, dlg1);

            var v = value;

            dlg?.Invoke(ref v);

            return(v);
        }
Beispiel #2
0
        public static int Remove_FromNullToMulticastDelegate(int value)
        {
            var dlg1 = new IntRefDelegate(IntRefImpl1);
            var dlg2 = new IntRefDelegate(IntRefImpl2);

            var dlgA = dlg1 + dlg2;

            // null - (dlg1 + dlg2) = null
            var dlg = (IntRefDelegate)Delegate.Remove(null, dlgA);

            var v = value;

            dlg?.Invoke(ref v);

            return(v);
        }
Beispiel #3
0
        public static int Remove_DelegateMiddle(int value)
        {
            var dlg1 = new IntRefDelegate(IntRefImpl1);
            var dlg2 = new IntRefDelegate(IntRefImpl2);
            var dlg3 = new IntRefDelegate(IntRefImpl3);

            var dlgA = dlg1 + dlg2;

            dlgA += dlg3;

            // (dlg1 + dlg2 + dlg3) - dlg2 = (dlg1 + dlg3)
            var dlg = (IntRefDelegate)Delegate.Remove(dlgA, dlg2);

            var v = value;

            dlg?.Invoke(ref v);

            return(v);
        }
Beispiel #4
0
        public static int Remove_DelegateInstance(int value)
        {
            var dlg1 = new IntRefDelegate(IntRefImpl1);
            var dlg2 = new IntRefDelegate(IntRefImpl2);

            var dlgA = dlg1 + dlg2;

            dlgA += dlg1;

            // Remove only a tail delegate.
            // (dlg1 + dlg2 + dlg1) - dlg1 = (dlg1 + dlg2)
            var dlg = (IntRefDelegate)Delegate.Remove(dlgA, dlg1);

            var v = value;

            dlg?.Invoke(ref v);

            return(v);
        }
Beispiel #5
0
        public static int Remove_NotContainsMulticastDelegate(int value)
        {
            var dlg1 = new IntRefDelegate(IntRefImpl1);
            var dlg2 = new IntRefDelegate(IntRefImpl2);
            var dlg3 = new IntRefDelegate(IntRefImpl3);

            var dlgA = dlg1 + dlg2;

            dlgA += dlg3;

            var dlgB = dlg2 + dlg1;

            // (dlg1 + dlg2 + dlg3) - (dlg2 + dlg1) = (dlg1 + dlg2 + dlg3)
            var dlg = (IntRefDelegate)Delegate.Remove(dlgA, dlgB);

            var v = value;

            dlg?.Invoke(ref v);

            return(v);
        }
Beispiel #6
0
        public static int Remove_EntireMatchedMulticastDelegate(int value)
        {
            var dlg1 = new IntRefDelegate(IntRefImpl1);
            var dlg2 = new IntRefDelegate(IntRefImpl2);
            var dlg3 = new IntRefDelegate(IntRefImpl3);

            var dlgA = dlg1 + dlg2;

            dlgA += dlg3;

            var dlgB = dlg1 + dlg2;

            dlgB += dlg3;

            // (dlg1 + dlg2 + dlg3) - (dlg1 + dlg2 + dlg3) = null
            var dlg = (IntRefDelegate)Delegate.Remove(dlgA, dlgB);

            var v = value;

            dlg?.Invoke(ref v);

            return(v);
        }