В чем разница между:
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
явно.