【发布时间】:2017-05-08 19:15:37
【问题描述】:
当我尝试如下设置构造函数时,出现错误:“Book 类型不包含采用 0' 参数的构造函数”:
using System;
using System.Collections.Generic;
using System.IO;
abstract class Book
{
protected String title;
protected String author;
public Book(String t,String a){
title=t;
author=a;
}
public abstract void display();
}
class MyBook : Book
{
private int price = 0;
public MyBook(string t, string a, int p)
{
base.title = t;
base.author = a;
this.price = p;
}
public override void display()
{
Console.WriteLine($"Title: {title}");
Console.WriteLine($"Author: {author}");
Console.WriteLine($"Price: {price}");
}
}
我已将问题范围缩小到我如何使用 base 关键字。我应该在其构造函数声明中使用带有 base 关键字的基本构造函数初始化程序。
public MyBook(string t, string a, int p)
: base(t, a)
{
this.price = p;
}
请有人向我解释为什么我不能使用 base.在我的构造函数中?是因为 title 和 author 变量都是抽象类的受保护成员吗?我认为由于我是从 Book 派生的,我可以访问这些受保护的成员。还是因为我没有实例化我的子类,因此我不能这样设置我的构造函数?
【问题讨论】:
-
因为您已经定义了一个基本构造函数,它需要 2 个参数才能初始化并为您服务它的成员。
标签: c# inheritance constructor abstract