gpt4 book ai didi

c# - 从引用主类的 "child"类调用函数

转载 作者:行者123 更新时间:2023-11-30 19:33:15 24 4
gpt4 key购买 nike

我有些难以解释我的问题,因为我的英语也不好:|!我有以下代码

namespace StighyGames.MyGames {
public class MyGames
{
...
...
CarClass myCar = new CarClass(...);

Main () {
MyGames game = MyGames(...);
}
}

游戏是我的“主要”对象(我的应用程序)。

在我的 CarClass 中我有一些代码......

现在,在 myCar(对象)中,我想调用包含主类 MyGames 的函数(方法).. 方法“GameOver”。这是因为,如果我的车“爆炸”,我必须调用 GameOver 方法。但是 GameOver 方法不能是 myCar 的“ child ”……因为 GameOver 是游戏的一种方法……好的..希望得到解释,我的问题是:“我不知道如何调用主对象类的方法”。

感谢您的帮助!

最佳答案

您有多种选择。

1) 在 CarClass 中创建一个事件,并在 MyGames 中捕获它。

2) 使用委托(delegate)并将函数引用传递给CarClass对象

3) 向 CarClass 添加一个类型为 MyGames 的属性(比如称为“Owner”),并在创建 CarClass 后,将“this”分配给它:myCar.Owner=this。因此,您已经在 CarClass 对象中创建了对其创建者的引用,CarClass 中的代码可以直接访问其所有者的方法。

哪个最好取决于具体情况以及如何使用这些对象。事件可能是首选,因为它提供了最大的灵 active 。委托(delegate)不如事件灵活但效率更高,尽管它们的用途确实略有不同。 (事件实际上是委托(delegate)的扩展)。最后一个可能是最糟糕的形式,一般来说,因为它紧紧地绑定(bind)了对象,但它有时间和地点。

这是#1

public class CarClass
{
// A delegate is a pointer to a function. Events are really a way of late
// binding delegates, so you need to one of these first to have an event.
public delegate void ExplodedHandler(CarClass sender);
// an event is a construct which is used to pass a delegate to another object
// You create an event based for a delegate, and capture it by
// assigning the function reference to it after the object is created.
public event ExplodedHandler Exploded;
protected void CarCrash()
{
... do local stuff
// Make sure ref exists before calling; if its required that something
// outside this object always happen as a result of the crash then
// handle the other case too (throw an error, e.g.)/
// See comments below for explanation of the need to copy the event ref
// before testing against null
ExplodedHandler tempEvent = Exploded;
if (tempEvent != null) {
tempEvent(this);
}
}
}
public class MyGames
{
...
...
CarClass myCar = new CarClass(...);
myCar.Exploded += new ExplodedHandler(GameOver);
Main () {
MyGames game = MyGames(...);
}
void GameOver(CarClass sender) {
// Do stuff

}
}

关于c# - 从引用主类的 "child"类调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com