2014-10-28 2 views
0

Я просто пытаюсь использовать Internal в моем BaseClass, MSDN сказал мне, что внутренний класс не может быть Instantiate в другом методе или класс и вызвать ошибку, но почему я все еще могу Инстанцировать в BaseClass в методе Main() ?Как внутренний спецификатор работает

TestAccess.cs

internal class BaseClass 
{ 
    public static int intM = 0; 
} 

class TestAccess 
{ 
    static void Main() 
    { 
     BaseClass myBase = new BaseClass(); // CS0122 This should be an error because BaseClass is Internal class. 
    } 
} 

ответ

2

Вы не поняли MSDN. internal означает, что класс виден только в сборке, которая содержит его. Пример, который вы опубликовали, абсолютно корректен.

MSDN говорит,

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

(курсив мой)

+0

Значит, мне нужны два отдельных проекта для создания внутреннего спецификатора? –

+1

Если вы хотите ограничить видимость на основе сборки, содержащей ее, тогда да. –

1

Вы недопонимание каких intenral средств. internal элементы могут быть доступны из любого файла в той же сборке (это проект или DLL). Наличие двух классов в одном файле, определенно, в одной и той же сборке.

От MSDN:

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

1

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

Смежные вопросы