You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需手动创建继承类实现C#自动添加新学生?

解决思路:无需继承,直接创建自定义学生实例

你现在的问题核心是:当前的student类只有一个固定值的无参构造函数,所以每次创建出来的都是同一个学生。其实完全不需要用继承来解决不同学生的问题——继承是用来区分不同类型的学生(比如本科生、研究生),而不同的学生个体只需要创建不同的实例即可。

下面是具体的改进步骤和代码示例:

1. 给类添加带参数的构造函数

我们可以新增一个接收参数的构造函数,这样在创建学生对象时,就能直接传入该学生的专属信息,不用每次都用默认值。同时可以保留无参构造函数作为"模板学生"使用。

2. 用属性替代公共字段(C#最佳实践)

直接把字段设为public虽然简单,但在实际开发中更推荐用属性(get; set;)来封装数据,这是面向对象的基础规范,也方便后续扩展。

3. 改进后的完整代码

using System;
using System.Collections.Generic;
using System.Linq;

// 推荐类名使用帕斯卡命名法:Student(首字母大写)
class Student 
{
    // 用属性替代公共字段,符合C#封装规范
    public string Studentnummer { get; set; }
    public string Naam { get; set; }
    public string Postcode { get; set; }
    public string Telefoonnummer { get; set; }
    public List<string> Vakken { get; set; }

    // 无参构造函数:保留默认模板
    public Student() 
    {
        Studentnummer = "S101010";
        Naam = "Voornaam Achternaam";
        Postcode = "1111AT";
        Telefoonnummer = "31+ 0571 123456";
        Vakken = new List<string> { "Voorbeeld vak 1", "Voorbeeld vak 2" };
    }

    // 带参数的构造函数:支持创建自定义学生
    public Student(string studentnummer, string naam, string postcode, string telefoonnummer, List<string> vakken)
    {
        Studentnummer = studentnummer;
        Naam = naam;
        Postcode = postcode;
        Telefoonnummer = telefoonnummer;
        // 这里的空引用防护:避免传入null导致后续操作出错(入门阶段可以先理解逻辑)
        Vakken = vakken ?? new List<string>();
    }

    // 简化ToString方法,让输出更易读
    public override string ToString() 
    {
        return $"Studentnummer: {Studentnummer}\nNaam: {Naam}\nPostcode: {Postcode}\nTelefoonnummer: {Telefoonnummer}\nVakken: {string.Join(", ", Vakken)}";
    }
}

class Program 
{
    static void Main(string[] args) 
    {
        // 创建默认模板学生
        Student standaardStudent = new Student();
        Console.WriteLine("Standaard student:");
        Console.WriteLine(standaardStudent.ToString());
        Console.WriteLine("\n------------------------\n");

        // 创建第一个自定义学生
        List<string> mariasVakken = new List<string> { "Wiskunde", "Nederlands" };
        Student maria = new Student("S123456", "Maria Janssen", "2222BT", "31+ 06 12345678", mariasVakken);
        Console.WriteLine("Maria's gegevens:");
        Console.WriteLine(maria.ToString());
        Console.WriteLine("\n------------------------\n");

        // 创建第二个自定义学生
        List<string> jansVakken = new List<string> { "Informatica", "Engels" };
        Student jan = new Student("S654321", "Jan de Vries", "3333CT", "31+ 06 87654321", jansVakken);
        Console.WriteLine("Jan's gegevens:");
        Console.WriteLine(jan.ToString());
    }
}

4. 关键说明

  • 不需要继承的原因:继承的作用是复用不同类型对象的共性(比如UndergraduateStudent和GraduateStudent可能有不同的属性或方法),而你需要的是同一类型(普通学生)下的不同个体,直接通过构造函数传参创建实例就足够了。
  • 帕斯卡命名法:C#中类名、属性名通常用帕斯卡命名(首字母大写),这是行业通用的编码规范,能让代码更易读。
  • 空引用防护:在带参数的构造函数里,我们用vakken ?? new List<string>()确保即使传入的课程列表为null,也不会出现空引用异常,这是入门阶段可以逐步掌握的小技巧。

运行上面的代码,你就能看到三个不同的学生实例被创建并输出,完全不需要写任何继承类!

内容的提问来源于stack exchange,提问作者Venepskeuten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:40:55