需要帮助上课吗?可能很简单
Posted
技术标签:
【中文标题】需要帮助上课吗?可能很简单【英文标题】:Need assistance with a class?Might be simple 【发布时间】:2010-08-01 16:40:25 【问题描述】:我想要做的是让 UserID 根据类的类型生成随机值,因为 userID 应该从 person.cs 生成。 例如,学生类生成一个学生 id 和一个随机数,员工类应该生成一个员工 id 和一个随机数,我遇到的问题是让任何用户 ID 样本数据完全显示在控制台输出中,我没有任何数据显示用户 ID 任何人都可以帮助我。
这是查看代码所需的链接
Person.cs
PersonTest.cs
Student.cs
Staff.cs
Faculty.cs
Person.cs
public class Person
static string title;
protected string firstName;
protected string lastName;
protected string address;
protected string gender;
protected string dateOfBirth;
protected string userID;
protected Random rnd = new Random();
// constructors
public Person()
//end default constructor
public Person(string aTitle, string aFirstName, string aLastName, string aAddress,
string aGender, string aDateOfBirth)
title = aTitle;
firstName = aFirstName;
lastName = aLastName;
address = aAddress;
gender = aGender;
dateOfBirth = aDateOfBirth;
Console.WriteLine( this.DisplayInfo() );
//create userID
Console.WriteLine(userID);
this.DisplayInfo();
//end 6-parameter constructor
刚刚添加
public string DisplayInfo()
return " You have created the person " + firstName + lastName +"\n whose address is" + address + "\n" + " whos is a " + gender + " and was born on " + dateOfBirth;
//end method DisplayInfo
Staff.cs student.cs 目前有相同的数据
public class Staff : Person
public Staff(string aTitle, string aFirstName, string aLastName, string aAddress,
string aGender, string aDateOfBirth)
: base(aTitle, aFirstName, aLastName, aAddress,
aGender, aDateOfBirth)
this.userID = firstName.Substring(0, 1) + lastName.Substring(0, 5);
this.userID = this.userID + this.rnd.Next(1000, 9999);
PersonTest.cs
public class PersonTest
static void Main(string[] args)
Person testPerson = new Student("Mr.", "Merry ", "Lanes", " 493 Bluebane RD", "Male", " 8-06-1953 ");
Person studentPerson = new Person("Mr.", "Jerry ", "Panes", " 493 Bluebane RD", "Male", " 8-06-1953 ");
// THIS DATA SHOWS UP BUT NOT THE USERID
Console.ReadLine();
//end main
【问题讨论】:
“显示”数据的代码在哪里? (我假设您的意思是打印到控制台?) 您的意思是构建一个工作人员来代替学生吗?你显示 Staff.cs。 如果要显示数据,请将其打印到控制台。 你能告诉我们你在哪里显示数据的代码吗? 抱歉停电了,这就是我想弄清楚我该怎么做? 【参考方案1】:您的用户 ID 为空。
在 Staff 类可以给 UserID 赋值之前,基类尝试打印用户 ID
您的问题位于您编写“创建用户 ID”的人员类中
如果您不熟悉这里的继承过程是您错过的关键步骤:
1:如果你从它的子类调用父类的构造函数,所有的父类都会在子类之前运行。
如您所见,用户ID 将为空,如果您将"create userID"
替换为userID = "1000";
,您应该会显示一些内容。
在我看来,你只需要改变你的算法,希望是一个简单的改变。
【讨论】:
【参考方案2】:好的,这是关于构造函数顺序的问题。
基类构造函数总是首先被调用。您可以以某种方式看到,在派生类的语法中,对基 ctor 的调用发生在参数列表和派生体之间。
我们有:
public class Person(....)
protected string userID;
public Person(....)
//create userID //no, print it
Console.WriteLine(userID);
public class Staff : Person
public Staff(...)
: base(....) // now it is printed
this.userID = ...; // and now it is filled
顺便说一句,使用随机数作为 ID 是有问题的。使用(静态计数器)生成 0,1,2,3,您发生碰撞的机会为零。不管前缀是什么。
【讨论】:
【参考方案3】:在我看来,您的问题是首先调用来自 Person 类的构造函数,然后调用来自 Student(派生类)的构造函数。请参阅另一篇关于 base keyword 的帖子。
所以当您调用“Console.WriteLine(userID);”时在 Person 构造函数中,尚未分配任何用户 ID。
尝试添加“Console.WriteLine(userID);”到 Student 类中的构造函数。这应该适用于“新学生”调用。
从您所显示的内容来看,在 Person 类中没有分配 userID(除非在“//create userID”之后有一些您没有向我们展示的内容),因此调用“new Person”不会返回任何 userID,因为它是一个空字符串。
顺便说一句。 Person 构造函数“this.DisplayInfo();”中的最后一条语句没有理由,因为你没有在任何地方写它(你必须在 DisplayInfo 中使用 Console.WriteLine,或者使用 "Console.WriteLine( this.DisplayInfo() );" 如上一行。
贴出完整代码的链接,方便大家试用。
【讨论】:
以上是关于需要帮助上课吗?可能很简单的主要内容,如果未能解决你的问题,请参考以下文章