Общедоступные и Внутренние участники во Внутреннем классе?

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

Есть ли любое различие в терминах видимости/удобства использования между a public участник объявил в internal класс и internal участник объявил в internal класс?

т.е. между

internal class Foo
{
    public void Bar()
    {
    }
}

и

internal class Foo
{
    internal void Bar()
    {
    }
}

Если Вы объявили метод как public и также virtual, и затем переопределил его в производном классе, который является public, причина использования этого модификатора ясна. Однако действительно ли это - единственная ситуация... я пропускающий что-то еще?

61
задан Noldorin 1 April 2010 в 23:14
поделиться

3 ответа

Рассмотрим следующий случай:

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(); } 
}
55
ответ дан 24 November 2019 в 17:20
поделиться

Член public по-прежнему остается просто внутренним во внутреннем классе внутреннем .

Из MSDN :

Доступность члена никогда не может быть больше, чем доступность содержащего его типа. Например, общедоступный метод, объявленный во внутреннем типе, имеет только внутреннюю доступность

Подумайте об этом так, я бы получил доступ к общедоступному свойству на ....? Класс, которого я не вижу? :)

Ответ Эрика очень важен в этом случае, если он предоставляется через интерфейс, а не напрямую, он имеет значение , просто зависит от того, находитесь ли вы в такой ситуации с участником, которого вы имея дело с.

39
ответ дан 24 November 2019 в 17:20
поделиться

public члены класса internal могут переопределять public членов public ] базовые классы и, следовательно, будут немного более открытыми ... если косвенно.

1
ответ дан 24 November 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: