Структуры

Пред тем, как мы погрузимся в методы, инкапсуляция и полиморфизм познакомимся с понятием структур. Это простой способ создания составных сущностей, описанных несколькими свойствами.

class Program
{
struct Point
{
public int x;
public int y;
}
class Rect
{
public Point topLeft;
public int width;
public int height;
}
static void Main(string[] args)
{
Point pointA = new Point();
pointA.x = 1;
Console.WriteLine(ToString(point));
Point pointB = Move(pointA, 3);
Console.WriteLine(ToString(point));
Rect rect = new Rect();
rect.width = 2;
rect.height = 1;
Print(rect);
Scale(rect, 3);
Print(rect);
}
static Point Move(Point point, int offset)
{
Point p = new Point();
p.x = point.x + offset;
p.y = point.y + offset;
return p;
}
static string ToString(Point point)
{
return $"(x: {point.x}, y: {point.y})";
}
static void Print(Rect rect)
{
Console.WriteLine($"[{ToString(rect.topLeft)}; {rect.width} x {rect.height}]");
}
static void Scale(Rect rect, int factor)
{
rect.width = rect.width * factor;
rect.height = rect.height * factor;
}
}
note

В C#, в отличии от Java, есть выделенный механизм описания структур. Эти пользовательские типы являються значимыми, в отличии от классов (ссылочных). Экземпляры структуры передаются в методы по значению. То-есть, метод получит копию структуры, а не ссылку на оригинальный экземпляр.

class or struct

В большинстве случаем вам подойдет class. При каких условия все же стоит использовать struct читайте в руководстве по дизайну типов.

💻 Task struct#

Реализуйте метод для печати в консоль структуры типа Task в следующем виде:

1. [x] Implement task output (Aug 25)
Use fields: title, desc, done, dueDate
0 of 5
note

Обратите внимание на отступы и форматирование. Они должны соответствовать примеру.

tip

В выполнении задания вам пригодится техника интерполяции строк для формирования вывода и тип DateTime для описание срока выполнения задачи.