Akhil Jain Ответов: 2

Переопределение не происходит в свойстве в C#


Цитата:
здесь я создал класс Specialcustomer, в котором я хочу, чтобы он изменил имя, если cname= " специальный"
ПОЖАЛУЙСТА, ДАЙТЕ МНЕ ЗНАТЬ ,ЕСЛИ Я ДЕЛАЮ ПОЛИМОРФИЗМ ВРЕМЕНИ ВЫПОЛНЕНИЯ ЭТИМ?
пожалуйста помогите я новичок в C#


   class Customer
    {
       protected int _cid,_bal,_status;
        protected string _cnmae;


        public Customer(int _cid,int _bal,int _status,string _cname)
        {
            this._cid = _cid;
            this._bal = _bal;
            this._cnmae = _cname;
            this._status = _status;
         }

        public int Cid
        { //read only property
          get
            {
                return _cid;
            }
            
           }
        public virtual string Cname
        {
            get
            {
                return _cnmae;
            }
            set
            {
                if (_status != 0 & _bal >= 500)
                {
                    _cnmae = 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, _cnmae,_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 base.Cname;

            }

            set
            {
                if (value == "Special")
                {
                    base.Cname = value;
                }
            }
        }

        public override void display()
        {
            //base.display();
            Console.WriteLine("id={0} and name={1} and balance={2} and status={3}", _cid, _cnmae, _bal, _status);
        }
 }
class Program
    {        static void Main(string[] args)
        {
            Customer C1 = new Specialcustomer(10, 400, 1, "BOND");
            C1.display();
            C1.Cname = "Special";
            C1.display();
            Console.ReadKey();
         }
    }


Что я уже пробовал:

Цитата:
я создал класс Specialcustomer, в котором я хочу, чтобы он изменил имя, если cname= " специальный"
ПОЖАЛУЙСТА, ДАЙТЕ МНЕ ЗНАТЬ ,ЕСЛИ Я ДЕЛАЮ ПОЛИМОРФИЗМ ВРЕМЕНИ ВЫПОЛНЕНИЯ ЭТИМ?
пожалуйста помогите я новичок в C#

2 Ответов

Рейтинг:
1

sreeyush sudhakaran

Измените свойство базового класса на ниже

public virtual string Cname
       {
           get
           {
               return _cnmae;
           }
           set
           {
               if (value == "Champ"|| (_status != 0 && _bal >= 500))
               {
                   _cnmae = value;
               }
           }
       }


Akhil Jain

можно ли это решить, не меняя код базового класса !!

Рейтинг:
0

Midi_Mick

Вам нужно базовое свойство или метод, который устанавливает поле _cnmae без выполнение любых проверок. Если вы не хотите, чтобы он был виден импортерам классов, сделайте его защищенным. Затем в каждом свойстве CName класса вызовите этот защищенный метод, чтобы установить значение, Если или когда условия подходят.

class Customer
    {
       protected int _cid,_bal,_status;
       protected string _cnmae;
 

        public Customer(int _cid,int _bal,int _status,string _cname)
        {
            this._cid = _cid;
            this._bal = _bal;
            this._cnmae = _cname;
            this._status = _status;
        }
 
        public int Cid
        { //read only property
          get
            {
                return _cid;
            }
            
        }

        protected void SetCname(string value)
        {
            _cnmae = value;
        }

        public virtual string Cname
        {
            get
            {
                return _cnmae;
            }
            set
            {
                if (_status != 0 & _bal >= 500)
                {
                    SetCname(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, _cnmae,_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 base.Cname;
 
            }
 
            set
            {
                if (value == "Special")
                {
                    base.SetCname(value);                }
            }
        }
 
        public override void display()
        {
            //base.display();
            Console.WriteLine("id={0} and name={1} and balance={2} and status={3}", _cid, _cnmae, _bal, _status);
        }
 }
class Program
    {
        static void Main(string[] args)
        {
            Customer C1 = new Specialcustomer(10, 400, 1, "BOND");
            C1.display();
            C1.Cname = "Special";
            C1.display();
            Console.ReadKey();
         }
    }