static void Main2()
        {
            Del2 o1 = (a, b) => a + b;

            Console.WriteLine(o1(1, 2));

            Del3 o3 = (a, b) => b > a;

            Console.WriteLine(o3(1, 2));

            Del4 obj4 = a => a.Basic;

            Console.WriteLine(obj4(new Emp {
                Basic = 1234
            }));

            Del5 obj5 = a => a.Basic > 10000;

            Console.WriteLine(obj5(new Emp {
                Basic = 12345
            }));



            Console.ReadLine();
        }
Exemple #2
0
        public Form1()
        {
            InitializeComponent();
            startBC();
            graphOpened = false;
            expressionTextBox.Select();
            grafoveOkno = null;
            InitializeTooltips();
            pamet      = new string[10];
            delButtons = new Button[7];
            for (int i = 0; i < 10; i++)
            {
                pamet[i] = "Memory " + (1 + i).ToString();
            }
            memoryComboBox.SelectedIndex = 0;
            delButtons[0] = Del0;;
            delButtons[1] = Del1;;
            delButtons[2] = Del2;;
            delButtons[3] = Del3;;
            delButtons[4] = Del4;;
            delButtons[5] = Del5;;
            delButtons[6] = Del6;;
            Del0.Hide();
            Del1.Hide();
            Del2.Hide();
            Del3.Hide();
            Del4.Hide();
            Del5.Hide();
            Del6.Hide();

            favButtons = new List <Button>();
        }
Exemple #3
0
 public StartScreen()
 {
     InitializeComponent();
     // Instantiate the delegate.
     handler = makeVisible;
     join = joining;
     start = starting;
     invisible = makeInvisible;
 }
Exemple #4
0
		public void HasTarget_Instance ()
		{
			DelegateTest dt = new DelegateTest ();
			dt.int_field = 5;

			Del3 d = (Del3)Delegate.CreateDelegate (typeof (Del3), dt, typeof (DelegateTest).GetMethod ("method3"));

			Assert.AreEqual (10, d (5));
		}
 public int IndexOf(ToolStripItem item)
 {
     if (this.InvokeRequired)
     {
         Del3         del    = new Del3(IndexOf);
         IAsyncResult result = this.BeginInvoke(del, new object[] { item });
         return((int)this.EndInvoke(result));
     }
     else
     {
         return(Items.IndexOf(item));
     }
 }
Exemple #6
0
        static void Main(string[] args)
        {
            // Del1 del1 = Test1;
            // Del1 del1 = delegate() { };
            //=>goes to:去执行
            //Del1 del1 = () => { };

            //Del2 del2 = Test1;

            //Del2 del2 = delegate(string name) { };


            //  Del2 del2 = (name) => { };

            //Del3 del3 = Test1;

            //Del3 del3 = delegate(string name) { return 100; };

            Del3 del3 = (name) => { return(100); };
        }
Exemple #7
0
        static void Main(string[] args)
        {
            Del1 d = delegate()
            {
                Console.WriteLine("Display MEthod");
            };

            d();

            Del2 d2 = delegate(int n)
            {
                Console.WriteLine($"number is {n}");
            };

            d2(5);

            Del3 d3 = delegate(string str)
            {
                return(str.ToUpper());
            };

            Console.WriteLine(d3("hello world"));

            Del4 d4 = delegate()
            {
                return(DateTime.Now.ToString());
            };

            Console.WriteLine(d4());

            int x = 10;

            Del1 d5 = delegate()
            {
                Console.WriteLine(x);
            };

            d5();
        }
        static void Main()
        {
            Del2 o = Display;

            o("a");

            Del3 o3  = Add;
            int  ans = o3(10, 20);

            Console.WriteLine(ans);

            Del1 o4 = class2.Show;

            o4();

            class2 oCls2 = new class2();
            Del1   o5    = oCls2.Show2;

            o5();

            Console.ReadLine();
        }
Exemple #9
0
        /// <summary>
        /// Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数,简单来说Lambda是牛名函数。
        /// 表达式目录树类似于这样(m, n) => m * n + m + n + 2;
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            try
            {
                //
                Del3 myTest1 = () => Test();
                myTest1.Invoke();

                //
                Del3 myTest2 = () => Test2();
                myTest2.Invoke();

                //
                Del3 myTest3 = () => Test3();
                myTest3.Invoke();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadLine();
        }
