【发布时间】:2011-04-01 00:36:02
【问题描述】:
在fooBase 类中有SomeProperty。在barBase 类中,我有一个fooBase 类型的字段:
public class fooBase
{
public object SomeProperty { get; set; }
}
public class barBase
{
protected fooBase _foo;
}
很明显,我可以从 barBase 将 SomeProperty 更改为 _foo.SomeProperty = whatever;。
现在在派生类fooChild 中有一些不重要的逻辑,派生类barChild 在其上运行。 barChild 构造函数获取 fooChild 的实例并存储它。
public class fooChild : fooBase { /* someLogic */ }
public class barChild : barBase
{
public barChild(fooChild foo)
{
_foo = foo; // foo of [fooChild] type stored in _foo of [fooBase] type.
}
protected fooChild _getFoo // cast via 'as' to access fooChild logic
{ get { return _foo as fooChild; } }
}
现在要使用 fooChild 的逻辑,我需要访问 _foo as fooChild(_getFoo 可以)。
问题:get { return ... as ... } 是否会创建一个_foo 的本地副本,这样当我在barChild 的派生类中调用SomeFunction() 时,不会在barBase 中发生属性更改SomeProperty。 _foo?
public class somewhereElse : barChild
{
public void SomeFunction()
{
_getFoo.SomeProperty = new object();
// now barBase:_foo.SomeProperty is still old object?
}
}
如果是,我该如何避免这种情况?
如果不是,我怎么知道?
【问题讨论】:
-
我讨厌 foos 和 bar,如果你输入一些现实生活中的名字会更容易理解你在问什么,因为没有人愿意花更多的时间来理解你的问题。
-
@Akash Kava:我很抱歉我的 foos 和 bar 冒犯了你。复制/粘贴我的实际代码并将其去除所有不必要的部分需要做更多的工作。 @all:感谢您启发了我在 C++ 中的思维迷雾。 ^^
标签: c# properties pass-by-reference