在book class c#console应用程序中使用构造函数

时间:2013-02-25 08:05:28

标签: c#

我有一个课程,里面有几本书并在控制台屏幕上打印出来,这是我的代码:

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参数的构造函数。有什么想法吗?

3 个答案:

答案 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 ));