Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.81 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ExamOOP
  8. {
  9.     class Program
  10.     {
  11.  
  12.         // интерфейс
  13.         interface IChangeCentre
  14.         {
  15.             void ChangeCentre(int n);
  16.         }
  17.         static void Action(IChangeCentre change, int n)
  18.         {
  19.             change.ChangeCentre(n);
  20.         }
  21.         class Circle : IChangeCentre
  22.         {
  23.             public double X { get; set; } // автореализуемое свойство - координата центра круга по оси X
  24.             public double Y { get; set; } // автореализуемое свойство - координата центра круга по оси Y
  25.             public double S { get; } // автореализуемое свойство - площадь круга (только для чтения)
  26.             private double r { get; set; } // приватное поле - радиус круга
  27.  
  28.             // делегат для площади
  29.             public delegate void SquareHandler(double square);
  30.             // событие для площади
  31.             public event SquareHandler eventSquare;
  32.  
  33.             // свойство для радиуса
  34.             public double R
  35.             {
  36.                 get
  37.                 {
  38.                     return this.r;
  39.                 }
  40.                 set
  41.                 {
  42.                     if (value > 0)
  43.                         this.r = value;
  44.                     else
  45.                         Console.WriteLine("Радиус не может быть 0 либо отрицательным");
  46.                 }
  47.             }
  48.  
  49.             // конструктор по умолчанию
  50.             public Circle()
  51.             {
  52.                 this.X = 0;
  53.                 this.Y = 0;
  54.                 this.R = 1;
  55.             }
  56.  
  57.             // конструктор с параметрами
  58.             public Circle(double x, double y, double r)
  59.             {
  60.                 this.X = x;
  61.                 this.Y = y;
  62.                 this.R = r;
  63.             }
  64.  
  65.             // проверка площади равной 1
  66.             public void SquareEqualOne(double square)
  67.             {
  68.                 if (square == 1)
  69.                 {
  70.                     if (eventSquare != null)
  71.                         Console.WriteLine("Площадь равна 1");
  72.                 }
  73.             }
  74.  
  75.             // метод для подсчета площади
  76.             public double Square()
  77.             {
  78.                 double s = Math.PI * Math.Pow(this.r, 2);
  79.                 // триггерим тут события
  80.                 eventSquare(s);
  81.                 return s;
  82.             }
  83.  
  84.             // перегруженный оператор умножения
  85.             public static double operator *(Circle c, int k)
  86.             {
  87.                 return c.R * k;
  88.             }
  89.             // перегруженный метод ToString()
  90.             public override string ToString()
  91.             {
  92.                 return "x = " + X + ", y = " + Y + ", r = " + R;
  93.             }
  94.             // реализация интерфейса
  95.             public void ChangeCentre(int n)
  96.             {
  97.                 this.X += n;
  98.                 this.Y += n;
  99.             }
  100.         }
  101.         static void Main(string[] args)
  102.         {
  103.             Circle c = new Circle(0, 0, 1/Math.Sqrt(Math.PI));
  104.             // Подписываемся на события
  105.             c.eventSquare += c.SquareEqualOne;
  106.             Console.WriteLine("Площадь: " + c.Square());
  107.             Console.WriteLine(c.ToString());
  108.             Action(c, 3);
  109.             Console.WriteLine(c.ToString());
  110.         }
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement