-2

数冊の本を保持し、それらをコンソール画面に出力するクラスがあります。これが私のコードです。

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();
    }
}

さて、問題は、データ型を保持するコンストラクターを使用するように言われたため、すべての本の名前を1つずつ書き留める必要がなく、実際にどのように作成すればよいかわかりません。私は試した:

public Book(string forfattareEfternamn, string forfattareFornamn, string bokensTittle, int lanseringsDatum)
    {


    }   

しかし、引数が0のコンストラクターがないというエラーが表示されます。何か案は?

4

3 に答える 3

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。したがって、このコンパイラ エラーが発生しました。

次の 2 つのことを行うことができます。

1)これをコンパイルする場合は、Bookクラスにパラメーターのないコンストラクターを追加します。

public Book() {} 

2)または、メイン クラスのコードを変更して、パラメーター化されたコンストラクターに対応するようにします。new Book("blah", "blah", etc);

于 2013-02-25T08:10:56.280 に答える
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));
于 2013-02-25T08:11:24.597 に答える
0

new Book { ... }つまりnew Book() { ... }、デフォルトのコンストラクターを使用します。カスタム コンストラクターを追加する場合は、明示的なパラメーターなしのコンストラクターも追加することをお勧めします。

public Book() {}

ここでの問題は、(非抽象クラスで) コンストラクターを定義しない場合、呼び出し先の暗黙的なパラメーターなしのパブリック コンストラクターが追加されることですが、カスタム コンストラクター: base()を追加すると、これは行われませ

または代わりに - 他のコードを変更します。

books.Add(new Book("Dumas", "Alexandre", "The Count Of Monte Cristo", 1844 ));
于 2013-02-25T08:11:24.327 に答える