Переименуйте main.m
в shortmain.m
и запустите
matlab -nodisplay -nosplash -nojvm -r "shortmain('input.expr', 'input.score', 'input.param', 'Trans'); exit"
. internal class Foo
объявление переопределит доступность public void Fee()
метод, эффективно делая это внутренним.
В этом случае использование внутреннего по сравнению с общественностью на методах будет иметь тот же эффект. Единственная причина я выбрал бы открытые методы по сравнению с внутренними методами в случае как это, будет состоять в том, чтобы упростить переход к общедоступному классу в будущей версии, должны Вы принимать решение сделать так.
На самом деле - существует большая разница при использовании отражения; в частности, Silverlight может быть очень нарушена, пытаетесь ли Вы доступ внутренние методы через отражение, даже если у Вас был бы доступ. Я видел случаи, когда я должен был обнародовать метод, чтобы заставить код работать над Silverlight, даже при том, что это работает над регулярной.NET.
Вы могли бы найти то же с частичным доверием регулярной.NET.
Вы корректны, и Fee и Fi будут одинаково доступны.
Из спецификации языка 3.0 до-диеза, под 3.5.2:
Область доступа вложенного участника M, объявленного в типе T в рамках программы P, определяется следующим образом (замечание, что сам M может возможно быть типом):
• Если объявленный модификатор доступа M общедоступен, область доступа M является областью доступа T.
Так, даже если Сбор будет объявлен столь же общедоступный, то это будет столь же доступно как Foo (т.е. внутренний).
Согласно документации MSDN Ваш класс Foo не будет доступен вне Вашего блока, таким образом, это не будет иметь никакого значения для маркировки методов как внутренние или общедоступные; это даже не имеет значения при помощи Атрибута InternalsVisibleTo
Единственное, чего здесь не хватает, - это зачем вам это делать?
В некоторых библиотеках есть много классов, которые не предназначены для того, чтобы потребитель библиотеки мог их касаться, но они должны наследовать интерфейсы, помеченные как общедоступные. Например, у меня есть библиотека с классом, который наследует интерфейс IComparer, но он используется только для внутренних целей, и я не хочу загромождать публичный аспект моей библиотеки. Если я помечу реализованную функцию сравнения как внутреннюю, компилятор пожалуется, что я не внедряю интерфейс IComparer.
Итак, как мне успешно реализовать интерфейс и в то же время предотвратить его доступность в публичном аспекте моей библиотеки? Отметьте класс как внутренний, а реализованную функцию как общедоступную.