Exemple #10
0
        //lambda语句本质就是一个匿名函数
        static void Main(string[] args)
        {
            //Del1 del1 = delegate() { Console.WriteLine("无参数,无返回值"); };
            Del1 del1 = () => { Console.WriteLine("无参数,无返回值"); };

            //Del2 del2 = delegate(string name){int a=name.Length ;Console .WriteLine ("有参数,字符串长{0}",a);};
            Del2 del2 = (string name) => { int a = name.Length; Console.WriteLine("有参数,字符串长{0}", a); };

            //Del3 del3 = delegate(string name) { int a = name.Length; return a; };
            Del3 del3 = (string name) => { int a = name.Length; return(a); };

            del1();
            del2("zhangsan");
            Console.WriteLine(del3("zhangsan"));

            //关于Lambda在参数中的应用
            List <int> listNums = new List <int>()
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9,
            };

            listNums.RemoveAll(n => n > 7);//见提示Precidate <int> match,就是使用lambda输入一个条件;
            foreach (int item in listNums)
            {
                Console.WriteLine(item);
            }



            IEnumerable <int> aa = listNums.Where(n => n > 3);//根据提示写的返回值类型

            foreach (int item in aa)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }
Exemple #11
0
        static void Main(string[] args)
        {
            #region MyRegion
            Del handler = DelegateMethod;
            handler("Hello");

            MethodWithCallback(1, 2, handler);
            MethodWithCallback(3, 4, handler);
            MethodWithCallback(5, 6, handler);

            MethodClass obj  = new MethodClass();
            Del         d1_1 = obj.Metrhod1;
            Del         d1_2 = obj.Metrhod2;
            Del         d1_3 = DelegateMethod;

            Del allMethodsDelegate = d1_1 + d1_2;
            allMethodsDelegate += d1_3;
            int invocationCount = allMethodsDelegate.GetInvocationList().Length;//.GetLength(0);
            Console.WriteLine($"count:{invocationCount}");

            Del2 d2 = obj.MultipyNumbers;
            Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':");
            for (int i = 1; i <= 5; i++)
            {
                d2(i, 2);
            }

            Console.WriteLine("委托映射到静态方法和实例方法,并返回来自两种方法的具体信息:");
            Del3 d3_1 = obj.InstancaMethod;
            d3_1();
            Del3 d3_2 = MethodClass.StaticMethod;
            d3_2();

            Console.WriteLine("multicast delegates(多播委托):");
            CustomDel hiDel, byeDel, multiDel, multiMinusHiDel;
            hiDel           = Hello;
            byeDel          = Goodbye;
            multiDel        = hiDel + byeDel;
            multiMinusHiDel = multiDel - hiDel;
            Console.WriteLine("Invoke delegate hiDel:");
            hiDel("A");
            Console.WriteLine("Invoke delegate byDel:");
            byeDel("B");
            Console.WriteLine("Invoke delegate multiDel:");
            multiDel("C");
            Console.WriteLine("Invoke delegate multiMinusHiDel:");
            multiMinusHiDel("D");
            #endregion

            #region Func Delegate
            Console.WriteLine("\nFunc Delegate:\n");

            OutPutTarget output = new OutPutTarget();
            // 调用自定义委托:WriteMethod
            //WriteMethod methodCall = output.SendToFile;
            // 调用Func<TResult>
            //Func<bool> methodCall = output.SendToFile;
            // 使用 Func<TResult> 委托与 C# 中的匿名方法
            //Func<bool> methodCall = delegate () { return output.SendToFile(); };
            // lambda 表达式 Func<T, TResult> 委托
            Func <bool> methodCall = () => output.SendToFile();
            if (methodCall())
            {
                Console.WriteLine("Success!");
            }
            else
            {
                Console.WriteLine("File write operation failed");
            }

            Console.WriteLine("\nFunc Delegate示例:\n");
            LazyValue <int>  lazyOne = new LazyValue <int>(() => ExpensiveOne());
            LazyValue <long> lazyTwo = new LazyValue <long>(() => ExpensiveTwo("hello"));
            Console.WriteLine("LazyValue objects has been created.");
            Console.WriteLine(lazyOne.Value);
            Console.WriteLine(lazyTwo.Value);
            #endregion

            #region Func<T1, T2, TResult> 委托
            Console.WriteLine("Func<T1, T2, TResult> 委托:");
            Func <string, int, bool> predicate = (str, index) => str.Length == index;
            string[]             words         = { "orange", "apple", "Article", "elephant", "star", "and" };
            IEnumerable <string> aWords        = words.Where(predicate).Select(str => str);
            foreach (string word in aWords)
            {
                Console.WriteLine(word);
            }

            #endregion
        }
