Я хочу знать, что означает protected
в С#, почему мы его используем, и преимущество ключевого слова?
Например
protected int currentColorIndex;
Просьба уточнить.
Я хочу знать, что означает protected
в С#, почему мы его используем, и преимущество ключевого слова?
Например
protected int currentColorIndex;
Просьба уточнить.
"Защищенный член доступен из класса, в котором он объявлен, и из любого класса, производного от класса, который объявил этот член".
увидеть
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/protected
Каждый ответ аналогичен (определение и/или выдержка/ссылка на MSDN), поэтому старайтесь ответить на ваши исходные 3 вопроса:
Значение:
Любое поле, помеченное знаком "protected", означает, что оно видимо только для себя и для любых детей (классы, которые наследуют его). Вы заметите, что в коде ASP.NET Web Forms позади модели обработчики событий (например, Page_Load) отмечены как "защищенные". Это связано с тем, что файл ASPX Markup фактически наследуется от файла с кодом (посмотрите на директиву @Page, чтобы это доказать).
Почему мы используем его:
Общее использование защищаемого модификатора доступности - предоставить детям доступ к его свойствам родителей. У вас может быть базовый класс, для которого вызывается множество подклассов. Этот базовый класс может иметь общее свойство. Это хороший пример для защищенного свойства - для облегчения повторного использования и централизованного обслуживания общей логики.
Преимущество:
Вид подобного вопроса на "почему мы его используем"? Но по существу он дает крупнозернистый контроль над свойствами. Вы не можете просто думать о том, "когда вы используете защищенный". Это еще один пример выбора, когда использовать модификатор доступности (закрытый, общедоступный, внутренний, защищенный). Таким образом, преимущество действительно является одним и тем же преимуществом любого модификатора доступности - обеспечивает надежную и согласованную объектную модель, максимизирует повторное использование кода и минимизирует риски безопасности, связанные с неправильно открытым кодом.
Надеюсь, что это поможет.
Как уже указывали другие:
Защищенное ключевое слово является членом модификатор доступа. Защищенный член доступный в пределах его класса и производные экземпляры классов.
Вот небольшой пример:
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
Прямо от MSDN:
Защищенное ключевое слово - модификатор доступа к членству. Защищенный член доступен в пределах своего класса и экземпляров производного класса.
Используя защищенные средства, вы можете иметь функциональность в классе, доступном для производных классов, но не для классов, которые просто создают экземпляр объекта.
Эта страница сравнивает различные модификаторы доступа и объясняет, что они означают, и дает таблицу модификаторов по умолчанию для разных объектов (enum, class, интерфейс и структура).
Определение дано в другом ответе. Почему это хорошо? Вам не нужно дублировать данные/код из базового класса в его производные классы, когда protected
предлагает им доступ к реализациям базового класса, без нежелательного воздействия на неограниченное внешнее использование, которое будет подразумеваться public
.
Это означает, что поле доступно только для самого класса и унаследованных классов.
Подумайте об этом так. Класс представляет три интерфейса:
friend
, конечно)!Третий интерфейс - самая сложная общая задача дизайна в OO: что можно разумно переопределить (виртуальные методы и свойства) и переопределить, какие другие функции необходимы (простые защищенные методы и атрибуты)? Поскольку это такая проблема, по умолчанию классы sealed
на самом деле являются хорошей идеей, противоречивой, поскольку она часто кажется новичкам OO, кому кажется ненужным недостатком.