【发布时间】:2016-05-10 03:09:11
【问题描述】:
我有几个主对象。每个 ot 他们都有从属对象的列表。每个从属对象都有两个字段:field1 和 field2。仅当请求字段的主要对象不是从属对象的所有者时,我才需要访问主要对象中的字段。
class SlaveObj()
{
...
private readonly int field1;
private readonly string field2;
...
public int GetField1()
{
// if asker object is not my owner
// return field1
}
}
class MainObj()
{
...
List<SlaveObj> slaves = new List<SlaveObj>();
...
public int GetField1(MainObj other)
{
return other.slaves[0].GetField1();
}
}
首先,我尝试的是this。我只是试图检查,就像在第一个答案中一样,提问者是什么对象。但是对于 MainObj 的任何实例,我都有类似 Project1.MainObj 的东西。所以,我无法识别提问者是否是所有者。
更改后的代码(不能按我的意愿工作)
class SlaveObj()
{
...
private MainObj owner;
private readonly int field1;
private readonly string field2;
...
public int GetField1(MainObj asker)
{
if(asker != owner) return field1;
}
}
class MainObj()
{
...
List<SlaveObj> slaves = new List<SlaveObj>();
...
public int GetField1(MainObj other)
{
return other.slaves[0].GetField1(this);
}
}
【问题讨论】:
-
当您执行
slaves[0].GetField1()时,SlaveObj不知道从哪个MainObj实例(如果有!)调用了该方法。您需要为SlaveObj提供一种方法来识别其包含的MainObj,例如,通过构造函数注入在question you link to 中显示。 -
您能否添加一个示例,何时
GetField1()应返回field1以及何时field2(我不清楚您所说的所有者是什么)?也许您不需要SlaveObj.GetField1(),只需检查MainObj.GetField1()中的所有权? -
@Sinatr 我添加了我的一段代码。我需要知道外部 Main 对象的一个 SlaveObj 的属性,但不知道它自己的 slaveObj 属性。
-
@gekOn 如果主对象不是
SlaveObj.GetField1()内部从属对象的主对象,你想返回什么?
标签: c# oop properties