2015-06-24 2 views
2

Я начинаю на C# и в настоящее время изучаю все о коллекциях List и т. Д. Мне интересно, как/почему код ниже работает:Созданы классы с тем же именем. Как это работает?

создать список студентов:

// Create student list 
List<Student> ListStudents = new List<Student>(); 

Я использую событие WPF Нажмите кнопку, чтобы добавить новый студент (класс) к этому списку (данные собраны из нескольких текстовых полей):

private void btnCreateStudent_Click(object sender, RoutedEventArgs e) 
{ 
    Student student = new Student(); 
    student.FirstName = txtFirstName.Text; 
    student.LastName = txtLastName.Text; 
    student.City = txtCity.Text; 

    // Add student to list 
    ListStudents.Add(student); 
} 

Теперь все это работает отлично, и я могу перебирать список «ListStudents» и увидеть все имена, я добавляю. Однако мне интересно, как именно это не вызывает некоторые ошибки, так как мой код несколько раз создает класс ученика с именем «студент» каждый раз, когда я нажимаю кнопку. Могут быть 20 классов, все названные «студент», но все их уникальные данные сохраняются в ListStudents. Все они находятся в одном пространстве имен.

Простите меня за то, что я новичок, но я очень заинтригован этим. Я понимаю, что классы являются ссылочными типами, поэтому класс «ученик» указывает на блок памяти с соответствующей информацией. В этом случае каждый индекс ListStudents указывает на этот блок памяти, но мой класс с именем «студент» указывает только на одно местоположение, которое является местоположением самого недавно созданного Студента?

Является ли моя реализация выше хорошей практики?

Большое спасибо.

+0

Ваша реализация в порядке. –

ответ

3

Я считаю, что вы говорите об отношениях между списком <> и классом. Списки - это просто указатели на класс.

Имя студента в приведенном выше примере - это локальная переменная, которая существует только в методе, в котором он был создан. Он никогда не будет ссылаться снова, и имя не будет сохранено в списке <>.

В основном, что происходит, создается объект в памяти. Затем ученик ссылается/указывает на этот объект. Затем список указывает на этот объект. Наконец, когда метод заканчивается, ученик выходит из сферы действия и теряется навсегда.

+0

Спасибо, это очень хорошее объяснение. –

+0

@FragMonkey Нет проблем с радостью помочь. – deathismyfriend

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