Подтвердить что ты не робот

Класс против общедоступного класса

В чем разница между:

namespace Library{
    class File{
        //code inside it
   }
}

и

namespace Library{
   public class File{
       //code inside it
   }
}

Итак, какова будет разница между открытым классом и классом?

4b9b3361

Ответ 1

Без указания public класс неявно internal. Это означает, что класс отображается только внутри одной сборки. Когда вы укажете public, класс будет виден вне сборки.

Также разрешено явно указать модификатор internal:

internal class Foo {}

Ответ 2

Первый эквивалентен:

namespace Library{
    internal class File{
        //code inside it
   }
}

Все видимости по умолчанию для наименее видимых - private для членов class es и struct (методы, свойства, поля, вложенные классы и вложенные enum s) и internal для прямых членов namespace s, потому что они не могут быть частными.

internal означает, что другой код в той же сборке может видеть его, но ничего другого (запрет сборки узлов и использование отражения).

Это имеет смысл по двум причинам:

  • Вы должны сознательно заставлять вещи использовать наименьшую видимость в любом случае, чтобы укрепить вашу инкапсуляцию.
  • Если они по умолчанию не соответствуют public, вы можете случайно сделать что-то публичное, которое должно быть закрытым или внутренним. Если вы случайно сделаете что-то недостаточно видимым, вы получите очевидную ошибку компиляции и исправьте ее. Если вы случайно делаете что-то слишком видимым, вы вводите недостаток в свой код, который не будет помечен как ошибка, и который будет изменяться позже, чтобы исправить.

Часто считается, что лучший стиль должен быть явным с вашими модификаторами доступа, чтобы быть более четкими в коде, только то, что происходит.

Ответ 3

По умолчанию все class es (и все типы в этом случае) internal, поэтому для того, чтобы они были доступны извне (без таких вещей, как InternalsVisibleToAttribute), вы должны сделать их public явно.