C#无需传递引用即可访问包含类的方法

时间:2013-07-23 20:47:49

标签: c# reference constructor containers

有没有办法在嵌套拥有的类的初始化(构造函数逻辑)中访问包含/封闭类,而不需要将引用作为构造函数参数传递?

我不想将引用作为嵌套拥有的类的构造函数参数传递给包含类的原因是因为我的程序中几乎每个对象都是需要它,并且只是手动传递一个参数每次都不会改变。我希望尽可能简化编程,因为我的其他团队成员将使用我的引擎。

我尝试为容器类创建一个方法,在添加将新实例作为参数的新对象时使用,然后将该实例的“容器”变量设置为“this”(容器)但是嵌套拥有的对象的初始化代码首先发生,这违背了目的(我希望能够在初始化期间访问容器,因此容器变量需要在构造函数之前设置,而不是之后代码被执行)。

有任何方法可以实现这一目标吗?或者我每次创建一个新的嵌套拥有的对象时,我注定要手动传入对容器类的引用?

修改

示例: 假设我正在制作一个视频游戏,并且该玩家将施放一个产生HealerGoblin的魔法咒语:

来自玩家类:

spawnMonster(new HealerGoblin(30)); //30 = Monster's Combat Level

在HealerGoblin班:

public HealerGoblin(int Level)
{
    Owner.Health += Level; //Owner in this case, being the player.
}

正如你可能看到的那样,玩家将施放产卵怪物咒语,选择一个30级治疗精灵,并且治疗精灵在他产生时会产生特殊效果,使其拥有者的健康增加一定量(在这种情况下等于地精的水平)。 (请记住这是一个假设,我知道有其他的,可能更好的方式来做这样的事情,但这只是我想要做的一个例子。) / p>

所以问题是,游戏中的任何玩家或NPC都可以施放该咒语并成为“所有者”。在执行引用所有者的初始化代码时,如何设置goblin的Owner属性?

我知道我可以通过引用传递所有者:

spawnMonster(new HealerGoblin(this, 30); //First argument being what Owner is set to.

但我希望程序中的每个对象都自动引用它们的“所有者”,并在每次初始化一个新对象时手动放入(this),并且必须设置一个新的所有者参数。我创建一个新的派生类,只是看起来很草率和反直觉,因为你永远不会传递参考。

所以我的问题是除了通过构造函数通过引用传递之外,还有什么其他方法可以在初始化之前获取对容器/所有者对象的引用?如果有的话?

2 个答案:

答案 0 :(得分:1)

我理解你的痛苦。我也去过那儿。但答案是标准的编程方式。它可能通过使用调用堆栈,反射和一些黑客工作,但由于你试图简化你的代码,你不希望在你的代码中有这样的东西。

答案 1 :(得分:0)

据我所知。简而言之,没有这样的功能。