c# - 创建了同名的类。这是如何运作的?

标签 c# oop reference

我是 C# 的初学者,目前正在学习有关列表集合等的所有内容。我想知道下面的代码如何/为什么工作:

我创建了一个学生列表:

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

我使用 WPF 按钮单击事件将新学生(类(class))添加到此列表(数据是从一些文本框收集的):

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”列表并查看我添加的所有姓名。然而我想知道这究竟是如何不引发一些错误的,因为每次我单击按钮时,我的代码都会重复创建一个名为“student”的学生类。可能有 20 个类(class)都名为“student”,但它们的所有独特信息都保留在 ListStudents 中。它们都在同一个命名空间中。

请原谅我是新人,但我对此非常感兴趣。我知道类是引用类型,因此“学生”类指向包含相关信息的内存块。是不是ListStudents的每个索引都指向这 block 内存,但我的名为“student”的类只指向一个位置,即最近创建的Student的位置?

我的实现是否高于良好实践?

非常感谢。

最佳答案

我相信你正在谈论List<>和类之间的关系。 列表只是指向类的指针。

上面示例中的名称 Student 是一个局部变量,它仅存在于创建它的方法中。它永远不会被再次引用,并且该名称不会保存在 List<> 中。

基本上发生的事情是在内存中创建一个对象。然后学生引用/指向该对象。然后列表指向该对象。最后,当该方法结束时,学生超出范围并永远丢失。

关于c# - 创建了同名的类。这是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016582/

相关文章:

php - 静态方法 : are they still bad considering PHP 5. 3 后期静态绑定(bind)?

c++ - 按值返回与右值引用

c# - 完全迁移到 WPF 项目的好处和麻烦

c# - Windows Phone 8 Longlistselector 图像缓存

oop - 抽象与抽象类

c# - WCF 能否通过网络保持引用相等性?

java - 我无法理解对象引用在 Java 中的工作方式?

C# Property get set 不设置值

c# - 是否可以将 SQLite 文件放入 Google Drive 并使用 Google Drive API 来更新其数据?

c++ - 构造函数中的数组