Защищенные классы в.NET

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

Вы, вероятно, не отменяете регистрацию своего LocationListener.

35
задан Andrew Hare 19 June 2009 в 12:50
поделиться

3 ответа

Да, вы просто не можете сделать их классами верхнего уровня, они должны быть внутренними классами

public class Outer
{
    protected class Foo
    {
    }
}

Это нормально, это означает, что единственными классами, которым разрешено видеть Foo, являются подклассы внешнего

class X 
{
    // 'Outer.Foo' is inaccessible due to its protection level
    private void Flibble(Outer.Foo foo)
    {
    }
}

class X : Outer
{
    // fine
    private void Flibble(Outer.Foo foo)
    {
    }
}

] Обратите внимание, что вы не можете объявить какой-либо внешний класс как частный, защищенный (или защищенный внутренний) в C #, поскольку модификатор доступа для классов внешнего уровня определяет их видимость по отношению к другим сборкам. В частности, виден только внутри сборки (или для друзей через InternalsVisibleTo) или вне сборки.

Таким образом, хотя здесь для согласованности используются общедоступные / внутренние идентификаторы, на самом деле состояние в IL просто «Public» или «NonPublic» (как показывают флаги Reflection.Emit )

73
ответ дан 27 November 2019 в 06:44
поделиться

protected видимость используется для обозначения «видимой для производных классов». Это имеет смысл для вещей внутри класса, но обычно не имеет значения на уровне класса.

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

11
ответ дан 27 November 2019 в 06:44
поделиться

Да, мы просто не можем сделать их классами верхнего уровня, они должны быть внутренними классами

2
ответ дан 27 November 2019 в 06:44
поделиться
Другие вопросы по тегам:

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