«Непоследовательная доступность» в определении класса - PullRequest
4 голосов
/ 16 октября 2010

Я добавляю некоторые привязываемые свойства CLR к своему текущему приложению WPF в своем классе App, и не могу скомпилировать из-за этой несовместимой ошибки доступности.

Несовместимая доступность: Тип свойства 'SomeProj.Ошибка 'менее доступна, чем свойство SomeProj.App.LatestError'

Чтобы исправить эту ошибку, мне пришлось изменить class Error на public class Error.

В VB классы былипредположительно общедоступный, и большую часть времени этот модификатор доступа опускался.Разве это не так и в C #?

Я только недавно сделал скачок vb-> c #, и такие мелкие нюансы в синтаксисе замедляют меня.

Ответы [ 3 ]

4 голосов
/ 16 октября 2010

Не знаю насчет vb, но в классах c # по умолчанию имеют как максимально ограничивающие модификаторы , что означает - они internal, если они не вложены в другой класс - в этом случае они private.

Вот полное руководство (-:

4 голосов
/ 16 октября 2010

Вещи, объявленные вне класса или структуры, будут по умолчанию внутренними. Вещи, объявленные внутри класса или структуры, будут по умолчанию частными. см http://msdn.microsoft.com/en-us/library/ba0a1yw2(VS.80).aspx

0 голосов
/ 16 октября 2010

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

Конечно, это значение по умолчанию должно быть разумным. Если значение по умолчанию было общедоступным, и оно использовалось ненадлежащим образом, то не было бы никакого способа статически определить, что это было ошибкой (если только оно не выявило тип, который в других местах определен с меньшим доступом), код мог работать в течение нескольких месяцев или лет, прежде чем кто-то заметил ошибку и затем его исправление будет серьезным изменением сборки.

Поскольку значение по умолчанию является закрытым, где это применимо, и внутренним во всех других случаях, то, если это ошибка, это приведет к ошибке компилятора (поскольку что-то требует, чтобы у нее был больший доступ), которая легко перехватывается, или в классе просто невидим для других сборок (легко перехватывается, особенно в большинстве IDE).

Ограничительные значения по умолчанию являются очевидным путем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...