public MyMathClass ()
{
PI = 3.14;
}
}
Любая попытка выполнить присваивание полю, помеченному как readonly
class MyMathClass
{
public readonly double PI;
public MyMathClass ()
{
PI = 3.14;
}
// Ошибка!
public void ChangePI()
{ PI = 3.14444;}
}
Понятие статических полей, допускающих только чтение
В отличие от константных полей поля, допускающие только чтение, не являются неявно статическими. Таким образом, если необходимо предоставить доступ к PI
static
. Если значение статического поля только для чтения известно на этапе компиляции, тогда начальное присваивание выглядит очень похожим на такое присваивание в случае константы (однако в этой ситуации проще применить ключевое слово const
, потому что поле данных присваивается в момент его объявления):class MyMathClass
{
public static readonly double PI = 3.14;
}
// Program.cs
Console.WriteLine("***** Fun with Const *****");
Console.WriteLine("The value of PI is: {0}", MyMathClass.PI);
Console.ReadLine();
Тем не менее, если значение статического поля только для чтения не известно вплоть до времени выполнения, то должен использоваться статический конструктор, как было описано ранее в главе:
class MyMathClass
{
public static readonly double PI;
static MyMathClass()
{ PI = 3.14; }
}
Понятие частичных классов
При работе с классами важно понимать роль ключевого слова partial
partial
позволяет разбить одиночный класс на множество файлов кода. Когда вы создаете шаблонные классы Entity Framework Core из базы данных, то все полученные в результате классы будут частичными. Таким образом, любой код, который вы написали для дополнения этих файлов, не будет перезаписан при условии, что код находится в отдельных файлах классов, помеченных с помощью ключевого слова partial
. Еще одна причина связана с тем, что ваш класс может со временем разрастись и стать трудным в управлении, и в качестве промежуточного шага к его рефакторингу вы разбиваете код на части.В языке C# одиночный класс можно разносить по нескольким файлам кода для отделения стереотипного кода от более полезных (и сложных) членов. Чтобы ознакомиться с ситуацией, когда частичные классы могут быть удобными, загрузите ранее созданный проект EmployееАрр
Employee.cs
для редактирования. Как вы помните, этот единственный файл содержит код для всех аспектов класса:class Employee
{
// Поля данных
// Конструкторы
// Методы
// Свойства
}
С применением частичных классов вы могли бы перенести (скажем) свойства, конструкторы и поля данных в новый файл по имени Employee.Core.cs
partial
к текущему определению класса и вырезание кода, подлежащего помещению в новый файл:// Employee.cs
partial
{
// Методы
// Свойства
}
Далее предположив, что к проекту был добавлен новый файл класса, в него можно переместить поля данных и конструкторы с помощью простой операции вырезания и вставки. Кроме того, вы обязаны добавить ключевое слово partial
// Employee.Core.cs
partial
{
// Поля данных
// Свойства
}
На заметку!
Не забывайте, что каждый частичный класс должен быть помечен ключевым словомpartial
!После компиляции модифицированного проекта вы не должны заметить вообще никакой разницы. Вся идея, положенная в основу частичного класса, касается только стадии проектирования. Как только приложение скомпилировано, в сборке оказывается один целостный класс. Единственное требование при определении частичных классов связано с тем, что разные части должны иметь одно и то же имя класса и находиться внутри того же самого пространства имен .NET Core.
Использование записей (нововведение в версии 9.0)