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

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;
}
}
}