0

2つのコンストラクターを持つクラスライブラリがあります。最初のコンストラクターは2つの引数を受け入れ、2番目のコンストラクターは3つの引数を受け入れます。以下は私のクラスライブラリコードです。説明しようとするよりもコードを配置する方が簡単です。

public class Student
    {
        public string name;
        public string course;
        public MyDate bday;

        public Student(string name, string course)
        {
            this.name = name;
            this.course = course;
        }

        public Student(string name, string course, MyDate bday)
        {
            this.name = name;
            this.course = course;
            this.bday = bday;
        }

MyDateライブラリには、誕生日の日付、月、年の3つの引数を受け入れる別のコンストラクタがあります。これで、3つのリストボックスを含むフォームができました。3番目のリストボックスに誕生日を表示します。コードで誕生日を宣言します(以下に示したように)。現在、誕生日の表示方法に問題があります。

MyDate[] bd = new MyDate[5] {  new MyDate(29, 3, 1990),
                                       new MyDate(30, 1, 1988),
                                       new MyDate(9, 6, 1987),
                                       new MyDate(2, 4, 1989),
                                       new MyDate(17, 8, 1986),
        };
        Student[] s = new Student[5] { new Student("John", "BSCS"),
                                       new Student("Paul", "BSIT"),
                                       new Student("George", "BSCP"),
                                       new Student("Jane", "BSCS"),
                                       new Student("May", "BSIT")
        };

誰かが私がこれをどのように行うべきか教えてもらえますか?このStudent[]s = new Student [5] {new Student( "John"、 "BSCS"、bd [0])などを試しましたが、エラーが発生します。私はこれが初心者の質問であることを知っています、そして私は初心者です。ありがとうございました。

編集:初期化はform1.csで行われました。

4

4 に答える 4

1

あなたはここで見ることができます:

コンストラクターの下にフィールド初期化子を設定する必要があります。

class TestClass
{
    MyDate[] bd;
    Student[] s; 

    public TestClass()
    {
         bd = new MyDate[5] {  new MyDate(29, 3, 1990),
                                   new MyDate(30, 1, 1988),
                                   new MyDate(9, 6, 1987),
                                   new MyDate(2, 4, 1989),
                                   new MyDate(17, 8, 1986),
                            };

         s = new Student[5] { new Student("John", "BSCS"),
                                   new Student("Paul", "BSIT"),
                                   new Student("George", "BSCP"),
                                   new Student("Jane", "BSCS"),
                                   new Student("May", "BSIT")
                             };
    }
}

基本的には、コンストラクターでこの変数を設定する必要があるということです。

于 2013-02-28T03:22:00.307 に答える
1

エラーに基づいて、フィールド(メンバーデータ)を別の非静的フィールドで初期化しようとしています。あなたはそれをすることはできません。最も簡単な修正は、初期化コードをコンストラクターに移動することです。

したがって、コードは次のようになります

partial class Form
{
   MyDate[] bd = ...;
   Student[] s;

   public Form()
   {
      InitializeComponent();

      s = ...;
   }
}

また、コンストラクターをチェーンする必要Studentがあります。なぜ、使用する代わりに独自の日付クラスがあるのSystem.DateTimeですか?また、フィールドではなく自動プロパティを使用する必要がありpublicます。

public class Student
    {
        public string name { get; set; }
        public string course { get; set; }
        public DateTime bday { get; set; }

        public Student(string name, string course)
        {
            this.name = name;
            this.course = course;
        }

        public Student(string name, string course, DateTime bday)
        : this(name, course)
        {
            this.bday = bday;
        }
}
于 2013-02-28T03:23:50.563 に答える
0

同じことを行う1つの方法は次のとおりです。

    Student[] s = new Student[5];
    s[0] = new Student("John", "BSCS", bd[0]);
    s[1] = new Student("Bill", "BSCS", bd[1]);
于 2013-02-28T03:22:39.120 に答える
0

ここで説明したエラーを再現できないため、ここで何かが欠落している必要があります。次のコードは私にとっては問題なく動作します(.NET 4.0)

public class MyDate
{
    public MyDate(int date, int month, int year)
    {
        this.date = date;
        this.month = month;
        this.year = year;
    }

    public int date;
    public int month;
    public int year;
}

public class Student
{
    public string name;
    public string course;
    public MyDate bday;

    public Student(string name, string course)
    {
        this.name = name;
        this.course = course;
    }

    public Student(string name, string course, MyDate bday)
    {
        this.name = name;
        this.course = course;
        this.bday = bday;
    }
}

..そして私は以下のようにオブジェクトを初期化することができます。

            MyDate[] bd = new MyDate[5]
                          {
                              new MyDate(29, 3, 1990),
                              new MyDate(30, 1, 1988),
                              new MyDate(9, 6, 1987),
                              new MyDate(2, 4, 1989),
                              new MyDate(17, 8, 1986),
                          };

        Student[] s = new Student[5]
                          {
                              new Student("John", "BSCS", bd[0]),
                              new Student("Paul", "BSIT", bd[1]),
                              new Student("George", "BSCP", bd[2]),
                              new Student("Jane", "BSCS", bd[3]),
                              new Student("May", "BSIT", bd[4])
                          };

正確にいつこのエラーが発生しますか?

于 2013-02-28T04:33:13.547 に答える