У меня есть абстрактный класс Employee и 2 других класса, которые его расширяют (Developer and Manager). Моя проблема заключается в том, что, когда я всякий раз, когда я создаю менеджерОбъекты, которые становятся null при передаче в свойство в C#
Employee man = new Manager(1234567, 30, "Bob", "Pie")
и попытаться установить его в поле Диспетчер нового разработчика,
Employee codemonkey = new Developer(1234568, 20, "Code", "Monkey", (Manager)man)
Я продолжаю получать ArgumentException, что мой менеджер является недействительным. Я сделал некоторые проверки, и это как-то становится null, когда я пытаюсь установить его с свойством Manager в конструкторе. Любые советы относительно того, почему я получаю эту ошибку, будут очень благодарны. ТИА!
Код для каждого ниже:
// Сотрудник класса
public abstract class Employee
{
string firstName, lastName;
int id, yearsEmployed;
//Names must be non-empty
public string FirstName
{
get { return firstName; }
set
{
if (!value.Equals(""))
{
firstName = value;
}
else
throw new ArgumentException("name cannot be empty");
}
}
public string LastName
{
get { return lastName; }
set
{
if (!value.Equals(""))
{
lastName = value;
}
else
throw new ArgumentException("name cannot be empty");
}
}
// IDs must be strings consisting of exactly seven digits.
public int ID
{
get { return id; }
set
{
if (value.ToString().Length == 7)
{
id = value;
}
else
throw new ArgumentException("ID must consist of 7 digits");
}
}
// Years employed must always be non-negative.
public int YearsEmployed
{
get { return yearsEmployed; }
set
{
if (value >= 0)
{
yearsEmployed = value;
}
else
throw new ArgumentException("Year employed must be non-negative");
}
}
//Constructor
public Employee(int id, int yearsEmployed,
string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
this.ID = id;
this.YearsEmployed = yearsEmployed;
}
public abstract int GetLevel { get; }
public abstract string GetTitle { get; }
public string GetFullTitle { get { return GetTitle + " " + GetLevel; } }
}
// класс Разработчик:
public class Developer : Employee
{
Manager manager;
//Manager cannot be null
public Manager Manager
{
get { return manager; }
set
{
if (manager != null)
{
manager = value;
}
else
throw new ArgumentException("Manager cannot be null");
}
}
//Constructor
public Developer(int id, int yearsEmployed, string firstName,
string lastName, Manager manager)
: base(id, yearsEmployed, firstName, lastName)
{
Console.WriteLine("manager is not null:" + manager != null); //True here
this.Manager = manager; // manager is null here
}
public override int GetLevel
{
get { return (this.YearsEmployed + 1)/3; }
}
public override string GetTitle
{
get { return "Developer"; }
}
}
// Менеджер класса
public class Manager : Employee
{
//Constructor
public Manager(int id, int yearsEmployed,
string firstName, string lastName)
: base(id, yearsEmployed, firstName, lastName) { }
public override int GetLevel
{
get { return (YearsEmployed + 1)/2; }
}
public override string GetTitle
{
get { return "Manager"; }
}
}
+1 для sking help для разработчиков, называя их кодами обезьян – Marcelo
Веселый. Я этого даже не заметил. Мой мозг проскочил прямо над этим кодом. Кажется, делает мне обезьяну кода. –
Я всегда думал, что кошка обезьяны была несколько приятным термином.Думаю, не все так и будут. Если это кого-то обидело, мои извинения. – Mel