无法在静态方法中调用公共方法

时间:2016-02-23 03:14:04

标签: c# methods

我真的很抱歉,因为这可能是一个非常新的问题,但我无法在任何地方找到答案。 我对如何调用下面的函数DoStuff感到困惑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public void DoStuff()
        {
            Console.WriteLine("I'm doing something...");
        }
        static void Main(string[] args)
        {
            DoStuff();
        }
    }
}

4 个答案:

答案 0 :(得分:3)

public void是一种实例方法。名为this的函数有一个隐含的隐藏参数。

public static void是一种静态方法。没有隐式的this参数。

您的DoStuff方法未使用this引用,因此请将其更改为public static void DoStuff

答案 1 :(得分:2)

在实例方法与静态方法上进行MSDN Google搜索 Static and instance methods

更改以下内容:

public void DoStuff() 

公开

public static void DoStuff() 
  

如果要在静态void Main中调用公共方法,则需要像这样创建一个新的Program实例

static void Main(string[] args)
{
     var prg = new Program(); 
     prg.DoStuff();
}

答案 2 :(得分:1)

创建Program:

的实例
static void Main(string[] args)
{
    new Program().DoStuff();
}

答案 3 :(得分:1)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public static void DoStuff()
        {
            Console.WriteLine("I'm doing something...");
        }
        static void Main(string[] args)
        {
            DoStuff();
        }
    }
}

C#是一种面向对象的编程语言,意味着一个类中的每个成员。由于在普通方法之前的静态方法init,您应该将DoStuff定义为静态方法,以便可以在Main方法中调用它。创建类后,静态成员已经在计算机的内存中初始化,但是,非静态成员将等待该类的实例。在这种情况下,静态成员属于整个类,非静态成员属于类的实例。因此,您可以使用ClassName.StaticMember来调用StaticMember,并且您需要一个类的实际实例来调用非静态成员。就像:new Program()。DoStuff(),如果DoStuff是非静态方法