https://learn.microsoft.com/ru-ru/dotnet/csharp/la...
Объясните логику пункта
"Обязательные элементы должны быть не менее видимыми, чем содержащие их типы. Например, public класс не может содержать required поле , равное protected. Кроме того, обязательные свойства должны иметь методы задания (set или init методы доступа), которые по крайней мере так же видимы, как их содержащие типы. Элементы, которые недоступны, нельзя задать с помощью кода, создающего экземпляр."
а то я в упор не пойму, почему я не могу объявить проперти так:
public class QQQ
{
private QQQ()
{
}
public required DDD Dddd { get; internal init; }
}
если я хочу, чтобы проперти Dddd было видно для чтения во всех классах, но было доступно для инициализации только в той же сборке и при этом при создании объекта внутри той же сборки это проперти должно быть обязательно задано. При этом, чтобы невозможно было создать экземпляр сз другой сборки, конструктор отмечен как internal.
В общем, мне нужно, чтобы внутри сборки проперти ОБЯЗАТЕЛЬНО было инициализировано при создании объекта, и при этом чтобы вне сборки объект нельзя было создать, но можно было прочитать его поля - как это сделать?
UPDATE:
попробовал такой вариант (заменил public модификатор у класса на internal ), он не показывает ошибок и вроде бы позволяет делать то, что мне надо:
internal class QQQ
{
public required DDD Dddd { get; internal init; }
}
единственное, что мне не понятно - а разве само по себе наличие у internal класса пропертей с модификаторами public не является ошибкой? я че то думал, что раз класс internal, то объекты этого класса не должны быть видны снаружи сборки (но тогда и смысл public полей отсуствует) . Либо я не прав, и экземпляры internal классов могут быть видны снаружи сборки ?