2013-02-24 3 views
2

Делаю программу SchoolApp, чтобы узнать о C# и у меня есть эта основная функция, что я пытаюсь сделать работу:WriteLine с классом

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) 
     { 

     } 
    } 
} 

класс 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 Jane, 23

Кто-то предложил использовать список <> Я попал в ту же проблему, не зная, достаточно об этом.

EDIT: Спасибо всем за ваши очень быстрые ответы. Я заработал, и теперь буду внимательно читать ответы, поэтому мне больше не нужно задавать связанные вопросы!

ответ

0

Похоже, вы хотите добавить School с соответствующим 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); 
} 
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

1

Кто-то предложил использовать List<> я ударил с той же проблемой, не зная, достаточно об этом.

Да, класс List<T> подходит для этой ситуации. Он имеет метод .Add, который позволяет добавлять к нему объекты. А затем вы можете прокручивать элементы этого списка (используя оператор foreach), а затем распечатывать данные каждого элемента на консоли с помощью метода Console.WriteLine.

0

Вы можете написать метод расширения «WriteStudent» в класс Console и принять учащийся в качестве параметра.Внутри метода вы можете использовать Console.Write("School: " +objParameter.Name)

1

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

} 
+0

Как я могу его отменить? Я попробовал, и я только что получил молот с ошибками. – Mappan

+1

я добавил пример –

+0

\t Ошибка 1 \t «SchoolApp.School.ToString()»: не все пути кода возвращают значение \t Здесь: общественное переопределения строки ToString() – Mappan

1
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; 
    } 
} 
+0

Это сработало отлично. Теперь, чтобы изучить это в глубину. Большое спасибо. – Mappan

0

у вас есть 2 основных варианта:

  1. , чтобы добавить "школьный" атрибут (переменная) для каждого студента
  2. добавить «список студентов "атрибут для каждой школы.

, если вы предпочитаете второй способ:

вам нужно добавить новую переменную класса школы:

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

и для того чтобы добавить студента, определить:

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

также обратите внимание, что если вы хотите, чтобы печать была в определенном порядке, вам нужно добавить метод ToString() как в школьном, так и в школьном классе.

надеюсь, что это поможет, удачи.

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

Here является ссылкой на List класса.

Что касается вывода, вы можете написать функцию в самом School классе, чтобы вывести студентов:

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

И использовать его в Main просто нравится:

sch.Print(); 
0

Отдельно от List<Student>, который должен быть членом School, добавлен с петлей (foreach) в вашем основном методе, чтобы распечатать их, вы также должны посмотреть на следующее:

Все вышеперечисленное, потому что вы сказали, что вы новичок, так что я подумал, может также дать вам несколько советов.

Смежные вопросы