Говорейки от страна на C#, ако имате член с данни (поле или свойство), който не е публичен, но е полезен за дъщерни класове и трябва да бъде достъпен както за четене, така и за писане, тогава декларирайте този член като защитен.
Ако членът трябва да бъде прочетен от подкласове, но не и написан, можете да дефинирате члена като собственост, която е защитена, но с частен сетер:
//as of C# 3.0 this can also be an auto-property
private string myValue;
protected string MyValue
{
get{return myValue;}
private set{myValue = value;}
}
Това прави MyValue напълно скрит за класове извън йерархията на наследяване и само за четене за подкласове; само самият суперклас може да зададе стойността. Това би било еквивалентно на частно поле със защитен метод за получаване и частен метод за настройка.
Като цяло, като дизайнер на суперкласа, от вас зависи да определите как подкласовете трябва да могат да използват това, което предоставяте. Ако направите нещо защитено, приемете, че подкласовете ще направят всичко, което „защитените“ им позволяват. И C#, и Java имат методи, чрез които можете независимо да контролирате видимостта на достъпа за четене и запис.
person
KeithS
schedule
22.02.2012