我有一个抽象类Employee和其他两个类来扩展它(Developer和Manager)。我的问题是,当我每当我创建一个经理当传递给C#中的属性时,对象变为空。
Employee man = new Manager(1234567, 30, "Bob", "Pie")
,并尝试将其设置在一个新开发的管理领域,
Employee codemonkey = new Developer(1234568, 20, "Code", "Monkey", (Manager)man)
我不断收到的ArgumentException,我的经理为空。我做了一些检查,当我尝试在构造函数中使用Manager属性进行设置时,它会以某种方式变为空。任何意见,为什么我得到这个错误将不胜感激。 TIA!
每个的代码如下:
// Employee类
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"; }
}
}
// Manager类
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了在给他们打电话时给开发者一些帮助代码猴子 – Marcelo 2010-01-25 16:57:54
有趣。我甚至没有注意到这一点。我的大脑跳过了代码。我想,让我成为代码猴。 – 2010-01-25 17:09:26
我一直认为代码猴是一个可爱的术语。我想不是每个人都这样看待它。如果冒犯了任何人,我的道歉。 – Mel 2010-01-25 17:36:50