Говоря о стороне 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