含复制构造函数的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
相关产品推荐
相关产品推荐

