public Point : this(PointColorEnum.BloodRed){ }
public void DisplayStats
{
Console.WriteLine("[{0}, {1}]", X, Y);
Console.WriteLine("Point is {0}", Color);
}
}
Посредством нового конструктора теперь можно создавать точку золотистого цвета (в позиции (90, 20)):
// Вызов более интересного специального конструктора
// с помощью синтаксиса инициализации.
Point goldPoint = new Point(PointColorEnum.Gold){ X = 90, Y = 20 };
goldPoint.DisplayStats;
Инициализация данных с помощью синтаксиса инициализации
Как кратко упоминалось ранее в главе (и будет подробно обсуждаться в главе 6), отношение "имеет" позволяет формировать новые классы, определяя переменные-члены существующих классов. Например, пусть определен класс Rectangle
Point. Так как автоматические свойства устанавливают все переменные с типами классов в null, новый класс будет реализован с применением "традиционного" синтаксиса свойств:using System;
namespace ObjectInitializers
{
class Rectangle
{
private Point topLeft = new Point;
private Point bottomRight = new Point;
public Point TopLeft
{
get { return topLeft; }
set { topLeft = value; }
}
public Point BottomRight
{
get { return bottomRight; }
set { bottomRight = value; }
}
public void DisplayStats
{
Console.WriteLine("[TopLeft: {0}, {1}, {2} BottomRight: {3},
{4}, {5}]",
topLeft.X, topLeft.Y, topLeft.Color,
bottomRight.X, bottomRight.Y, bottomRight.Color);
}
}
}
С помощью синтаксиса инициализации объектов можно было бы создать новую переменную Rectangle
Point следующим образом:// Создать и инициализировать объект Rectangle.
Rectangle myRect = new Rectangle
{
TopLeft = new Point { X = 10, Y = 10 },
BottomRight = new Point { X = 200, Y = 200}
};
Преимущество синтаксиса инициализации объектов в том, что он по существу сокращает объем вводимого кода (предполагая отсутствие подходящего конструктора). Вот как выглядит традиционный подход к созданию похожего экземпляра Rectangle
// Традиционный подход.
Rectangle r = new Rectangle;
Point p1 = new Point;
p1.X = 10;
p1.Y = 10;
r.TopLeft = p1;
Point p2 = new Point;
p2.X = 200;
p2.Y = 200;
r.BottomRight = p2;
Поначалу синтаксис инициализации объектов может показаться несколько непривычным, но как только вы освоитесь с кодом, то будете приятно поражены тем, насколько быстро и с минимальными усилиями можно устанавливать состояние нового объекта.
Работа с константными полями данных и полями данных, допускающими только чтение
Иногда требуется свойство, которое вы вообще не хотите изменять либо с момента компиляции, либо с момента его установки во время конструирования, также известное как
Понятие константных полей данных
Язык C# предлагает ключевое слово const
Предположим, что вы строите обслуживающий класс по имени MyMathClass
? (для простоты будем считать его равным 3.14). Начните с создания нового проекта консольного приложения по имени ConstData и добавьте к нему файл класса MyMathClass.cs. Учитывая, что давать возможность другим разработчикам изменять это значение в коде нежелательно, число ? можно смоделировать с помощью следующей константы:Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT