C#中的继承不起作用

时间:2015-11-11 14:56:39

标签: c#

我开始学习C#,但现在我有点困惑,因为我有一些问题。 我试图将一个班级继承到另一个班级并且它不起作用。它说像"你没有正确的参数" 所以,有代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication15 // Base class
{
    public class cakes
    {
        public int cakes_for;

        public cakes(int number) // constructor
        {
            cakes_for = number;
        }
        public int cakes_get // get value
        {
            get
            {
                return cakes_for;
            }   
            set
            {
                cakes_for = value;
            }
        }
        public static int cakes_plus_number(int n) // number plus constant
        {
            return n + 42;
        }
    }
    }


namespace ConsoleApplication15 // Derived Class
{
    public class Class2 : cakes // inheritance test
    {
        public int cakeses;
        public int Size { get; set; }
    }
}

3 个答案:

答案 0 :(得分:1)

cakes没有无参数构造函数,因此任何派生类型都必须显式调用基类的构造函数之一。 Class2需要使用cakes(int number)的值调用构造函数number,因为没有它,基类cakes无法实例化。 在派生类中构造函数签名之后,您可以通过语法: base()访问基类构造函数。 例如:

public class Class2 : cakes
{
    public Class2(int number) : base(number) { }
    public int cakeses;
    public int Size { get; set; }
}

示例2:

public class Class3 : cakes
{
    public Class3() : base(8) { }
}

答案 1 :(得分:1)

您应该将构造函数添加到派生类中,如下所示:

public class Class2 : cakes // inheritance test
{
    public Class2(int number) : base(number)
    {}
    public int cakeses;
    public int Size { get; set; }
}

要注意几点:

  • 用注释标记的类实际上是命名空间,而不是同一个。

  • 我建议您查看Capitalization styles以及示例中的所有内容。

答案 2 :(得分:0)

我稍微修改了你的代码。我还展示了如何在Form1()构造函数中实例化和使用它。当然,这不是将它放在最终版本中的合适位置,但这应该编译并执行以便让您了解该过程。

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        cake2 test = new cake2();
        test.cakes = 2; //inheritance
        test.CakeSize= 50; //not inheritance
        MessageBox.Show(test.cakes.ToString() + " | " + test.CakeSize.ToString());
    }
}

public class cake
{
    private int _cakes;
    public int cakes // get value
    {
        get
        {
            return _cakes;
        }
        set
        {
            _cakes = value;
        }
    }
    public cake()
    {
        public cake() : this(0) { } //constructor chaining.  Call your original function if no value is passed in
    }
    public cake(int number) // constructor
    {
        _cakes = number;
    }

    public static int cakes_plus_number(int n) // number plus constant //I don't see the need for static here, but whatever.
    {
        return n + 42;
    }
}

public class cake2 : cake
{
    private int _cake2;

    public int cakes2
    {
        get { return _cake2; }
        set { _cake2 = value; }
    }
    private int _size;

    public int CakeSize
    {
        get { return _size; }
        set { _size = value; }
    }

  }
}