【问题标题】:Static Method Call静态方法调用
【发布时间】:2011-10-20 04:33:55
【问题描述】:

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

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

  static void fm()
  {
    ;
  }

  void Initialize()
  {
     ;
  }

}

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

【问题讨论】:

  • 它不会调用Initialize方法。

标签: oop static constructor static-methods


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您应该寻找一个静态构造函数,如果是这样,并且如果您使用的是 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!!!
    

    【讨论】:

      【解决方案3】:

      在您的情况下,将不会调用 Initialize,因为它位于默认构造函数中。如果你的默认构造函数也是静态的,那么 Initialize 方法将首先被调用,然后 fm() 方法将被调用..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-20
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        相关资源
        最近更新 更多