示例#1
0
        static void ValRefTypesDemo()
        {
            EvilStruct es1 = new EvilStruct();
            //es1.PointRef = new PointRef() { X = 1, Y = 2 };
            //es1.PointRef.X = 1;
            //es1.PointRef.Y = 2;
            EvilStruct es2 = es1;

            Console.WriteLine($"es1.PointRef.X={es1.PointRef.X}, es1.PointRef.Y={es1.PointRef.Y}");
            Console.WriteLine($"es2.PointRef.X={es2.PointRef.X}, es2.PointRef.Y={es2.PointRef.Y}");

            es2.PointRef.X = 42;
            es2.PointRef.Y = 45;

            Console.WriteLine($"es1.PointRef.X={es1.PointRef.X}, es1.PointRef.Y={es1.PointRef.Y}");
            Console.WriteLine($"es2.PointRef.X={es2.PointRef.X}, es2.PointRef.Y={es2.PointRef.Y}");

            Console.ReadLine();

            PointVal a; //same as PointVal a = new PointVal();

            a.X = 3;
            a.Y = 5;

            PointVal b = a;

            b.X = 7;
            b.Y = 10;

            a.LogValues();
            b.LogValues();

            Console.WriteLine("After structs");

            PointRef c = new PointRef();

            c.X = 3;
            c.Y = 5;

            PointRef d = c;

            d.X = 7;
            d.Y = 10;

            c.LogValues();
            d.LogValues();
        }
示例#2
0
        static void DoWithObj(object obj)
        {
            //проверить что лежит в object можно с помощью
            //ключевых слов is и as
            bool isPointRef = obj is PointRef;

            if (isPointRef)
            {
                PointRef pr = (PointRef)obj;
                Console.WriteLine(pr.X);
            }
            else
            {
                //do something
            }

            PointRef pr2 = obj as PointRef; //если object - PointRef type,
                                            //то сразу произойдет кастование
                                            //PointRef pr2 = (PointRef)obj;
        }
示例#3
0
        static void NRE_NullReferenceException()
        {
            PointVal?pv = null;

            if (pv.HasValue)
            {
                PointVal pv2 = pv.Value;
                Console.WriteLine(pv.Value.X);
                Console.WriteLine(pv2.X);
            }
            else
            {
                //
            }

            PointVal pv3 = pv.GetValueOrDefault();

            PointRef c = null;

            Console.WriteLine(c.X); //NullReferenceException
        }
示例#4
0
        static void Do(object obj)
        {
            bool isPointRef = obj is PointRef;

            if (isPointRef)
            {
                PointRef pr = (PointRef)obj;
                Console.WriteLine(pr.X);
            }
            else
            {
                //do smth.
            }

            PointRef pr1 = obj as PointRef;

            if (pr1 != null)
            {
                Console.WriteLine(pr1.X);
            }
            else
            {
            }
        }
示例#5
0
        static void NRE_NullableValTypesDemo()
        {
            //PointVal pv; //присвоить null невозможно

            //nullable PointVal type
            PointVal?pv = null;

            if (pv.HasValue) //если не null
            {
                PointVal pv2 = pv.Value;
                Console.WriteLine(pv.Value.X);//если не использовать if, будет NullReferenceException
                //или
                Console.WriteLine(pv2.X);
            }

            //если pv3 == null, то мы получим экземпляр по умолчанию
            PointVal pv3 = pv.GetValueOrDefault();


            //мы не выделили память для с в куче
            PointRef c = null;

            Console.WriteLine(c.X); //NullReferenceException (ссылка объекта не указывает на экземляр объекта)
        }
示例#6
0
 public EvilStruct(int x, int y)
 {
     X        = x;
     Y        = y;
     PointRef = new PointRef();
 }
