【问题标题】:In C#, if I call a method from a different class which is not instantiated, is that class instantiated when the method is called?在 C# 中,如果我从未实例化的不同类中调用方法,则在调用该方法时该类是否已实例化?
【发布时间】:2012-01-31 03:45:21
【问题描述】:
class State
{
    public void FalconPunch()
    {
        Console.Writeline("Punched.")
    }
}

class Testy
{
    public void TryThis()
    {
        State.FalconPunch();
    }
}

当 Testy 类中的 TryThis() 方法调用 State.FalconPunch() 时,为了执行 FalconPunch() 方法,是否会实例化 State 类(即使是片刻)?

我正在尝试确定是否需要静态状态,以供我游戏中的所有 AI 代理使用。它在移动平台上,所以我在尝试编写时考虑到优化。

【问题讨论】:

  • 一开始就无法编译。 (抱歉,猎鹰船长……)
  • 你为什么不先尝试?正如很多人所提到的,这段代码甚至不会编译。您至少可以在发布问题之前尝试过。
  • 我试过了,只是我的错误——在我使用的引擎中,类在GameObject上的调用方式,它已经被认为是一个实例,所以它可以在没有静态的情况下工作.

标签: c# memory memory-management


【解决方案1】:

你不能在没有引用实例的情况下调用FalconPunch,因为它不是static

您必须先手动创建一个新实例。

短: new State().FalconPunch()

完成: var s = new State(); s.FalconPunch();

【讨论】:

  • 当然,您总是可以创建static 方法,在这种情况下,您将不必首先创建该类的实例。这可能就是提问者想要的。
【解决方案2】:

FalconPunch 不是静态方法,因此无法编译。您必须专门创建一个实例才能调用该方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多