Нужна помощь с классом? Может быть просто - PullRequest
2 голосов
/ 01 августа 2010

То, что я пытаюсь сделать, - это получить идентификатор пользователя для генерации случайных значений на основе типа класса, который должен быть сгенерирован в файле user.cs из userID.Например, класс ученика генерирует идентификатор студента и случайное число, которое класс персонала должен сгенерировать идентификатором персонала и случайное число, проблема, с которой я сталкиваюсь, заключается в том, чтобы получить какие-либо примеры данных userID, чтобы они вообще отображались в выводе консолине получить никаких данных для отображения для идентификатора пользователя. Кто-нибудь может мне помочь.

Вот ссылки, запрашиваемые для просмотра кода

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

UML-диаграмма http://img529.imageshack.us/img529/5936/capturemv.jpg

Ответы [ 3 ]

2 голосов
/ 01 августа 2010

Ваш ИД пользователя нулевой.

Базовый класс пытается напечатать идентификатор пользователя ДО того, как класс Staff может присвоить значение UserID

Ваша проблема находится в классе person, где вы написали "Create userID"

Если вы не знаете, как проходит процесс наследования, это ключевой шаг, который вы пропустили:

1: Если вы вызываете конструктор родительского класса из его дочернего класса, ВСЕ родительского класса запускаются перед дочерним.

Как видите, идентификатор пользователя будет нулевым, если вы замените "create userID" на userID = "1000";, у вас должно быть что-то отображаемое

На мой взгляд, вам просто нужно изменить алгоритм, надеюсь, простое изменение.

1 голос
/ 01 августа 2010

ОК, это вопрос о последовательности конструкторов.

Конструктор базового класса всегда вызывается первым.Вы можете каким-то образом увидеть, что в синтаксисе производного класса вызов базового ctor происходит между списком параметров и производным телом.случайное число для ID сомнительно.Используйте (статический унтер), чтобы сгенерировать 0,1,2,3, и у вас будет нулевой шанс столкновения.Независимо от префикса.

0 голосов
/ 01 августа 2010

На мой взгляд, ваша проблема в том, что сначала вызывается конструктор из класса Person, а затем вызывается конструктор из класса Student (производного класса).Смотрите еще один пост о базовом ключевом слове .

Так что, когда вы звоните "Console.WriteLine (userID);"в конструкторе Person идентификатор пользователя еще не назначен.

Попробуйте добавить "Console.WriteLine (userID);"конструктору в студенческом классе.Это должно работать для вызова "new Student".

Из того, что вы показали, в классе Person нет присвоения userID (кроме случаев, когда есть "// create userID", что вы не показали нам), поэтому вызов «new Person» не вернет никакого userID, потому что это пустая строка.

Btw.последнее утверждение в конструкторе Person "this.DisplayInfo ();"не имеет смысла, потому что вы нигде не пишете (вам придется использовать Console.WriteLine в DisplayInfo или использовать «Console.WriteLine (this.DisplayInfo ());», как в строке выше.Разместите ссылку с полным кодом, чтобы мы могли ее опробовать.

...