Exemple #12
0
        private static void Main()
        {
            #region Б.

            // Демонстрация контрвариантности в делегате Action.
            Action <Cat> action = TestAction;

            // Демонстрация контрвариантности и ковариантности в делегате Func.
            Func <MiniCat, Animal> func = TestFunc;

            // Демонстрация контрвариантности в делегате Predicate.
            Predicate <Dog> predicate = TestPredicate;

            // Демонстрация контрвариантности в интерфейсе IComparable.
            IComparable <Client <int> > inter = new Person <int>(123);

            // Демонстрация контрвариантности в интерфейсе IComparer.
            IComparer <Car <int> > car = new Transport <int>(12);


            #endregion

            #region В.

            // Ошибка, потому что интерфейс IFruit не является ковариантным.
            IFruit <B <int> > ifruit1 = new B <C <int> >();

            // Ошибка, потому что интерфейс IFruit не является контрвариантным.
            IFruit <B <int> > ifruit2 = new B <A <int> >();

            // Нет ошибки, потому что интерфейс ICar является ковариантным.
            ICar <B <int> > icar1 = new B <C <int> >();

            // Ошибка, потому что интерфейс ICar не является контрвариантым.
            ICar <B <int> > icar2 = new B <A <int> >();

            // Ошибка, потому что интерфейс IPerson не является ковариантным.
            IPerson <B <int> > Iperson1 = new B <C <int> >();

            // Нет ошибки, потому что интерфейс IPerson является контрвариантым.
            IPerson <B <int> > Iperson2 = new B <A <int> >();

            #endregion

            #region Г.

            // Две ошибки, потому что делегат Del1 не является
            // ни ковариантным, ни контрвариантынм.
            Del1 <A2> del1 = Del1 <A1>;
            Del1 <A2> del2 = Del1 <A3>;

            // Нет ошибки, потому что делегат Del2 является контрвариантным.
            Del2 <A2> del3 = Del2 <A1>;

            // Ошибка, потому что делегат Del2 не является контрвариантным.
            Del2 <A2> del4 = Del2 <A3>;

            // Ошибка, потому что делегат Del3 не является контрвариантным.
            Del3 <A2> del6 = Del3 <A1>;

            // Нет ошибки, потому что делегат Del3 является ковариантным.
            Del3 <A2> del5 = Del3 <A3>;

            #endregion

            #region Д.

            // 1) Ковариантность и контрвариантность
            //     обеспечивают большую гибкость в назначении и использовании универсальных типов.

            // 2) Поддержка ковариации и контрвариантности для групп методов позволяет
            //     сопоставить сигнатуры методов с типами делегатов. За счет этого вы можете
            //     назначать делегатам не только методы с совпадающими сигнатурами, но и методы,
            //     которые возвращают более производные типы (ковариация) или принимают параметры
            //     с менее производными типами (контрвариантность), чем задает тип делегата.

            // 3) Вся суть вариантности состоит в использовании в производных типах
            //     преимуществ наследования. Известно, что если два типа связаны
            //     отношением "предок-потомок", то объект потомка может храниться в переменной
            //     типа предка. На практике это значит, что мы можем использовать для
            //     каких-либо операций объекты потомка вместо объектов предка.
            //     Тем самым, можно писать более гибкий и короткий код
            //     для выполнения действий поддерживаемых разными потомками с общим предком.

            #endregion
        }
Exemple #13
0
        private static void Main(string[] args)
        {
            //Del myDel = new Del(MyDel); //explicit delegate creation
            Del myDel;
            var nasobic = new Nasobic();

            nasobic.Nasob(Method);
            nasobic.Nasob(delegate(int i) { return(i); });
            nasobic.Nasob(i => i / 2);

            myDel = nasobic.Zdvojnasob;
            myDel = Nasobic.Podel;

            nasobic.Zdvojnasob(3);
            //var a = myDel.Invoke(3);

            Del myDel20 = nasobic.Zdvojnasob;

            Del myDel22 = delegate(int x) { return(x / 2); };
            Del myDel23 = (int x) =>
            {
                int y = x / 2;
                return(x);
            };

            Del myDel24 = x =>
            {
                int y = x / 2;
                return(x);
            };

            Del2 myDel224 = (x, y) =>
            {
                return(x / 2 + 12);
            };

            Del3 myDel31 = (out int x, string y) =>
            {
                x = 0;
                return(x);
            };

            Del myDel25 = x => x / 2;
            Del myDel26 = x =>
            {
                return(x / 2);
            };

            Del myDel2 = MyDel;                   //named function
            Del myDel3 = delegate { return(3); }; //delegate + anonymous function
            Del myDel4 = delegate { return(3); }; //delegate + anonymous function with implicit parameters

            Del myDel5 = i => { return(3); };     //statement lambda
            Del myDel6 = i => 3;                  //lambda expression


            Expression <Del> myExpression = x => x + 2;

            int[]  numbers    = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
            int    oddNumbers = numbers.Count(n => n % 2 == 1);
            string s;

            Console.WriteLine("bla");
        }