3

私はC#について学ぶためにSchoolAppプログラムを作成しています。私はこの主な機能を機能させようとしています:

namespace SchoolApp
{
    class Program
    {
        public static void Main(string[] args)
        {
            School sch = new School("Local School");
            sch.AddStudent(new Student { Name = "James", Age = 22 }); // this function
            sch.AddStudent(new Student { Name = "Jane", Age = 23 });
            Console.WriteLine(sch); // this implementation
        }
    }
}

学校のクラス:

namespace SchoolApp
{
    class School
    {
        public string name;

        public School()
        {
        }

        public School(string the_name)
        {
            name = the_name;
        }

        public void AddStudent(Student student)
        {

        }
    }
}

学生クラス: 名前空間 SchoolApp

{
    class Student
    {
        public int Age;
        public string Name;
        public Student()
        {
            Age = 0;
            Name = "NONAME";
        }

        public string _name 
        {
            get
            {
                return this.Name;
            }
            set
            {
                Name = value;
            }
        }
        public int _age
        {
            get
            {
                return this.Age;
            }
            set
            {
                Age = value;
            }
        }

    }
}

私は C# が初めてで、AddStudent を作成する方法と、WriteLine を使用してクラスを作成する方法についてかなり迷っています。出力は次の行に沿っている必要があります。

学校: 地元の学校 ジェームス 22 歳 ジェーン 23 歳

誰かが List<> を使用することを提案しました 私はそれについて十分に知らないという同じ問題にぶつかりました。

編集:非常に迅速な回答をありがとうございます。私はそれを機能させました。回答を詳細に読むことをお勧めしますので、関連する質問を再度する必要はありません!

4

9 に答える 9

5

Console.WriteLine(t)tから文字列への暗黙の変換を実行します。したがって、すべてのクラスをオーバーライドToString()するか、クラスから明示的に文字列を作成する必要があります。

例:

class School
    {
        public string name;
        List<Student> Students = new List<Student>();

        ...
        public override string ToString()
        {
           var stringValue = name;
           foreach(var student in Students)
           {
              stringValue += student.ToString();
           }
           return stringValue;
        }
    }

class Student
{
    public int Age;
    public string Name;
   ...
    public override string ToString()
    {
        return string.Format("{0} {1}", Name, Age);
    }

}
于 2013-02-24T14:42:42.567 に答える
4

あなたのSchoolクラスでは、生徒の非公開リストが必要なようです。リストはシンプルで、あなたの場合はジェネリック型を取り、Studentアイテムを追加したり削除したりできます。

Schoolクラスで次を使用します。

 private List<Student> students; 

AddStudent コードでは、次のように簡単に使用できます。

students.Add(student);  // student is the variable being passed in and students is the list.  NOTE: You will have to make sure students is intalized to a new List of Student.  students = new List<Student>();

以下のリンクをご覧ください。MSDN は適切なドキュメントですが、dotnetperls はこのような単純なものに適しています。

http://msdn.microsoft.com/en-gb/library/3wcytfd1.aspx

http://www.dotnetperls.com/list-add

于 2013-02-24T14:40:43.767 に答える
2
class School
{
    public string name;
    private List<Student> students = new List<Student>();

    public School()
    {
    }

    public School(string the_name)
    {
        name = the_name;
    }

    public void AddStudent(Student student)
    {
        students.Add(student);
    }

    public override string ToString()
    {
        var sb = new StringBuilder();
        sb.AppendLine(name);
        foreach (var student in students)
        {
            sb.AppendLine(student.ToString());
        }
        return sb.ToString();
    }

}

class Student
{
    ...
    public override string ToString()
    {
        return "Student : " + Name + ", " + Age;
    }
}
于 2013-02-24T14:44:34.090 に答える
1

誰かがI を使用しList<>て、それについて十分に知らないという同じ問題にぶつかることを提案しました。

はい、List<T>クラスはこの状況に適しています。オブジェクトを追加できる .Add メソッドがあります。次に、(ステートメントを使用して) このリストの要素をループし、foreachConsole.WriteLine メソッドを使用して各要素の詳細をコンソールに出力できます。

于 2013-02-24T14:40:52.687 に答える
1

List<Student>のメンバーである必要がある とは別に、それらを出力するためにメイン メソッドにSchoolループ ( foreach) を追加して、次も確認する必要があります。

  • あなたのクラスは公開する必要がありますか?メイン プログラムが同じ名前空間にない可能性があります。
  • getter と setter で自動プロパティを使用することを検討しましたか? http://msdn.microsoft.com/en-us/library/bb384054.aspx

    public int Age { get; set; }
    public String Name { get; set; }
    
  • 命名規則、 http://msdn.microsoft.com/en-us/library/vstudio/618ayhy6( v=vs.100 ).aspx

上記のすべては、あなたが新しいと言ったためです.

于 2013-02-24T14:50:38.230 に答える
0

拡張メソッド「WriteStudent」をConsoleクラスに記述し、studentをパラメーターとして受け入れることができます。メソッド内で使用できますConsole.Write("School: " +objParameter.Name)

于 2013-02-24T14:42:00.413 に答える
0

School対応するa を追加したいようですStudents

public class Student
{
    public string StudentName { get; set; }
    public int Age { get; set; }
}

public class School : Student
{
    public string SchoolName { get; set; }
}

List<School> school = new List<School>();
school.Add(new School() { SchoolName = "USA", StudentName = "har", Age = 25 });
school.Add(new School() { SchoolName = "USM", StudentName = "japz", Age = 25 });
foreach (var item in school)
{
    Console.WriteLine("School Name: {0} Name: {1} Age: {2} ", item.SchoolName, item.StudentName, item.Age);
}
于 2013-02-24T14:40:35.330 に答える
0

2 つの基本的なオプションがあります。

  1. 各生徒に「学校」属性 (変数) を追加する
  2. 各学校に「学生リスト」属性を追加します。

2 番目の方法を好む場合:

学校のクラスに新しい変数を追加する必要があります。

 List<Student> student_list = new List<Student>();

学生を追加するには、次を定義します。

 public void AddStudent(Student student)
 {
 student_list.Add(student);
 }

また、印刷を特定の順序にしたい場合は、学生クラスと学校クラスの両方に ToString() メソッドを追加する必要があることに注意してください。

それが役に立てば幸いです、頑張ってください。

于 2013-02-24T14:45:18.943 に答える
0

Studentまず、クラスのインスタンスをクラスに格納するコンテナが必要ですSchool。次に、AddStudentメソッドで、List クラス自体によって公開されたメソッドを使用して、学生をコレクションに追加するだけです。

class School
{
    public string name;
    private List<Student> students = new List<Student>();

    // ...

    public void AddStudent(Student student)
    { 
        students.Add(student);
    }
}

Listクラスの参考書はこちら。

出力に関しては、クラス自体に関数を記述しSchoolて生徒を出力できます。

public void Print()
{
    Console.WriteLine(name);
    foreach (Student s in students)
        Console.WriteLine(s.Name + ", " + s.Age);
}

そして、あなたのMain単純なようにそれを使用してください:

sch.Print();
于 2013-02-24T14:47:06.947 に答える