从具有只读值的抽象类中调用构造函数



我正试图将此构造函数从Student调用到collegestudent中。

这是构造函数:

abstract class Student
{
public readonly string FirstName;
public readonly string LastName;
public readonly string StudentID;
public Student(string Value)
{
FirstName = Value;
LastName = Value;
StudentID = Value;
}
public string Value
{
get { return FirstName + LastName + StudentID; }
}
}

这是学院学生:

class CollegeStudent : Student, IMathClass
{
public Student(string Tim, string russell, string studentid)
{
FirstName = Tim;
LastName = russell;
studentID = studentid;
}
}

我收到以下错误

  • "方法必须具有返回类型">
  • "只读字段不能分配给">

问题可能是初始化顺序。readonly变量只能赋值一次(当它是类变量时,在构造函数中(。创建对象时,变量将已由Student构造函数初始化,因为它将首先调用(在CollegeStudent的构造函数之前(。当您尝试在CollegeStudent构造函数中(再次(初始化它时,它已经初始化,因此会引发错误。

此外,我建议进行一些更改:

第一:使属性不是readonly,而是仅定义一个公共getter和私有/受保护的setter。这可能已经解决了你的问题。

public string Firstname {get; protected set;}

第二:接下来是CollegeStundet的构造函数和参数名称。由于这些都是参数(包含信息的变量(,它们看起来真的很奇怪。更好的是:

public CollegeStudent(string firstName, string lastName, string studentId) 

您将像这样使用它来创建一个新的CollegeStudent对象:

// this uses polymorphism as all CollegeStudnet are Student
Student studentX = new CollegeStundet("Tim", "Russel", "123AAA"); 

第三:在默认构造函数中将所有属性设置为相同的值真的很奇怪。总的来说,这绝不是一个好主意。至少提供一个通用构造函数,将这三个构造函数初始化为不同的值。你仍然可以让他们成为";"空";(null-当使用默认构造函数时(当您已经遵循了我的第一个建议时。

Student(string firstName, string lastName, string studentId);
// the base keyword will pass the values to the constructor of Student
CollegeStudent(string firstName, string lastName, string studentId) : base(firstName, lastName, studentId) 

但一般来说,我建议在定义它们的类中初始化它们(本例中为Student构造函数(。当您需要更改Student外部的值,并且您确实希望这些值不可写时,您的概念出现了问题。

相关内容

  • 没有找到相关文章

最新更新