2013-04-14 1 views
0

Надеюсь, я достаточно правильно описываю это. Я пытаюсь сохранить несколько деталей, введенных пользователем, и сохранить их в списке. Однако текущий способ, который я делаю, заключается только в сохранении типа объекта/имени, а не данных. Ниже мой код, как бы сохранить данные объектов, а не имя объекта?Добавление содержимого объекта в список, а не тип параметра?

Student stud = new Student(); 
stud.Enter_Student(); 
_studentList.Add(stud); 

Enter Student

class Student : Person 
{ 
    public string StudentId { get; private set; } 
    public string Subject { get; private set; } 

    //string[] _studentdb = new string[4]; 

    public Student() 
    { 
     StudentId = "abc123"; 
     Subject = "Building Subject"; 
    } 

    public void Enter_Student() 
    { 
      this.Person_Prompt_Print(); //Prompts for user 
      this.Address_Prompt_Print(); 
      this.Contact_Prompt_Print(); 
      Console.SetCursorPosition(4, 18); 
      Console.WriteLine("Student ID:"); 

      this.Enter_Person(); // Inputs from user 
      this.Enter_Address(); 
      this.Enter_Contacts(); 
      StudentId = Console.ReadLine(); 
      Console.SetCursorPosition(30, 18); 
    } 
} 

Дата образца от лица класса

class Person 
{ 

    Tidyup tidy = new Tidyup(); 

    public string FirstName { get; private set; } 
    public string Surname { get; private set; } 
    public string MiddleName { get; private set; } 
    public string AddressLine1 { get; private set; } 
    public string AddressLine2 { get; private set; } 
    public string Town { get; private set; } 
    public string Postcode { get; private set; } 
    public string Email { get; private set; } 
    public string Telephone { get; private set; } 



    public Person() 
    { 
     FirstName = "Name"; 
     Surname = "Surname"; 
     MiddleName = "Middle Name"; 
     AddressLine1 = "Address"; 
     AddressLine2 = "Address Ln2"; 
     Town = "Town"; 
     Postcode = "<xxx>/<xxx>"; 
     Email = "[email protected]"; 
     Telephone = "0800 0000000"; 
    } 

    public void Person_Prompt_Print() 
    { 
     // Program Frame 
     tidy.Line_Top(); 
     tidy.Line_Base(); 
     tidy.Sides_Left(); 
     tidy.Sides_Right(); 

     Console.SetCursorPosition(4, 2); //Prompts for user 
     Console.WriteLine("FirstName:"); 
     Console.SetCursorPosition(4, 4); 
     Console.WriteLine("Surname:"); 
     Console.SetCursorPosition(4, 6); 
     Console.WriteLine("Middle Name:"); 
    } 

    public void Address_Prompt_Print() 
    { 
     Console.SetCursorPosition(4, 8); //Prompts for user 
     Console.WriteLine("House Number/Name:"); 
     Console.SetCursorPosition(4, 10); 
     Console.WriteLine("Street:"); 
     Console.SetCursorPosition(4, 12); 
     Console.WriteLine("Town:"); 
     Console.SetCursorPosition(4, 14); 
     Console.WriteLine("Post Code:"); 
    } 

    public void Contact_Prompt_Print() 
    { 
     Console.SetCursorPosition(4, 16); 
     Console.WriteLine("Email:"); 
     Console.SetCursorPosition(4, 18); 
     Console.WriteLine("Telephone:"); 
    } 

    public void Enter_Person() 
    { 

     Console.SetCursorPosition(30, 2); // Inputs from user 
     FirstName = Console.ReadLine(); 
     Console.SetCursorPosition(30, 4); 
     Surname = Console.ReadLine(); 
     Console.SetCursorPosition(30, 6); 
     MiddleName = Console.ReadLine(); 
    } 

    public void Enter_Address() 
    { 

     Console.SetCursorPosition(30, 8); // Inputs from user 
     AddressLine1 = Console.ReadLine(); 
     Console.SetCursorPosition(30, 10); 
     AddressLine2 = Console.ReadLine(); 
     Console.SetCursorPosition(30, 12); 
     Town = Console.ReadLine(); 
     Console.SetCursorPosition(30, 14); 
     Postcode = Console.ReadLine(); 
    } 

    public void Enter_Contacts() 
    { 
     Console.SetCursorPosition(30, 16); 
     Email = Console.ReadLine(); 
     Console.SetCursorPosition(30, 18); 
     Telephone = Console.ReadLine(); 
    } 

} // End of Class 

И, наконец, я распечатывания с помощью простого вложенного цикла Еогеасп

public void Print_all_student() 
{ 
    Console.Clear(); 

    foreach (Student t in _studentList) 
    { 
     // print another list items. 
     foreach (Student t1 in _studentList) 
     { 
      Console.WriteLine("/" + t + "/" + t1); 
     } 
    } 
    Console.ReadKey(); 
} 

Если кто-то может помогите мне понять, что Мне не хватает и как получить доступ к данным для распечатки, я был бы благодарен. Заранее благодарю вас за любую помощь, которую вы можете дать.

+0

Почему вы печатаете комбинацию- студенты? t и t1? Почему вы печатаете класс, а не внутренний контент? Кроме того, что вы подразумеваете под «спасением»? У вас какая-то сериализация или вы имеете в виду, что вы помещаете эту информацию в память вашей программы? – LightStriker

+0

Мое плохое объяснение, все, что я пытаюсь распечатать внутренний контент, но не знаю, как получить к нему доступ. –

+0

Вы можете получить доступ к членам объекта с помощью «.» ... Как сказал devdigital. 'MyStudent.FirstName'. Это удивительно, потому что вы используете его везде ... например 'this.FirstName' или' Console.WriteLine() '. Одно свойство, а другое - метод, но оба являются членами класса. – LightStriker

ответ

0

Есть много вопросов здесь, но в вашем Console.WriteLine вызова, вы только отображение Student типа, поэтому ToString метод на Student типа будет вызываться, который по умолчанию будет отображаться имя типа.

Вы хотите отобразить отдельные свойства типа Student, например.

foreach (Student student in studentList) 
{ 
    Console.WriteLine(student.FirstName); 
    Console.WriteLine(student.Surname); 
    // etc 
} 

Помните, что Student происходит от Person, поэтому всех открытых свойств доступны из Student ссылки, потому что Student является Person.

также:

  1. У вас есть резервный цикл - требуется только один цикл, который перебирает studentList
  2. Существует реальная смесь проблем здесь. Ваши Student и Person типов не должны быть связаны с UI (т.е. что-либо делать с Console вызовов)
  3. палочки с PascalCase (акой UpperCamelCase) для ваших имен методов, не подчеркивает
+0

Спасибо за это, один вопрос о вашем третьем вопросе об использовании имен методов PascalCase был предложен resharper, который я установил, который, как я предполагал, показывал мне правильную практику, я назвал их раньше, как вы предположили, это известный стандарт? –

+0

Это будет зависеть от вашей конкретной конфигурации ReSharper, но лучше всего следовать стандартам StyleCop (http: // stylecop.codeplex.com/). StyleCop поставляется с плагином для ReSharper, который должен работать в зависимости от версии ReSharper, в которой вы работаете. – devdigital

+0

Благодарим вас за эту ссылку и вашу поддержку. Я установил расширение на мой экземпляр resharper, надеюсь, по крайней мере, имя моего метода будет правильным сейчас. –

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