В C# 9.0 и выше вы можете использовать требуемые поля (`required`) в сочетании с конструкторами для упрощения инициализации объектов. Вы можете сделать так, чтобы обязательные поля были инициализированы через конструктор, что позволит избежать использования инициализаторов объектов. Вот пример, как это можно сделать:
```csharp
public class Person
{
public required string User { get; init; }
public string RatingOfUser { get; init; }
public DateTime Date { get; init; }
// Конструктор, где можно установить обязательные поля
public Person(string user, string ratingOfUser, DateTime date)
{
User = user;
RatingOfUser = ratingOfUser;
Date = date;
}
}
```
Теперь вы можете инициализировать объект `Person` таким образом:
```csharp
var person = new Person("John Smith", "Excellent", DateTime.Today);
```
Таким образом, вы используете конструктор для обязательного поля `User` и устанавливаете остальные поля через параметры. Это делает код более читаемым и кратким, так как все обязательные поля задаются в одном месте – в конструкторе.
Если вы хотите оставить возможность инициализировать объект также с помощью инициализатора, но хотите минимизировать количество публичных полей, вы можете использовать инициализаторы для необязательных свойств, а обязательные поля оставлять только в конструкторе. Например:
```csharp
public class Person
{
public required string User { get; }
public string RatingOfUser { get; init; }
public DateTime Date { get; init; }
public Person(string user)
{
User = user;
}
}
```
Теперь вы можете использовать конструкцию:
```csharp
var person = new Person("John Smith")
{
RatingOfUser = "Excellent",
Date = DateTime.Today
};
```
Таким образом, вы сможете легко инициализировать как обязательные, так и необязательные свойства.