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

含复制构造函数的Student类无法实例化的问题求助

解决Student类的实例化问题

你的问题核心在于:当自定义了构造函数(这里是复制构造函数)后,C#编译器不会自动生成默认的无参构造函数,导致你无法直接通过new Student()创建第一个实例,而复制构造函数又依赖已存在的Student对象,陷入了循环。

有两种可行的解决方案:

方案一:添加无参构造函数

在Student类中手动添加无参构造函数,这样就能先创建空实例,再通过属性赋值,之后也可以用复制构造函数复制对象:

using System;

namespace ConsoleApp1
{
    public class Student
    {
        // 添加无参构造函数
        public Student()
        {
        }

        public Student(Student student)
        {
            StudentId = student.StudentId;
            FullName = student.FullName;
        }

        public int StudentId { get; set; }
        public string FullName { get; set; }
    }
}

使用示例:

// 创建第一个实例并赋值
Student student1 = new Student();
student1.StudentId = 1;
student1.FullName = "Fatemeh Rostamipour";

// 通过复制构造函数创建副本
Student student2 = new Student(student1);

方案二:添加带属性参数的构造函数

直接定义一个能初始化属性的构造函数,用来创建第一个实例,之后再用复制构造函数:

using System;

namespace ConsoleApp1
{
    public class Student
    {
        // 带参数的构造函数,直接初始化属性
        public Student(int studentId, string fullName)
        {
            StudentId = studentId;
            FullName = fullName;
        }

        public Student(Student student)
        {
            StudentId = student.StudentId;
            FullName = student.FullName;
        }

        public int StudentId { get; set; }
        public string FullName { get; set; }
    }
}

使用示例:

// 创建第一个实例
Student student1 = new Student(1, "Fatemeh Rostamipour");

// 通过复制构造函数创建副本
Student student2 = new Student(student1);

补充说明

在C#中,默认情况下如果类没有定义任何构造函数,编译器会自动生成一个无参构造函数;但只要你定义了任意一个自定义构造函数(比如复制构造函数),编译器就会停止自动生成无参构造函数,这就是你执行new Student()时报错的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:25:59