C#中的继承和类型

c#

根据以下详细信息,我在允许员工或个人“拥有”帐户时遇到了一些麻烦。

在下面的代码段中,在 Account 类中,我只接受Person作为所有者。我有点需要接受 aStaff或 aPerson

我的主要问题是,稍后在方法中applyFee(),我需要联系所有者对象,如果所有者有 feeDiscount 属性,我将需要使用来计算。我的问题是,因为在 Account 类中,类型是Person owner我没有得到,feeDiscount因为它是空的。

class Person
{
  public string name;

  public Person(string newName)
  {
    name = newName;
  }
}

class Staff : Person
{
  public decimal feeDiscount;

  public override Staff(string newName)
  {
    name = newName;
    feeDiscount = 0.5;
  }

}

class Account
{
  private decimal balance = 1000;
  private Person owner;
  public Account(Person newOwner)
  {
    owner = newOwner;
  }

  public void applyFee() {

    decimal fee = 100;

    if (owner != null)
    {

      if (owner.feeDiscount) {
        balance = balance - (fee * owner.feeDiscount);
      } else {
        balance = balance - fee;
      }

    }
  }
}

class Program
{
  static void Main(string[] args)
  {

    Person person1 = new Person("Bob");
    Staff staff1 = new Staff("Alice");

    Account account1 = new Account(person1);
    Account account2 = new Account(staff1);

    account1.applyFee();
    account2.applyFee();
  }
}

回答

如果您想Person尽可能保持通用,那么您可以创建另一个名为customerwho 的类,其feeDiscount值为 0。

因此,任何有生意在商店花钱的人都会有一些feeDiscount. 这样,您可以applyFee对 aCustomer或 aStaff但不是 aPerson

  • You could leave it exactly as is and trust that `Account` is only fed `Staff` and `Customers`, or you could make `Person` and abstract class which says a `Person` can't be JUST a `Person`, it can only be used as the foundation to define other classes like `Customer` or `Staff`.

以上是C#中的继承和类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>