Ответ 1
Область internal class
переопределяет область конструктора public MyClass()
, создавая конструктор internal
.
Использование public
в конструкторе упрощает обновление класса до public
позже, но смущает намерение. Я этого не делаю.
Изменить 3: я пропустил часть вашего вопроса. Это все равно прекрасно, если ваш класс вложен. Вложенность не может иметь никакого значения, даже если она вложен в частный класс в открытом классе в... (см. Спецификация языка С# - 3.5.2 Домены доступности).
EDIT: И, если я помню, если ctor internal
, он не может использоваться как общий тип, где существует ограничение, требующее where T : new()
, для этого потребуется public
конструктор (ссылка спецификация языка С# (версия 4.0) - 4.4.3 Связанные и несвязанные типы).
Изменить 2: Пример кода, демонстрирующий выше
class Program
{
internal class InternalClass {
internal InternalClass() { }
}
internal class InternalClassPublicCtor {
public InternalClassPublicCtor() { }
}
internal class GenericClass<T>
where T : new() {}
static void Main(string[] args) {
GenericClass<InternalClass> doesNotCompile = new GenericClass<InternalClass>();
GenericClass<InternalClassPublicCtor> doesCompile = new GenericClass<InternalClassPublicCtor>();
}
}