Подтвердить что ты не робот

Защищенный ключевой слово С#

Я хочу знать, что означает protected в С#, почему мы его используем, и преимущество ключевого слова?

Например

protected int currentColorIndex;

Просьба уточнить.

4b9b3361

Ответ 2

Каждый ответ аналогичен (определение и/или выдержка/ссылка на MSDN), поэтому старайтесь ответить на ваши исходные 3 вопроса:

Значение:

Любое поле, помеченное знаком "protected", означает, что оно видимо только для себя и для любых детей (классы, которые наследуют его). Вы заметите, что в коде ASP.NET Web Forms позади модели обработчики событий (например, Page_Load) отмечены как "защищенные". Это связано с тем, что файл ASPX Markup фактически наследуется от файла с кодом (посмотрите на директиву @Page, чтобы это доказать).

Почему мы используем его:

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

Преимущество:

Вид подобного вопроса на "почему мы его используем"? Но по существу он дает крупнозернистый контроль над свойствами. Вы не можете просто думать о том, "когда вы используете защищенный". Это еще один пример выбора, когда использовать модификатор доступности (закрытый, общедоступный, внутренний, защищенный). Таким образом, преимущество действительно является одним и тем же преимуществом любого модификатора доступности - обеспечивает надежную и согласованную объектную модель, максимизирует повторное использование кода и минимизирует риски безопасности, связанные с неправильно открытым кодом.

Надеюсь, что это поможет.

Ответ 3

Как уже указывали другие:

Защищенное ключевое слово является членом модификатор доступа. Защищенный член доступный в пределах его класса и производные экземпляры классов.

Вот небольшой пример:

public class A
{
    protected string SomeString;
    public string SomeOtherString;
}

public class B : A
{
    public string Wrapped
    {
        get { return this.SomeString; }
    }
}

...

var a = new A();
var s = a.SomeOtherString; // valid
var s2 = a.SomeString; // Error

var b = new B();
var s3 = b.Wrapped; // valid

Ответ 4

Прямо от MSDN:

Защищенное ключевое слово - модификатор доступа к членству. Защищенный член доступен в пределах своего класса и экземпляров производного класса.

Источник

Используя защищенные средства, вы можете иметь функциональность в классе, доступном для производных классов, но не для классов, которые просто создают экземпляр объекта.

Эта страница сравнивает различные модификаторы доступа и объясняет, что они означают, и дает таблицу модификаторов по умолчанию для разных объектов (enum, class, интерфейс и структура).

Ответ 5

Определение дано в другом ответе. Почему это хорошо? Вам не нужно дублировать данные/код из базового класса в его производные классы, когда protected предлагает им доступ к реализациям базового класса, без нежелательного воздействия на неограниченное внешнее использование, которое будет подразумеваться public.

Ответ 6

Это означает, что поле доступно только для самого класса и унаследованных классов.

Ответ 7

Подумайте об этом так. Класс представляет три интерфейса:

  • Навстречу , с полным доступом к внутренним деталям реализации (общедоступные, защищенные, частные методы и атрибуты). По определению все, что вы делаете в классе, может повлиять на все остальное.
  • На пути к клиентам, с доступом только к общедоступным методам и атрибутам. Вы минимизируете открытый интерфейс класса, чтобы свести к минимуму неожиданные последствия изменений: чем меньше кода знает о ваших внутренностях, тем более свободно вы можете их модифицировать позже.
  • На пути к потомкам, с доступом к общедоступным и защищенным методам и атрибутам. Что бы вы ни делали с защищенными и общедоступными методами, это повлияет не только на клиентов, но и на потомков, которые изменяют базовые функции вашего класса. OO - это сокращение coupling и увеличение cohesion: нет более сильной связи между классами, чем отношение наследования (ну, конечно, кроме С++ friend, конечно)!

Третий интерфейс - самая сложная общая задача дизайна в OO: что можно разумно переопределить (виртуальные методы и свойства) и переопределить, какие другие функции необходимы (простые защищенные методы и атрибуты)? Поскольку это такая проблема, по умолчанию классы sealed на самом деле являются хорошей идеей, противоречивой, поскольку она часто кажется новичкам OO, кому кажется ненужным недостатком.