Example #1
0
 public static void SetDelegate(DelegateAction action)
 {
     action?.Invoke();
 }
Example #2
0
        static void Main(string[] args)
        {
            /*
             * Review delegate
             *  Lambda
             *  yield
             */
            // Create delegate object
            // DelegateAction parameter: intellisense "void () target", what is mean?

            // 교과서적인 문법
            DelegateAction da = new DelegateAction(DelegateActionMethod);

            da.Invoke();

            DelegateAction da2 = DelegateActionMethod;

            da2();

            DelegateAction3 da10        = new DelegateAction3(DelegateActionMethod10);
            int             returnValue = da10(10, "apple");

            DelegateActionMethod();

            Test test = new Test();

            Test.DelegateAction delegateAction = new Test.DelegateAction(DelegateActionMethod);
            test.SetDelegate(delegateAction);

            Store    s = new Store();
            Customer c = new Customer();

            s.PayEvent1 = c.Pay;

            // event의 정체: delegate type으로 동작하는 특수한 기능
            //Button button = new Button();
            //button.Click += Button_Click;

            // Lambda
            DelegateAction da3 = () => Console.WriteLine("Called da2 delegate variable.");
            // delegate를 표현하는 문법
            LambdaTest lambda = () => { };
            // parameter 하나를 받는 표현은 () 생략이 가능, 구현부분도 1줄이면 {} 생략 가능
            LambdaTest2 lambda2 = value => value = 1;

            // 평소에 봤던 lambda들...
            List <int> list     = new List <int>();
            int        findItem = list.Find(obj => obj == 10);
            var        result   = list.Where(obj => obj > 10);

            foreach (var item in list)
            {
            }

            // yield
            foreach (var item in GetNames)
            {
                if (item != null)
                {
                    Console.WriteLine("AOA member: " + item);
                }
            }

            #region 요청 리뷰
            // 1. LINQ
            // 2. Design pattern: Factory, Starategy
            #endregion
        }
Example #3
0
        static void Main(string[] args)
        {
            var network = new CellphoneNetwork();
            var action  = new DelegateAction(Exit);
            var random  = new Random();
            var result  = 0;

            action = null;

            // Список со случайными тарифами
            var rateList = new Rate[4]
            {
                new RateSimple(),
                new RateSuper100(),
                new RateSimple(20, 20),
                new RateSuper100(30)
            };

            // Считывание информации из файла
            var file = File.ReadAllLines("spisok.txt", Encoding.Default);

            // Разделение считанной информации на имя, телефон, адрес
            for (int i = 0; i < file.Length; i++)
            {
                var personData = file[i].Split(new char[] { ',' });
                network.PersonList.Add(new Person(personData[0], personData[1], personData[2], rateList[random.Next(0, 4)]));
            }

            Console.WriteLine("Программа ведения учета абонентов телефонной сети\n\n");

            ShowMenu();
            var input = Console.ReadLine();

            CheckInput();

            // Локальный метод для получения ввода пользователя программы
            void CheckInput()
            {
                while (!int.TryParse(input, out result) || result < 1 || result > 5)
                {
                    ShowMenu();
                    input = Console.ReadLine();
                }
                input = string.Empty;

                // Выбор метода для делегата, основываясь на вводимой информации
                action =
                    result == 1 ? ShowPersonList :
                    result == 2 ? ShowRateList :
                    result == 3 ? SearchByName :
                    result == 4 ? SearchByPhoneNumber :
                    result == 5 ? Exit : null as DelegateAction;
                action?.Invoke();
                action = null;
            }

            // Локальный метод для выхода из программы
            void Exit()
            {
                Environment.Exit(0);
            }

            // Локальный метод для отображения всех абонентов
            void ShowPersonList()
            {
                for (int i = 0; i < network.PersonList.Count; i++)
                {
                    network.PersonList[i].DisplayInfo();
                }
                CheckInput();
            }

            // Локальный метод для отображения всех тарифов
            void ShowRateList()
            {
                for (int i = 0; i < rateList.Length; i++)
                {
                    rateList[i].DisplayInfo();
                }
                CheckInput();
            }

            // Локальный метод для поиска абонентов по имени
            void SearchByName()
            {
                Console.WriteLine("Введите часть имени или полное имя: ");
                network.SearchBy(SearchType.ByName, Console.ReadLine());
                CheckInput();
            }

            // Локальный метод для поиска абонентов по номеру телефона
            void SearchByPhoneNumber()
            {
                Console.WriteLine("Введите часть номера или полный номер: ");
                network.SearchBy(SearchType.ByPhoneNumber, Console.ReadLine());
                CheckInput();
            }

            // Локальный метод для отображения меню
            void ShowMenu()
            {
                Console.WriteLine("\nВведите номер нужной опции что бы продолжить: \n\n" +
                                  " 1. Вывести информацию о всех абонентах \n" +
                                  " 2. Вывести информацию о всех тарифах \n" +
                                  " 3. Найти абонента по имени \n" +
                                  " 4. Найти абонента по номеру телефона \n" +
                                  " 5. Выход \n ");
            }
        }