Хорошо, таким образом, это может быть определенным глупым вопросом, и существует, конечно, очевидный ответ, но мне было любопытно, если я пропустил какую-либо тонкость здесь.
Есть ли любое различие в терминах видимости/удобства использования между a public
участник объявил в internal
класс и internal
участник объявил в internal
класс?
т.е. между
internal class Foo
{
public void Bar()
{
}
}
и
internal class Foo
{
internal void Bar()
{
}
}
Если Вы объявили метод как public
и также virtual
, и затем переопределил его в производном классе, который является public
, причина использования этого модификатора ясна. Однако действительно ли это - единственная ситуация... я пропускающий что-то еще?
Рассмотрим следующий случай:
public interface IBar { void Bar(); }
internal class C : IBar
{
public void Bar() { }
}
Здесь C.Bar не может быть отмечен как внутренний; это является ошибкой, потому что к C.Bar может получить доступ вызывающий D.GetBar ():
public class D
{
public static IBar GetBar() { return new C(); }
}
Член public
по-прежнему остается просто внутренним
во внутреннем классе внутреннем
.
Из MSDN :
Доступность члена никогда не может быть больше, чем доступность содержащего его типа. Например, общедоступный метод, объявленный во внутреннем типе, имеет только внутреннюю доступность
Подумайте об этом так, я бы получил доступ к общедоступному
свойству на ....? Класс, которого я не вижу? :)
Ответ Эрика очень важен в этом случае, если он предоставляется через интерфейс, а не напрямую, он имеет значение , просто зависит от того, находитесь ли вы в такой ситуации с участником, которого вы имея дело с.
public
члены класса internal
могут переопределять public
членов public
] базовые классы и, следовательно, будут немного более открытыми ... если косвенно.