静态方法调用

发布于 12-11 02:34 字数 227 浏览 0 评论 0原文

我有一个类,它有一个静态方法,如下所示。

class A
{
  A()
  {
     Initialize();
  }

  static void fm()
  {
    ;
  }

  void Initialize()
  {
     ;
  }

}

现在在程序中如果我调用A.fm(),它会调用Initialize方法吗?

I have one class which has one static method as shown below.

class A
{
  A()
  {
     Initialize();
  }

  static void fm()
  {
    ;
  }

  void Initialize()
  {
     ;
  }

}

Now in the program if i call A.fm(), Will it call the Initialize method or not?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

春夜浅2024-12-18 02:34:56

假设这是用 C++、Java 或 C# 等语言编写的:

不会。仅当使用 new 或该类型的变量(本例中为 A)被声明为局部变量时,才会调用构造函数。

Assuming that this is in a language like C++, Java, or C#:

It will not. Constructors only get called when new is used or when a variable of that type (A in this case) is declared as a local variable.

半岛未凉2024-12-18 02:34:56

您应该寻找一个静态构造函数,如果是这样,并且您使用的是 c#,您可能想运行此代码。静态构造函数允许您在运行类中的任何其他代码之前运行初始化代码

public class A
{
    public static void Method()
    {
        Console.WriteLine("METHOD!!!");
    }

    public void Method2()
    {
        Console.WriteLine("INSTANCE METHOD!");
    }

    static A()
    {
        Console.WriteLine("STATIC CTOR");
    }
}

class Program
{
    static void Main(string[] args)
    {
        A.Method();
        new A().Method2();
        A.Method();
        A.Method();
        A.Method();
        A.Method();
        A.Method();
        A.Method();
    }
}

然后就是输出了!

STATIC CTOR
METHOD!!!
INSTANCE METHOD!
METHOD!!!
METHOD!!!
METHOD!!!
METHOD!!!
METHOD!!!
METHOD!!!

You should be looking for a static constructor, if so and if youre using c# you might wanna run this code. Static constructors grants that you run initializing code before running any other code within the class.

public class A
{
    public static void Method()
    {
        Console.WriteLine("METHOD!!!");
    }

    public void Method2()
    {
        Console.WriteLine("INSTANCE METHOD!");
    }

    static A()
    {
        Console.WriteLine("STATIC CTOR");
    }
}

class Program
{
    static void Main(string[] args)
    {
        A.Method();
        new A().Method2();
        A.Method();
        A.Method();
        A.Method();
        A.Method();
        A.Method();
        A.Method();
    }
}

Its then the output!

STATIC CTOR
METHOD!!!
INSTANCE METHOD!
METHOD!!!
METHOD!!!
METHOD!!!
METHOD!!!
METHOD!!!
METHOD!!!
少女情怀诗2024-12-18 02:34:56

在您的情况下,不会调用 Initialize,因为它位于默认构造函数内。如果将默认构造函数设为静态,则将按顺序首先调用 Initialize 方法,然后调用 fm() 方法。

In your case, the Initialize will not be called as it is inside a default constructor. If you make your default constructor also static, then the Initialize method will be called first in sequence and after that the fm() method will be called..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文