В чем разница между:
namespace Library{
class File{
//code inside it
}
}
и
namespace Library{
public class File{
//code inside it
}
}
Итак, какова будет разница между открытым классом и классом?
В чем разница между:
namespace Library{
class File{
//code inside it
}
}
и
namespace Library{
public class File{
//code inside it
}
}
Итак, какова будет разница между открытым классом и классом?
Без указания public класс неявно internal. Это означает, что класс отображается только внутри одной сборки. Когда вы укажете public, класс будет виден вне сборки.
Также разрешено явно указать модификатор internal:
internal class Foo {}
Первый эквивалентен:
namespace Library{
internal class File{
//code inside it
}
}
Все видимости по умолчанию для наименее видимых - private для членов class es и struct (методы, свойства, поля, вложенные классы и вложенные enum s) и internal для прямых членов namespace s, потому что они не могут быть частными.
internal означает, что другой код в той же сборке может видеть его, но ничего другого (запрет сборки узлов и использование отражения).
Это имеет смысл по двум причинам:
public, вы можете случайно сделать что-то публичное, которое должно быть закрытым или внутренним. Если вы случайно сделаете что-то недостаточно видимым, вы получите очевидную ошибку компиляции и исправьте ее. Если вы случайно делаете что-то слишком видимым, вы вводите недостаток в свой код, который не будет помечен как ошибка, и который будет изменяться позже, чтобы исправить.Часто считается, что лучший стиль должен быть явным с вашими модификаторами доступа, чтобы быть более четкими в коде, только то, что происходит.
По умолчанию все class es (и все типы в этом случае) internal, поэтому для того, чтобы они были доступны извне (без таких вещей, как InternalsVisibleToAttribute), вы должны сделать их public явно.