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

Ошибка "Элементы, определенные в пространстве имен, не могут быть явно объявлены как закрытые, защищенные или защищенные внутренние"

Я попытался сделать класс приватным и получил эту ошибку . Элементы, определенные в пространстве имен, не могут быть явно объявлены как закрытые, защищенные или защищенные внутренние "

У меня есть смысл, но я хочу спросить, почему это не разрешено? Все ли модификации доступа не применимы к классу? Почему я не могу сделать класс приватным, защищенным или защищенным внутренним?

4b9b3361

Ответ 1

Поскольку private означает, что элемент доступен только в содержащем классе. Поскольку класс верхнего уровня не имеет класса, содержащего его, он не может быть закрытым (или защищенным). (Тем не менее, внутренние или публичные действительные модификаторы).

Что бы вы хотели иметь в виду для класса верхнего уровня?

Конечно, все модификаторы применяются к вложенным классам, то есть к классу, определенному в другом классе.

Ответ 2

Вы можете использовать только public или internal на уровне пространства имен

Ответ 3

Как сказал Abatonime, вы можете использовать только public или internal на уровне пространства имен.
private, protected или protected internal можно использовать только на уровне класса.

Это работает

namespace X
{
    class A
    {
        // class code here

        private class B // this class is an inner class
        {
            // class code here
        }
    }
}

Это не будет

namespace X
{
    class A
    {
        // class code here
    }

    private class B // this is a class inside a namespace
    {
        // class code here
    }
}

Ответ 4

Потому что это не имеет смысла. Нет способа доступа к защищенным или закрытым классам, определенным на уровне пространства имен, только как вложенные классы.

Ответ 5

Только вложенные классы могут быть объявлены как закрытые. Не вложенные классы могут быть только общедоступными или внутренними (неявными без модификаторов)

Ответ 6

У меня была такая же проблема, потому что я создавал пользовательскую DLL и хотел, чтобы определенные классы были видимыми для приложения, использующего DLL. Поэтому я просто удаляю модификатор полностью для классов, которые я хотел бы быть частными (в пределах конкретных пространств имен). Классы оставались доступными для других классов в пределах одного пространства имен в DLL, но не отображались в Intellisense в вызывающем приложении. Нет необходимости в вложенных классах. Единственное объяснение, о котором я могу думать, это сообщение об ошибке, которое не может "явно" объявлять частным... в нем ничего не говорится о неявно.

namespace SmartCardAuthentication
{
  class SmartCardIdentity : IIdentity
  {
    private string _firstName;
    private string _lastName;
    private string _middleInitial;

        ....
   }
}

В приведенном выше примере код класса "SmartCardIdentity" доступен для другого класса в том же пространстве имен, но недоступен для вызывающего приложения, когда этот класс загружается в DLL. Я еще не протестировал его (например, видимость от класса в другом пространстве имен в DLL.).

Ответ 7

Доступность типов верхнего уровня по умолчанию - internal.

Доступность элементов класса и структуры по умолчанию private.

Единственная возможная доступность элементов интерфейса и перечисления - public.

Итак, класс по умолчанию private, и если вы хотите получить к нему доступ, перед этим нужно поставить public.

Ответ 8

При определении класса применимы только общедоступные и внутренние. Если модификатор доступа не задан до того, как его значение по умолчанию является внутренним.

обратитесь к MSDN - [https://msdn.microsoft.com/en-us/library/8fd16xs0(v=vs.90).aspx]

Ответ 9

В реальном мире мы сосредоточены на видимом объекте Как только объект виден, мы говорим о сфере действия объекта

пример в реальном мире

Если вы идете по улице, вы видите дома в колонии колония имеет дома. Если колония защищена, никто не может видеть дома Считается, что в колонии нет домов, нет

В программировании

Если мы сделаем класс как частный/защищенный на верхнем уровне никто не знает об этом

это присутствует в сборке?

поправьте меня пожалуйста если я вне поля зрения