我有两个类,Customer是基类,ValuedCustomer是从基类继承的类。Customer类有0%的折扣(类变量),ValuedCustomer (类变量)有10%的折扣。
欠款方法使用折扣变量来确定欠款数额。如何允许有价值的客户使用自己的折扣变量?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Customer
{
public class Customer
{
private float discount = 0; //CV
public string name;
public float balance;
public string addr1;
public string addr2;
public string addr3;
public Customer(string name, float balance, string addr1, string addr2, string addr3)
{
this.name = name;
this.balance = balance;
this.addr1 = addr1;
this.addr2 = addr2;
this.addr3 = addr3;
}
public virtual float owes()
{
return Math.Abs(balance * discount - balance);
}
public override string ToString()
{
return String.Format("{0}\n{1:0.00}\n{2}\n{3}\nBalance: {4}\nDiscount: {5}%\nAmount due: {6:0.00}", name,addr1,addr2,addr3,balance,discount*100, owes());
}
}
class Program
{
static void Main(string[] args)
{
Customer c1 = new Customer("Jimmy", 100, "22 Main Street", "Naas", "Kildare");
ValuedCustomer c2 = new ValuedCustomer("Lucy", 100, "23 Main Street", "Roosky", "Roscommon");
Customer c3 = new Customer("Fred", 200, "24 Main Street", "Sneem", "Kerry");
Console.WriteLine(c1);
Console.WriteLine(c2);
Console.WriteLine(c3);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Customer
{
public class ValuedCustomer : Customer
{
private float discount = 0.1f;
public ValuedCustomer(string name, float balance, string addr1, string addr2, string addr3) : base(name,balance,addr1,addr2,addr3)
{
}
public override string ToString()
{
return String.Format("{0}\n{1:0.00}\n{2}\n{3}\nBalance: {4}\nDiscount: {5}%\nAmount due: {6:0.00}", name, addr1, addr2, addr3, balance, discount * 100, owes());
}
}
}预期示例输出:
Jimmy
22 Main Street
Naas
Kildare
Balance: 100
Discount: 0%
Amount due: 100.00
Lucy
23 Main Street
Roosky
Roscommon
Balance: 100
Discount: 10%
Amount due: 90.00
Fred
24 Main Street
Sneem
Kerry
Balance: 200
Discount: 0%
Amount due: 200.00发布于 2018-05-21 16:00:33
在您的类层次结构中,应该覆盖的是Discount:
关于基类Customer
public class Customer
{
protected virtual float Discount => 0;
...
}关于有价值的客户子类:
public class ValuedCustomer : Customer
{
protected override float Discount => 0.1f;
...
}现在,在Owes()方法中,
return Math.Abs(balance * Discount - balance); 将检索适合实际类实例类型的多态Discount。
(注:我已经按照.Net规范更新了变量名称)
发布于 2018-05-21 15:56:47
在这种情况下,您不需要两个不同的类,它们都有相同的属性,但值不同,在构造函数中传递折扣,或者添加一个布尔值来决定要应用的折扣:
public Customer(string name, float balance, string addr1, string addr2, string addr3, float discount)
{
this.name = name;
this.balance = balance;
this.addr1 = addr1;
this.addr2 = addr2;
this.addr3 = addr3;
this.discount = discount;
}
class Program
{
static void Main(string[] args)
{
Customer c1 = new Customer("Jimmy", 100, "22 Main Street", "Naas", "Kildare", 0);
Customer c2 = new Customer ("Lucy", 100, "23 Main Street", "Roosky", "Roscommon", 10);
Customer c3 = new Customer("Fred", 200, "24 Main Street", "Sneem", "Kerry", 0);
Console.WriteLine(c1);
Console.WriteLine(c2);
Console.WriteLine(c3);
}
}https://stackoverflow.com/questions/50452465
复制相似问题