Мой C # Private Class доступен в любом месте внутри DLL, тогда какая польза от внутреннего? - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть проект ClassLibrary на C #, и все мои «частные классы» (в разных пространствах имен) доступны друг другу в одной сборке (проекте).

Class1.cs
----------------------------
namespace MyClass1App
{
   private class Class1{}
}


Class2.cs
----------------------------
namespace MyClass2App
{
   private class Class2{}
}

Теперь Class1 () может получить доступ исоздать экземпляр класса Class2 () [подобно ... new MyClass2App.Class2 ()].и да, эти классы (Class1 () и Class2 ()) недоступны вне сборки.Такое же поведение, когда эти классы сделаны как «Внутренние».Может ли кто-нибудь помочь мне понять, каково фактическое использование / различие между «частными» и «внутренними» спецификаторами доступа при применении на уровне класса?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 30 декабря 2010

Вы не должны иметь возможность объявлять класс как private на уровне пространства имен. Вы можете иметь только закрытый класс, если он встроен в другой класс.

Я получаю сообщение об ошибке, если пытаюсь сделать это:

namespace MyApp
{
    private class Class1
    {
    }
}

Это сообщение об ошибке:

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

3 голосов
/ 30 декабря 2010

alt text

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

Вложенные классы могут иметь все типы модификаторов доступа.

1 голос
/ 30 декабря 2010

Модификаторы доступа (Руководство по программированию в C #)

Элементы класса или структуры могут быть объявлены с одним из пяти типов доступа.Они могут быть публичными или внутренними, как классы и сами структуры.Член класса может быть объявлен как защищенный с помощью ключевого слова protected, что означает, что только производные типы, использующие класс в качестве базы, могут получить доступ к члену.Комбинируя защищенные и внутренние ключевые слова, член класса может быть помечен как защищенный внутренний - доступ к этому члену могут получить только производные типы или типы в одной сборке.Наконец, член класса или структуры может быть объявлен как закрытый с помощью ключевого слова private, указывающего, что только классу или структуре, объявляющей член, разрешен доступ к этому члену.

Повторяющийся вопрос: Модификаторы внутреннего и частного доступа

...