我有一个看起来像这样的课程:
public class Organization
{
public List<IJob> Jobs { get; set; }
public IJob BigBoss { get; set; }
public Organization()
{
BigBoss = new Doctor();
Jobs = new List<IJob>
{
BigBoss,
new Doctor(),
new Doctor()
};
}
}
如果我将BigBoss属性设置为新值,我希望在列表中更新该值。在BigBoss指向新内容之后,列表中的第一项也应如此。我知道以下代码不会在C#中执行此操作,因为C#与引用一起使用的方式:
static void Main(string[] args)
{
var test = new Organization();
test.BigBoss = new Developer();
//test.Jobs[0] is still pointing to a Doctor, not a Developer
Console.WriteLine(test.Jobs[0]);
}
还有其他一些干净的方式吗?
答案 0 :(得分:2)
利用BigBoss
的属性设置器来操作作业。然后在getter中返回BigBoss
Jobs[0]
。
答案 1 :(得分:2)
Jobs[0]
时, BigBoss = new Doctor();
引用new Organization();
更改时:test.BigBoss = new Developer();
你的BigBoss是指Developer
,但是Jobs [0]仍然引用旧的BigBoss。
您可以像这样更改您的组织:
public class Organization
{
public List<IJob> Jobs { get; set; }
private IJob bigBoss;
public IJob BigBoss { get {return Jobs[0];} set { Jobs[0] = value; } }
public Organization()
{
bigBoss = new Doctor();
Jobs = new List<IJob>
{
bigBoss,
new Doctor(),
new Doctor()
};
}
}