You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							573 lines
						
					
					
						
							19 KiB
						
					
					
				
			
		
		
	
	
							573 lines
						
					
					
						
							19 KiB
						
					
					
				| using System; | |
| using System.Text; | |
| using System.Collections; | |
| using System.Linq; | |
| using static System.Console; | |
| using System.Collections.Generic; | |
|  | |
| namespace test_3d_chapter_ | |
| { | |
|     class Program | |
|     { | |
|         static void Main(string[] args) | |
|         { | |
|             DateTime data = new DateTime(); | |
|             int god = data.Year; | |
|              | |
|             Wine vin = new Wine("Zaboristo", 200);                              //ПЕРЕГРУЗКА КОНСТРУКТОРА | |
|             Wine vin2 = new Wine("Normas", 1000, 2015); | |
|             vin.Vino(); | |
|             vin2.Vino(); | |
|             Otstup(); | |
|              | |
|                                                                                 //СПОСОБЫ ПЕРЕДАЧИ ЗНАЧЕНИЙ В КОНСТРУКТОР | |
|             Vodka vodka = new Vodka { Name = "Tsarskaya", Capacity = 1, good = true }; | |
|             Vodka vodka2 = new Vodka("5 ozer") { Capacity = 2, good = false }; | |
|             vodka.Voda(); | |
|             vodka2.Voda(); | |
|             Otstup(); | |
|  | |
|             neznau nz = new neznau(10); | |
|             WriteLine("Задано конструктором: {0} \nТолько для чтения: {1} и {2} \nСоздано автоматически: {3} {4} {5}" | |
|                 ,nz.znachenie, nz.DlyaChteniya, nz.DlyaChteniya2, nz.avto, nz.avto+=20, nz.avto);            | |
|             Otstup(); | |
|  | |
|             double a = 1.99, b = 1.234, c = 1.234567;                           //ОКРУГЛЕНИЕ | |
|             WriteLine("{0:F1} {1:F2} {2:F3}", a, b, c); | |
|             Otstup();       | |
|  | |
|             string s1 = "string", s2 = null;                                    //ИНДЕК В STRING | |
|             WriteLine("Обращение по индексу [0] к слову string: {0} и к null: {1}", s1?[0], s2?[0]); | |
|             Otstup(); | |
|  | |
|  | |
|             Sentence s = new Sentence();                                        //РЕАЛИЗАЦИЯ ИНДЕКСАТОРА | |
|             WriteLine("{0} {1}", s[3], s[2, " dva"]); | |
|             for(int i = 0; i < s.Count; i++) | |
|                 Write(s[i] + " "); | |
|             Otstup(); | |
|  | |
|             Write("{0} vtoroe\n", pole1.x); | |
|             Write("{0} vtoroe", pole2.x); | |
|             Otstup(); | |
|  | |
|             WriteLine("{0}.{1}", nameof(StringBuilder), nameof(StringBuilder.Length));  //РЕАЛИЗАЦИЯ NAMEOF | |
|             Otstup(); | |
|  | |
|             Beer beer1 = new Beer { Name = "KrushoviceT", Capacity = 1, Color = "black" }; //НАСЛЕДОВАНИЕ | |
|             Beer beer2 = new Beer { Name = "Bud", Capacity = 2, Color = "bright" }; | |
|             beer1.beer(); | |
|             beer2.beer(); | |
|             beer1.Voda(); | |
|             Otstup(); | |
|             Imya(vodka2, vin);                                                                   //ПОЛИМОРФИЗМ | |
|             Imya(beer1, vin2); | |
|             Otstup(); | |
|  | |
|             Beer vverh = new Beer{Name = "name_vverh", Color = "color_vverh"};             | |
|             Vodka vod = vverh;                                                //ПРИВЕДЕНИЕ ВВЕРХ (всегда успешно) | |
|             string vo = vod.Name; | |
|             //string color = vod.Color; - ОШИБКА, т.к. Color не инициализирован в Vodka | |
|  | |
|             Beer vniz = (Beer)vod;                                              //ПРИВЕДЕНИЕ ВНИЗ | |
|             WriteLine("{0} {1} {2} {3} \n{4} {5}", | |
|                 vo, vverh.Name, vniz.Name, vniz.Color, vverh == vniz, vverh == vod); | |
|             Otstup(); | |
|  | |
|  | |
|             Vodka vodkatemp = new Vodka(); | |
|             Beer beertemp = vodkatemp as Beer;                                   //НЕУДАЧНОЕ ПРИВЕДЕНИЕ ВНИ3 С ПОМОЩЬЮ AS | |
|             if (beertemp == null) WriteLine("null"); | |
|  | |
|             Beer beertemp2 = new Beer { Name = "Beertemp2" }; | |
|             Vodka vodkatemp2 = beertemp2; | |
|             Beer beertempo = vodkatemp2 as Beer;                                //УДАЧНОЕ ПРИВЕДЕНИЕ ВНИЗ | |
|             WriteLine("{0} {1} {2}\n", beertempo.Name, beertemp2.Name = "name", beertempo.Name); | |
|  | |
|             if (vodkatemp is Beer) | |
|                 WriteLine("Complete {0}", ((Beer)vodkatemp).Color); | |
|             else WriteLine("Not complete"); | |
|             Otstup(); | |
|  | |
|  | |
|             Vodka vverh2 = beer2;                                               //ВИРТУАЛЬНОЕ СВОЙСТВО И ПЕРЕОПРЕДЕЛНИЕ                          | |
|             WriteLine("{0} {1} {2}\n", vodka.Virtualka, beer1.Virtualka, vverh2.Virtualka); | |
|  | |
|             Abs2 abstr = new Abs2(5, 10);                                       //АБСТРАКТНОЕ СВОЙСТВО И ПЕРЕОПРЕДЕЛЕНИЕ | |
|             WriteLine("{0}", abstr.abs); | |
|             Otstup(); | |
|  | |
|  | |
|             Overrider overrider = new Overrider(); | |
|             Hider hider = new Hider(); | |
|             BaseClass b1 = overrider; | |
|             BaseClass b2 = hider; | |
|             WriteLine("Overrider: {0} Вверх от overrider: {1} \nHider: {2} Вверх от hider: {3}", overrider.Foo(), b1.Foo(), hider.Foo(), b2.Foo()); | |
|             Otstup(); | |
|  | |
|  | |
|             WriteLine("{0} {1}", vodka.Virtu, beer1.Virtu); | |
|             Subclass sb = new Subclass(10); | |
|             WriteLine(sb.X); | |
|             Otstup(); | |
|  | |
|             WriteLine("{0} {1}", Metod(beer1), Metod(vodka)); | |
|             Otstup(); | |
|              | |
|             Stack stack = new Stack(); | |
|             stack.Push(12); | |
|             stack.Push('g'); | |
|             stack.Push("стэк"); | |
|             int stk = 10; | |
|             stack.Push(stk);                                //УПАКОВКА | |
|             string stackstring = (string)stack.Pop(2);      //РАСПАКОВКА | |
|             int stackint = (int)stack.Pop(0); | |
|             stk = 20;                                       //ЗНАЧЕНИЕ В СТЭКЕ ЭТО КОПИЯ ЗНАЧЕНИЯ ПОЛЯ | |
|             WriteLine("{0} {1} {2} {3} \n{4} {5}\n{6} {7}\n{8} {9}", | |
|                 stack.Pop(), stack.Pop(), stack.Pop(), stack.Pop(1), stackstring, stackint, stk, stack.Pop(3), stack.Pop(3).GetType().Name, typeof(Stack)); | |
|             Otstup(); | |
|  | |
|             Point p1 = new Point();                         //СТРУКТУРЫ | |
|             Point p2 = new Point(1, 1); | |
|             Point p3 = new Point(y: 1, x: 2); | |
|             p1.ToString(); | |
|  | |
|  | |
|             Class2 class2 = new Class2();                   //ДОСТУП К ПОЛЯМ | |
|             Class1 class1 = new Class1();            | |
|             class1.ToString();                              //PRIVATE | |
|             class2.x.ToString();                            //INTERNAL | |
|  | |
|  | |
|             IEnumerator1 e = new CountDown();                                    //ИНТЕРФЕЙСЫ | |
|             while (e.MoveNext()) | |
|                 Write("{0} ", e.Current); | |
|             WriteLine(); | |
|  | |
|             ClassI classI = new ClassI(); | |
|             classI.Foo(); | |
|             ((I1)classI).Foo(); | |
|             ((I2)classI).Foo(); | |
|             WriteLine(); | |
|  | |
|             TexBox t = new TexBox(); | |
|             RichTextBox r = new RichTextBox(); | |
|             WriteLine("Наследование только суперкласса:"); | |
|             t.Udo(); | |
|             ((IUndo)t).Udo(); | |
|             r.Udo(); | |
|             ((TexBox)r).Udo(); | |
|             ((IUndo)r).Udo(); | |
|             WriteLine("\nНаследование суперкласса и интерфейса"); | |
|             t.Undo(); | |
|             ((IUndo)t).Undo(); | |
|             r.Undo(); | |
|             ((TexBox)r).Undo(); | |
|             ((IUndo)r).Undo(); | |
|             Otstup(); | |
|  | |
|              | |
|             int hond = (int)Cars.Honda; | |
|             Cars honda = (Cars)hond; | |
|             bool h = (int)honda == 3; | |
|             CarsAsian asi = (CarsAsian)Cars.Mitsu; | |
|             asi.ToString(); | |
|             Car asian = Car.Mitsu | Car.Toyota; | |
|             if ((asian & Car.Ford) != 0) | |
|                 WriteLine("Форд есть"); | |
|             else WriteLine("Форда нет"); | |
|  | |
|             if ((asian & Car.Toyota) != 0) | |
|                 WriteLine("Тойота есть"); | |
|             else WriteLine("Тойоты нет"); | |
|  | |
|             Car hk = Car.Toyota; | |
|             hk |= Car.Mitsu; | |
|             WriteLine(hk == asian); | |
|             Otstup(); | |
|  | |
|             for(int i = 0; i <= 16; i++) | |
|             { | |
|                 Car cc = (Car)i; | |
|                 WriteLine("{0} {1} {2}", i, IsFlagDefined(cc), cc);              | |
|             } | |
|             int blue = (int)TopLevel.Color.blue; | |
|             blue.ToString(); | |
|             Otstup(); | |
|  | |
|             var stack2 = new Stack<int>(); | |
|             stack2.Push(10); | |
|             stack2.Push(20); | |
|             int twen = stack2.Pop(); | |
|             int ten = stack2.Pop(); | |
|             WriteLine("ten: {0}, twen: {1}", ten, twen); | |
|  | |
|  | |
|             Swap(ref ten, ref twen); | |
|             WriteLine("ten: {0}, twen: {1}", ten, twen); | |
|             Car Ford = Car.Ford; | |
|             Car Mazda = Car.Mazda; | |
|             Swap(ref Ford, ref Mazda); | |
|             WriteLine("Ford: {0}, Mazda: {1}", Ford, Mazda); | |
|             Otstup(); | |
|  | |
|             WriteLine(Max(20, 30)); | |
|             Otstup(); | |
|  | |
|             Stack2<Bear> bears = new Stack2<Bear>(); | |
|             //   Stack<Animal> animals = bears;  ОШИБКА | |
|             IPoppable<Animal> animals = bears; | |
|             IPushable<Animal> animalsp = new Stack2<Animal>(); | |
|             IPushable<Bear> bearsp = animalsp; | |
|  | |
|             var objectComparer = Comparer<object>.Default; | |
|             IComparer<string> comparer = objectComparer; | |
|             int result = comparer.Compare("Bret", "Breta"); | |
|             WriteLine(result); | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|             ReadKey(); | |
|         } | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|         //МЕТОДЫ И КЛАССЫ | |
|  | |
|  | |
|  | |
|  | |
|         internal class CountDown : IEnumerator1 | |
|         { | |
|             int count; | |
|             internal CountDown (int count = 10) | |
|             { | |
|                 this.count = count; | |
|             } | |
|             public bool MoveNext() => count-- > 0; | |
|             public object Current => count; | |
|             public void Reset() { throw new NotSupportedException(); } | |
|         } | |
|  | |
|         class Class1 | |
|         { | |
|             int x; | |
|             public Class1() { } | |
|         } | |
|  | |
|         public class Class2 | |
|         { | |
|             internal int x; | |
|             public int y; | |
|             public Class2() { }             | |
|         } | |
|  | |
|         static void Otstup() | |
|         { | |
|             WriteLine("\n");             | |
|         } | |
|  | |
|         public class Wine | |
|         { | |
|             public string Name; | |
|             public int Price; | |
|             public int Year; | |
|             public Wine (string name, int price) { Price = price; Name = name; } | |
|             public Wine (string name, int price, int year) : this(name, price) { Year = year; }             | |
|  | |
|             public void Vino() | |
|             { | |
|                 if (Year != 0) | |
|                     WriteLine("Название: {0}. Цена: {1} р. {2} год", Name, Price, Year); | |
|                 else | |
|                     WriteLine("Название: {0}. Цена: {1} р. Год неизвестен", Name, Price); | |
|             } | |
|         } | |
|  | |
|         public class Vodka | |
|         { | |
|             public int chislo = 1; | |
|             public string Name; | |
|             public bool good; | |
|             public int Capacity; | |
|             public virtual int Virtualka => 0; | |
|             public virtual string Virtu => chislo.ToString(); | |
|  | |
|             public Vodka() { } | |
|             public Vodka(string n) { Name = n; } | |
|  | |
|             public void Voda() | |
|             { | |
|                 WriteLine("Название: {0}. Объём: {1}л. Качественная: {2} ", Name, Capacity, good); | |
|             } | |
|         } | |
|  | |
|         public class Beer : Vodka                   //НАСЛЕДОВАНИЕ | |
|         { | |
|             public new int chislo = 2; | |
|             public string Color; | |
|             public sealed override int Virtualka => Capacity + 13000; //ПЕРЕОПРЕДЕЛЕНИЕ ВИРТУАЛЬНОГО СВОЙСТВА | |
|             public override string Virtu => base.Virtu + chislo.ToString(); | |
|              | |
|             public void beer() | |
|             { | |
|                 WriteLine("Название: {0}. Объём: {1}л. Цвет: {2}.", Name, Capacity, Color); | |
|             } | |
|  | |
|         } | |
|  | |
|         public static void Imya (Vodka vodka, Wine wine)       //ПОЛИМОРФИЗМ | |
|         { | |
|             WriteLine(vodka.Name + " " + wine.Name); | |
|         } | |
|  | |
|         public class neznau | |
|         { | |
|             public int znach; | |
|             public int znachenie | |
|             { | |
|                 get { return znach + 2; } | |
|                 set { znach = value; } | |
|             } | |
|  | |
|             public int DlyaChteniya => (int)Math.Pow(znachenie, 2); | |
|             public int DlyaChteniya2 { get; } = 100; | |
|  | |
|  | |
|             public neznau(int a) | |
|             { | |
|                 znach = a; | |
|             } | |
|  | |
|  | |
|             public int avto { get; set; } = 123; | |
|         } | |
|  | |
|         public class Sentence | |
|         { | |
|             public string[] words = "Это какое-то предложение. Что же делать?".Split(); | |
|             public int Count = 6; | |
|  | |
|         //  public string this[int wordNum] => words[wordNum];   - ТОЛЬКО ДЛЯ ЧТЕНИЯ | |
|             public string this [int wordNum]  | |
|             { | |
|                 get { return words[wordNum]; } | |
|                 set { words[wordNum] = value; } | |
|             } | |
|  | |
|             public string this[int wordNum, string s] | |
|             { | |
|                 get { return words[wordNum] + s; } | |
|                 set { words[wordNum] = value; } | |
|             } | |
|         } | |
|  | |
|         public class pole1 | |
|         { | |
|             public static pole1 Instance = new pole1(); | |
|             public static int x = 3; | |
|             pole1() { Write(x + " pervoe. "); } | |
|         } | |
|  | |
|         public class pole2 | |
|         { | |
|             public static int x = 3; | |
|             public static pole2 Instance = new pole2(); | |
|             pole2() { Write(x + " pervoe. "); } | |
|         } | |
|  | |
|         public abstract class Abs1          //Абстрактный класс 3апрещает создавать экземпляры своего класса | |
|         {                                   //Такой класс может только наследоваться | |
|             public abstract int abs { get;  } | |
|         } | |
|  | |
|         public class Abs2 : Abs1 | |
|         { | |
|             public int a, b; | |
|             public Abs2 (int a, int b) | |
|             { | |
|                 this.a = a; | |
|                 this.b = b; | |
|             } | |
|             public override int abs => a*b; //Абстрактное свойство не может вызываться в абстрактном классе | |
|         } | |
|  | |
|  | |
|         public class BaseClass | |
|         { | |
|             public virtual string Foo() => "BaseClass.Foo"; | |
|         } | |
|  | |
|         public class Overrider : BaseClass | |
|         { | |
|             public override string Foo() => "Overrider.Foo"; | |
|         } | |
|  | |
|         public class Hider : BaseClass | |
|         { | |
|             public new string Foo() => "Hider.Foo"; | |
|         } | |
|  | |
|  | |
|         public class Baza | |
|         { | |
|             public int X; | |
|             public Baza (int x) | |
|             { | |
|                 X = x; | |
|             } | |
|         } | |
|  | |
|         public class Subclass : Baza | |
|         { | |
|             public Subclass(int x) : base(x) { }                           //НАСЛЕДОВАНИЕ КОНСТРУКТОРА | |
|         } | |
|  | |
|         public static string Metod(Vodka v) => v.Name; | |
|         public static string Metod(Beer b) => b.Color;  | |
|  | |
|  | |
|         public class Stack                                                //СТЭК | |
|         { | |
|             int position; | |
|             object[] data = new object[10]; | |
|             public void Push(object obj) { data[position++] = obj; } | |
|             public object Pop(int i) => data[i]; | |
|             public object Pop() => data[--position]; | |
|         } | |
|  | |
|         public struct Point | |
|         { | |
|             int x, y; | |
|             public Point(int x, int y) { this.x = x; this.y = y; } | |
|         } | |
|  | |
|         public interface IEnumerator1                                       //ИНТЕРФЕЙСЫ | |
|         { | |
|             bool MoveNext(); | |
|             object Current { get; } | |
|             void Reset(); | |
|         } | |
|  | |
|         internal class CountD : IEnumerator | |
|         { | |
|             int count; | |
|             internal CountD(int count = 10) | |
|             { | |
|                 this.count = count; | |
|             } | |
|             public object Current => count; | |
|             public bool MoveNext() => count-- > 0; | |
|             public void Reset() { throw new NotSupportedException(); } | |
|         } | |
|  | |
|         interface I1 | |
|         { | |
|             void Foo(); | |
|         } | |
|  | |
|         interface I2 | |
|         { | |
|             int Foo(); | |
|         } | |
|  | |
|         public class ClassI : I1, I2 | |
|         { | |
|             public int Foo() { WriteLine("Foo из I2"); return 42; } | |
|             void I1.Foo() { WriteLine("Foo из I1"); } | |
|         } | |
|  | |
|         interface IUndo | |
|         { | |
|             void Undo(); | |
|             void Udo(); | |
|         } | |
|  | |
|         public class TexBox : IUndo | |
|         { | |
|             public virtual void Undo() => WriteLine("TextBox.Undo"); | |
|             public void Udo() => WriteLine("TextBox.Udo"); | |
|         } | |
|  | |
|         public class RichTextBox : TexBox | |
|         { | |
|             public override void Undo() => WriteLine("RichTextBox.Undo"); | |
|             public new void Udo() => WriteLine("RichTextBox.Udo"); | |
|         } | |
|  | |
|         public enum Cars { Ford, Mers, Toyota, Honda, Mitsu, Kia, Reno}         //ПЕРЕЧИСЛЕНИЯ | |
|         public enum Cars2 { Ford = 1, Mers = 2, Toyota, Honda = 10, Mitsu, Kia, Reno }        | |
|         //public enum Cars2 : byte { Ford = 1, Mers = 2, Toyota=3, Honda = 10, Mitsu=11, Kia=12, Reno=12 } - эквивалентно предыдущей строке | |
|         public enum CarsAsian { Toyota = Cars.Toyota, Honda = Cars.Honda, Mizu} | |
|  | |
|         [Flags] | |
|         public enum Car { None = 0, Mitsu = 1, Toyota = 2, Ford = 4, Mazda = 8 } | |
|  | |
|  | |
|          | |
|         public static bool IsFlagDefined(Enum e)                              //ПРОВЕРКА НА СООТВЕТСТВИЕ ENUM | |
|         { | |
|             decimal d; | |
|             return !decimal.TryParse(e.ToString(), out d); | |
|         }  | |
|  | |
|  | |
|         public static class TopLevel | |
|         { | |
|             public enum Color { green, blue, red} | |
|         } | |
|  | |
|         public class Animal { public string Name; } | |
|         public class Bear : Animal { } | |
|         public class Camel : Animal { } | |
|  | |
|         public class Stack<T>                                               //ОБОБЩЕННЫЕ ОБЪЕКТЫ | |
|         { | |
|             int position; | |
|             T[] data = new T[100]; | |
|             public void Push(T obj) { data[position++] = obj; } | |
|             public object Pop(int i) => data[i]; | |
|             public T Pop() => data[--position]; | |
|             public T this [int index] => data[index];                       //ИНДЕКС В ОБОБЩЕННОМ ТИПЕ | |
|         } | |
|  | |
|         public class Stack2<T> : IPoppable<T>, IPushable<T>                                                | |
|         { | |
|             int position; | |
|             T[] data = new T[100]; | |
|             public void Push(T obj) { data[position++] = obj; } | |
|             public object Pop(int i) => data[i]; | |
|             public T Pop() => data[--position]; | |
|             public T this[int index] => data[index];                        | |
|         } | |
|  | |
|         public interface IPoppable<out T> { T Pop(); } | |
|         public interface IPushable<in T> { void Push(T obj); } | |
|  | |
|         public static void Swap<T> (ref T x, ref T y) | |
|         { | |
|             T temp = x; | |
|             x = y; | |
|             y = temp; | |
|         } | |
|  | |
|         static T Max <T> (T a, T b) where T: IComparable<T> | |
|         { | |
|             return a.CompareTo(b) > 0 ? a : b; | |
|         } | |
|     } | |
| }
 | |
| 
 |