好吧,所以这是练习:你必须定义三个类.一个名为MyNum的类,它包含int类型的变量.第二个类叫做MyString,将派生自MyNum并包含字符串.第三类调用MyType并返回MyNum类型的变量.每个类都将设置为构造函数和名为Show的虚函数.MyType的构造函数接收MyNum变量,而Show of MyType函数将运行MyNum的Show函数.现在,您需要设置两个MyType类型的对象并初始化它们.一旦对象类型为MyNum,则一次为MyString类型的对象.
这是代码:
class MyNum
{
protected int num;
public MyNum(int num)
{
this.num = num;
}
public virtual void Show()
{
Console.WriteLine("The number is : " + num);
}
}
class MyString : MyNum
{
string str;
public MyString(string str)
{
this.str= str;
}
}
class MyType : MyNum
{
MyNum num2;
public MyType(MyNum num)
{
this.num2 = num;
}
public override void Show()
{
base.Show();
}
}
class Program
{
static void Main(string[] args)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
错误1'ConsoleApplication1.MyNum'不包含带'0'参数的构造函数C:\ Users\x\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 23 16 ConsoleApplication1
任何人都知道为什么我有这个错误?谢谢.
由于您的类是子类MyNum,因此需要能够构造它.您没有默认构造函数,因此必须使用值显式调用它.
例如:
// Since this is here, you're saying "MyType is a MyNum"
class MyType : MyNum
{
MyNum num2;
public MyType(MyNum num) // You need to call the base class constructor
// here to construct that portion of yourself
: base(42) // Call this with an int...
{
this.num2 = num;
}
Run Code Online (Sandbox Code Playgroud)
该课程MyString需要类似的处理.它也必须有一个构造函数来调用基类构造函数.
请注意,如果MyNum类具有默认构造函数(可能是protected),则无关紧要.而不是调用这些构造函数,另一种选择是做类似的事情:
class MyNum
{
public MyNum(int num)
{
this.num = num;
}
// Add a default constructor that gets used by the subclasses:
protected MyNum()
: this(42)
{
}
Run Code Online (Sandbox Code Playgroud)
编辑以回应评论:
如果要覆盖基类构造函数,请尝试:
class MyType : MyNum
{
public MyType(int num)
: base(num)
{
}
public override void Show()
{
Console.WriteLine("The number [MyType] is : " + this.num);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |