Как получить доступ к закрытому полю в дочернем классе ?
class Customer { protected int _cid, _bal, _status; private string _cname; public Customer(int _cid, int _bal, int _status, string _cname) { this._cid = _cid; this._bal = _bal; this._cname = _cname; this._status = _status; } public int Cid { //read only property get { return _cid; } } public virtual string Cname { get { return _cname; } set { if (_status != 0 & _bal >= 500) { _cname = value; } } } public int Bal { get { return _bal; } set { if (_status != 0 & value >= 500) { _bal = value; } } } public int Status { get { return _status; } set { _status = value; } } public virtual void display() { // Console.WriteLine("id={0} and name={1} and balance={2} and status={3}",Cid,Cname,Bal,Status); Console.WriteLine("id={0} and name={1} and balance={2} and status={3}", _cid, _cname, _bal, _status); } } class Specialcustomer : Customer { public Specialcustomer(int _cid, int _bal, int _status, string _cname) : base(_cid, _bal, _status, _cname) { } public override string Cname { get { return _cname; } set { if (value == "Special") { _cname = value; } } } public override void display() { Console.WriteLine("id={0} and name={1} and balance={2} and status={3}", Cid, Cname, Bal, Status); } } static void Main(string[] args) { Customer C1 = new Specialcustomer(10, 400, 1, "BOND"); C1.display(); C1.Cname = "Special"; C1.display(); Console.ReadKey(); }
Что я уже пробовал:
в этом примере
когда я использовал
_cnameкак защищенное поле оно работало нормально но когда я изменил его на частное оно дает мне error.so как я могу получить доступ к
_cnameв дочернем классе, если я изменил поле на pvt. без использования Отражение.
и если бы я изменил _cname на base.Cname в специальном классе Customer переопределение не происходит так как это происходит с базовым свойством
Tomas Takac
Вы можете либо сделать его защищенным, либо установить поле с помощью свойства базового класса (base.Запись CNAME).
Akhil Jain
я не могу сделать его базовым.Функция переопределения Cname не будет работать, так как она перейдет в базовое свойство Cname.