示例#7
0
        static void Main(string[] args)
        {
            Character warrior        = new Character("Human"); //У каждого класса свое предназначение, Класс кошка не может создавать ракеты...
            string    charactierInfo = warrior.GetRace();

            warrior.Hit(35);
            Console.WriteLine($"Ваша раса: {charactierInfo}, Здоровье персонажа: {warrior.GetHealth()}, Броня: {warrior.armor}");

            Character archer    = new Character("Wood Elf", 60);
            int       armorInfo = archer.armor;

            Console.WriteLine($"Ваша раса: {archer.GetRace()}, Здоровье персонажа: {archer.GetHealth()}, Броня: {armorInfo}");


            Calculator calc   = new Calculator();
            double     result = calc.SqrtLength(ab: 8, bc: 12, alpha: 45); //Именованные аргументы Ctrl + .(точка). Выбираем add argument ->

            result = Math.Round(value: result, digits: 2);
            Console.WriteLine("Площадь равна: " + result);

            double avg = calc.Average(numbers: new int[] { 1, 2, 3, 4 }); //инициализация массива Average (именованные аргументы)

            Console.WriteLine("Среднее значение: " + avg);
            //С помощью params можно передавать значения массива через запятую
            double avg2 = calc.Average2(1, 2, 3, 4);   //инициализация массива Average.

            Console.WriteLine("Инициализация среднего значения: " + avg2);


            //  Calculator.TryParsed(); //С использованием статического метода, без использования экземпляра


            Calculator divider = new Calculator();

            if (divider.TryDevide(5, 2, out double result2))
            {
                Console.WriteLine($"Результат деления равен: {result2}");
            }
            else
            {
                Console.WriteLine("Fail не получилось поделить");
            }

            //Создадим экземпляр структуры
            PointVal a; //это экземпляр структуры, тоже самое, что и PointVal a = new PointWal();

            a.x = 5;
            a.y = 8;

            //Создадим еще одну структуру b
            PointVal b = a;

            b.x = 4;
            b.y = 6;

            a.LogValues();
            b.LogValues();


            Console.WriteLine("Данные после struct (структуры)");
            //Создадим Экземпляр для класса

            PointRef c = new PointRef();

            c.x = 5;
            c.y = 8;

            //Создадим еще одну структуру b
            PointRef d = c;

            d.x = 4;
            d.y = 6;

            c.LogValues();
            d.LogValues();

            List <int> list = new List <int>();

            AddNumbers(list);
            foreach (int value in list)
            {
                Console.WriteLine("Вывод List " + value);
            }

            Swap(8, 6);
            //      SwapAuto(); //Значения вводит пользователь
            //     SwapFromFull(); //С защитой от дурака

            //Bankomat наследование inheritence
            ModelA terminalA = new ModelA(252);

            terminalA.Connect();
            ModelB terminalB = new ModelB(758);

            terminalB.Connect();

            //Car наследование
            Car1 bmw = new Car1("Bmw", "Black", 2.6, 289.7);

            bmw.CarInfo();
            Car2 dodge = new Car2("Dodge", "Yellow", 6.0, 382.3);

            dodge.CarInfo();

            Console.WriteLine();

            //Полиформизм (1 метод для каждого класса осуществляет свою операцию папка Polymorphism)
            Rectangle rectangle = new Rectangle(width: 17.5, height: 22.3);

            rectangle.Area();
            rectangle.Perimeter();
            rectangle.Draw();

            Console.WriteLine();

            Triangle triangle = new Triangle(a: 5.2, b: 6.3, c: 7.5);

            triangle.Area();
            triangle.Perimeter();
            triangle.Draw();
            Console.WriteLine();
            Console.WriteLine();

            /*Так как мы переопределили все эти методы, вызывающий код может унифицированно работать со всеми этими типами/классами
             * используя базовый класс/абстрактный, записать экземпляр абстрактного класса можно в виде массива и передать туда наши
             * классы - наследники в этот массив*/
            Shapes[] shapes = new Shapes[2];
            shapes[0] = new Triangle(6.3, 8.2, 9.7);
            shapes[1] = new Rectangle(22.4, 18.7);
            //Пройдемся foreach, используя базовый(абстрактный класс)
            foreach (var shape in shapes)
            {
                shape.Area();
                shape.Draw();
                shape.Perimeter();
            }
            Console.WriteLine();
            Console.WriteLine();
            Do(triangle);

            MyStack <int> ms = new MyStack <int>(); //у нас 2 перегрузки массива (по умолчанию 4 элемента), либо выбрать размер какой необходим

            ms.Push(1);
            ms.Push(2);
            ms.Push(3);
            Console.WriteLine(ms.Peek()); //Выведем последний добавленный элемент
            ms.Pop();                     //удалим последний элемент
            Console.WriteLine(ms.Peek());
            ms.Push(3);
            ms.Push(4);
            ms.Push(5); //чтобы произошло расширение стека, чтобы убедиться, что ничего не падает
            Console.WriteLine(ms.Peek());

            //Вадим Шванов
            ShvanovCar shamovCar = new ShvanovCar();

            shamovCar.CarInfo();
            ShvanovCar shCar = new ShvanovCar("F1", 260);

            shCar.CarInfo();

            RandomNumbers();
        }