Akhil Jain Ответов: 2

Как будет работать собственность с наследованием ?


допустим, у меня есть это, например:
class customer
   {
       int _custid;
       bool _status;
       string _Cname;
       double _balance;

       public customer(int custid, bool status, string Cname, double balance)
       {
           this._custid = custid;
           this._status = status;
           this._Cname = Cname;
           this._balance = balance;

       }
       public int Custid   //get only property
       {
           get
           {return _custid;}
        }
       public bool status
       {
           get { return _status; }
           set { _status = value; }
       }
       public string Cname
       {
           get { return _Cname;}
           set {
               if(_status==true)
               _Cname = value;
           }
       }
       public double balance
       {
           get { return _balance; }
           set {if (_status==true  & value>=500)
               _balance = value; }

       }
   }

 class specialcustomer :customer
    {

//here i want my special customer which can change the name even though there bal is //less than 500 but i don't know how to do it !!       
    }


class Program
   {
       static void Main(string[] args)
       {
           customer C = new customer(100, false, "AKHIL", 2000.00);
           Console.WriteLine("customer id={0}",C.Custid);
           Console.WriteLine("customer name={0}", C.Cname);
           C.Cname = "ramu";
           Console.WriteLine("customer changed name={0}", C.Cname);
           Console.WriteLine("customer status={0}", C.status);
           Console.WriteLine("customer balance={0}", C.balance);
           C.balance = 300;
           Console.WriteLine("customer changed balance={0}", C.balance);
           Console.ReadLine();
       }
   }


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

Цитата:
здесь я хочу, чтобы мой специальный клиент, который может изменить имя, даже если там бал меньше 500, но я не знаю, как это сделать !!

2 Ответов

Рейтинг:
1

Graeme_Grant

Вот один из способов...

public class customer
{
    int _custid;
    bool _status;
    string _Cname;
    double _balance;

    public customer(int custid, bool status, string Cname, double balance)
    {
        this._custid = custid;
        this._status = status;
        this._Cname = Cname;
        this._balance = balance;
    }

    // trimmed for example

    public string Cname
    {
        get { return _Cname; }
        set { SetName(value); }
    }

    internal virtual void SetName(string value)
    {
        if (_status == true)
            _Cname = value;
    }

    // trimmed for example
}

public class specialcustomer : customer
{
    public specialcustomer(int custid, bool status, string Cname, double balance)
        : base(custid, status, Cname, balance)
    {
    }

    internal override void SetName(string value)
    {
        var tmpStatus = status;
        status = true;
        base.SetName(value);
        status = tmpStatus;
    }
}


Akhil Jain

когда я ставлю базу.Cname он переходит в базовый класс, где проверяет условие, которое я не хочу проверять для специального класса customer.

Рейтинг:
1

Midi_Mick

Лучший способ сделать это, чтобы сделать запись CNAME виртуальная собственность, а поле _CName защищены.

public class customer {
    protected string _CName;
    public virtual string CName {
        get { return _CName; }
        set {
            if (status)
                _CName = value;
        }
    }
}
public class specialcustomer {
     public override string CName {
        get { return base.CName; }
        set { _CName = value; }
     }
}


Akhil Jain

когда я ставлю базу.Cname он переходит в базовый класс, где проверяет условие, которое я не хочу проверять для специального класса customer.