我开始学习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; }
}
}
答案 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; }
}
}
}