【问题标题】:Constructor that inherits a literal string issue继承文字字符串问题的构造函数
【发布时间】:2014-06-11 22:46:28
【问题描述】:

这可能是一件很容易解决的事情。我是一名大学生,我们刚刚开始使用多态性,所以这个概念对我来说仍然令人费解。

abstract class IncreaseTransaction
{
    private string _Description;
    private decimal _Amount;        

    protected IncreaseTransaction(string description, decimal amount)
    {
        _Description = description;
        _Amount = amount;
    }
}

class Deposit : IncreaseTransaction
{
    public Deposit(string description, decimal amount) : base("Deposit", amount)
    {
    }
}

static void Main(string[] args)
{
    Customer fred = new Customer("Fred");
    SavingsAccount fredSavings = new SavingsAccount();
    fredSavings.AddTransaction(new Deposit(500.00M));
}

当一个新的存款被实例化时,我希望将文字字符串“存款”用作交易的描述。但是,我收到一条错误消息,指出“SampleNamespace.Deposit 不包含采用一个参数的构造函数”。所以,字符串没有被继承,我不确定如何解决这个问题。我将非常感谢任何帮助!

【问题讨论】:

    标签: c# inheritance constructor abstract-class


    【解决方案1】:

    您的存款构造函数有两个参数:

    public Deposit(string description, decimal amount) : base("Deposit", amount)
    

    由于您在对 base() 的调用中设置了“存款”,因此您不需要该构造函数中的“字符串描述”。它应该看起来像:

    public Deposit(decimal amount) : base("Deposit", amount)
    

    以下行不应再引发错误:

    fredSavings.AddTransaction(new Deposit(500.00M));
    

    附加说明: 构造函数不像成员或属性那样被继承,而是对子级和父级都是唯一的。子 (Deposit) 必须调用基类的 (IncreaseTransaction) 构造函数,但它不需要在自己的构造函数中要求相同的参数。

    这是一个关于为什么会这样的古老(但很好)的讨论:Why are constructors not inherited?

    【讨论】:

    • 前几天我试过了,编译器仍然抛出这个错误。我猜它由于某种原因没有刷新。无论如何,感谢您的帮助。
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多