我有一个课程,里面有几本书并在控制台屏幕上打印出来,这是我的代码:
class Book
{
public string forfattareEfternamn;
public string forfattareFornamn;
public string bokensTittle;
public int lanseringsDatum;
public Book(string forfattareEfternamn, string forfattareFornamn, string bokensTittle, int lanseringsDatum)
{
}
public string BokensTittle
{
get { return bokensTittle; }
set { bokensTittle = value; }
}
public string ForfattareFornamn
{
get {return forfattareFornamn;}
set {forfattareFornamn = value;}
}
public string ForfattareEfternamn
{
get {return forfattareEfternamn;}
set {forfattareEfternamn = value;;}
}
public int LanseringsDatum
{
get { return lanseringsDatum; }
set { lanseringsDatum = value; }
}
public override string ToString()
{
return string.Format("{0}, {1}, {2}, {3} ", forfattareEfternamn, ForfattareFornamn, bokensTittle, lanseringsDatum);
}
}
主:
class Program
{
static void Main(string[] args)
{
List<Book> books = new List<Book>(string forfatareFornamn, string forfattareEfternamn, string bokensTittle, int lanseringsDatum);
books.Add(new Book { forfattareFornamn = "Dumas", forfattareEfternamn = "Alexandre", bokensTittle = "The Count Of Monte Cristo", lanseringsDatum = 1844 });
books.Add(new Book { forfattareFornamn = "Clark", forfattareEfternamn = "Arthur C", bokensTittle = "Rendezvous with Rama", lanseringsDatum = 1972 });
books.Add(new Book { forfattareFornamn = "Dumas", forfattareEfternamn = "Alexandre", bokensTittle = "The Three Musketeers", lanseringsDatum = 1844 });
books.Add(new Book { forfattareFornamn = "Defoe", forfattareEfternamn = "Daniel", bokensTittle = "Robinson Cruise", lanseringsDatum = 1719 });
books.Add(new Book { forfattareFornamn = "Clark", forfattareEfternamn = "Arthur C", bokensTittle = "2001: A space Odyssey", lanseringsDatum = 1968 });
foreach (Book b in books)
{
Console.WriteLine(b);
}
Console.ReadKey();
}
}
现在,问题在于我被告知要使用保存在数据类型中的构造函数,所以我必须逐个写下所有的书名,而我实际上并不确定应该如何制作它。我试过了:
public Book(string forfattareEfternamn, string forfattareFornamn, string bokensTittle, int lanseringsDatum)
{
}
但它给了我一个错误,说我没有带0参数的构造函数。有什么想法吗?
答案 0 :(得分:0)
如果这是你的构造函数:
public Book(string forfattareEfternamn, string forfattareFornamn, string bokensTittle, int lanseringsDatum)
{
}
这一行不会编译:
new Book { forfattareFornamn = "Dumas", forfattareEfternamn = "Alexandre", bokensTittle = "The Count Of Monte Cristo", lanseringsDatum = 1844 })
如果您创建了parametrized constructor
,那么您将不再拥有default constructor
。因此,您遇到了此编译器错误。
1)如果您希望在Book
类中编译,请添加一个参数less constructor。
public Book() {}
2)或者更改主类中的代码,使其与参数化构造函数new Book("blah", "blah", etc);
对应
答案 1 :(得分:0)
首先,您的List
初始化错误:
List<Book> books = new List<Book>(string forfatareFornamn, string forfattareEfternamn, string bokensTittle, int lanseringsDatum);
将其更改为:
List<Book> books = new List<Book>();
然后在调用构造函数后,你没有为字段赋值,就像这样:
public Book(string forfattareEfternamn, string forfattareFornamn, string bokensTittle, int lanseringsDatum)
{
this.forfattareEfternamn = forfattareEfternamn;
this.forfattareFornamn = forfattareFornamn;
this.bokensTittle =bokensTittle;
this.lanseringsDatum = lanseringsDatum;
}
最后一个错误是你的逻辑调用Book
构造函数:
(new Book { forfattareFornamn = "Dumas", forfattareEfternamn = "Alexandre", bokensTittle = "The Count Of Monte Cristo", lanseringsDatum = 1844 });
将其更改为:
books.Add((new Book ("Dumas", "Alexandre", "The Count Of Monte Cristo", 1844));
答案 2 :(得分:0)
new Book { ... }
隐式new Book() { ... }
- 即它使用默认构造函数。如果添加自定义构造函数,则可能还需要添加显式无参数构造函数:
public Book() {}
这里的问题是,如果你没有定义任何构造函数(在非抽象类上),它会添加一个隐式的无参数构造函数,调用: base()
- 但是,如果您添加任何自定义构造函数,它会不执行此操作。
或者 - 改变其他代码,即
books.Add(new Book("Dumas", "Alexandre", "The Count Of Monte Cristo", 1844 ));