【问题标题】:Wrong override called?调用了错误的覆盖?
【发布时间】:2016-03-31 20:33:57
【问题描述】:

我是编程新手,这门课让我很头疼。

这是我的代码(类型基于用户输入)

public static Account CreateAccount(int type)
{
    switch (type) 
    { 
        case 1:
            SaveAcc savings = new SaveAcc();  
        break;

        default:
            Console.WriteLine("No such choice");
        break;

    }
    return new Account();
}

这些是我的课程:

class Account 
{
    protected int balance;
    protected int accountnr = 1;
    protected bool credit;

    public Account()
    {
        newNr++;
        accountnr = newNr;
    }

    public override string ToString()
    {
        return "AccNr: " + Nr.ToString("G") + ", balance: " + balance.ToString("C");
    }
}

class SaveAcc: Account
{
    public int rate;
    public SaveAcc()
    {
        credit = true;
        rate = 0.03;
    }

    public override string ToString()
    {
       return "AccNr: " + Nr.ToString("G") + ", balance: " + balance.ToString("C") + credit.ToString();
    }
}

当我创建一个 SavAcc 对象时,会调用“错误”的覆盖。我的目标是显示位于 SavAcc 继承类中的覆盖 ToString 方法提供的所有信息。我错过了什么明显的东西吗?

【问题讨论】:

  • SavAcc 在哪里? SaveAcc 是什么?你在哪里叫它?
  • 错字,SalAcc 应该是 SaveAcc @leppie
  • 好的,在case 1,你永远不会返回创建的实例。你可能是故意的。
  • 阅读此ericlippert.com/2014/03/05/how-to-debug-small-programs,然后解释为什么您的代码适用于橡皮鸭。你不能的点就是错误所在。
  • 另外,tk ths opprnty to stp usng abbrvs n yr cd。它使阅读变得异常困难,而难以阅读与初学者想要的相反。这不是SaveAcc。它是SavingsAccount。这不是accountnr,而是accountNumber

标签: c# overriding inherited


【解决方案1】:

改变这个:

switch (type) 
{ 
        case 1:
            SaveAcc savings = new SaveAcc();  
        break;

        default:
            Console.WriteLine("No such choice");
        break;

}
return new Account();

到这里:

switch (type) 
{ 
    case 1:
        return new SaveAcc();  
    default:
        Console.WriteLine("No such choice");
        return new Account();
}

【讨论】:

  • 谢谢,为什么不需要休息?
  • break 告诉交换机不要“失败”进入下一个案例。因为return导致整个方法当场退出,所以无法继续执行切换,所以没有必要通过包含break来阻止它
猜你喜欢
  • 2018-11-18
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多