Ответ 1
Эффективно protected
или internal
, а не и. Он доступен и по производным классам и типам в той же сборке. Это распространенное заблуждение думать, что protected internal
означает доступный только производным классам в той же сборке.
Я хотел бы создать внутреннее авто-свойство:
internal bool IP { get; protected internal set; }
Я подумал, что можно сделать сеттер protected
или protected internal
- но я всегда получаю модификатор доступности , который должен быть более строгим, чем свойство. Разве это не так? Private
здесь не помогает.
EDIT:
Возникает вопрос: как реализовать автоматическое свойство с помощью внутреннего геттера и защищенного сеттера?
Эффективно protected
или internal
, а не и. Он доступен и по производным классам и типам в той же сборке. Это распространенное заблуждение думать, что protected internal
означает доступный только производным классам в той же сборке.
На уровне .NET существуют два одинаковых, но разных уровня доступа:
"protected internal" в С# означает FamilyOrAssembly; нет модификатора для FamilyAndAssembly.
Итак, ваш установщик protected internal
менее ограничительный, чем свойство internal
. Что вы можете сделать:
protected internal bool IP { internal get; set; }
Но тогда ваш сеттер менее ограничен, чем ваш получатель, что нечетно...
Другая (несколько эквивалентная) альтернатива:
internal bool IP { get; set; }
protected void SetIP(bool ip)
{
this.IP = ip;
}
Я бы рассмотрел этот обман, так как Эрик Липперт тоже сам СО, но он написал превосходное сообщение в блоге, которое рассматривает эту проблему.
Почему я не могу получить доступ к защищенному члену из производного класса, часть третья
В конечном счете, его ответ во многом такой же, как и те, которые даны плакатами здесь, но он рекламирует некоторые интересные аргументы в пользу desgin языка и реализации этих функций.
Учитывая то, что упоминал Джон Скит (и комментарий пользователя59808), не достигнет ли этого желаемого результата?
protected internal bool IP { get; protected set; }
protected internal
менее ограничительный, чем protected
или internal
, потому что он позволяет как своим подклассам (protected
), так и всем, что находится в одной и той же сборке (internal
), получить доступ к чему-либо.
защищенные внутренние средства, видимые для классов в той же сборке, или классы, происходящие из содержащего класса, другими словами, они видны тем, кто отвечает внутренним требованиям или защищенным требованиям, а не И. Таким образом, не существует модификатора доступа, защищенного И внутренним.
защищенные внутренние средства защищены ИЛИ внутренние, не защищенные и внутренние. Таким образом, область действия ограничена теми же сборками или производными классами, что необязательно и то, и другое.
модификатор доступности должен быть более строгим, чем свойство
Внутреннее является более ограничительным, защищенным: поскольку защищенные объекты можно увидеть (по подклассам) вне сборки.
Компилятор говорит, что нет смысла говорить, что set
защищен (т.е. видим для подклассов вне сборки), когда все свойство IP
является внутренним (то есть невидимым вне сборки).