Обязательные элементы должны быть не менее видимыми, чем содержащие их типы
Что значит обязательные? У вас в примере есть это:
public required DDD Dddd { get; internal init; }
Что это значит? Допустим, у вас класс
public class QQQ
, а внутри него есть
обязательное поле Dddd. Допустим, вы хотите создать объект этого типа из другого проекта. Как вы это сделаете? Ответ -
НИКАК.
Почему? Потому что систему будет требовать инициализировать поле Dddd, но вы его
не видете, т.к. оно
internal
. На этом моменте у вас просто отвалится вся логика программы та и всей платформы .NET. По этому такие вещи просто запрещены
Почему этот кусок будет работать?
internal class QQQ
{
public required DDD Dddd { get; internal init; }
}
Потому что в любом месте видимости класса QQQ вы сможете инициализировать обязательное поле, которое имеет бо'льшую область видимости
Вот
тут отличная документация по модификаторам доступа, а вот
тут видео об области видимости