使用控制台应用程序调用非静态类

时间:2014-06-12 09:07:05

标签: c# static console-application

我正在尝试使用控制台应用程序从另一个类调用方法。我尝试调用的类不是静态的。

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        var myString = p.NonStaticMethod();
    }

    public string NonStaticMethod()
    {
        return MyNewClass.MyStringMethod(); //Cannot call non static method
    }
}

class MyNewClass
{
    public string MyStringMethod()
    {
        return "method called";
    }
}

我收到错误:

  

无法在静态上下文中访问非静态方法“MyStringMethod”。

如果我将MyStringMethod移动到类程序,这是有效的。 我怎么能成功呢? 我不能使类静态也不能使方法。

5 个答案:

答案 0 :(得分:10)

就像你创建一个Program类的实例来调用NonStaticMethod一样,你必须创建一个MyNewClass实例:

public string NonStaticMethod()
{
    var instance = new MyNewClass();
    return instance.MyStringMethod(); //Can call non static method
}

答案 1 :(得分:4)

非静态类需要一个实例来访问其成员。

在静态Main方法中创建实例并调用非静态类成员:

static void Main(string[] args)
{
    MyNewClass p = new MyNewClass();
    var myString = p.MyStringMethod();
}

答案 2 :(得分:3)

如果要调用非静态类的成员函数,则必须创建其实例,然后调用其所需的函数。

因此,要调用非静态类MyNewClass的MyStringMethod(),请执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        var myString = p.NonStaticMethod();
    }

    public string NonStaticMethod()
    {   
        MyNewClass obj = new MyNewClass();
        if(obj != null)
            return obj.MyStringMethod();
        else
            return "";
    }
}

class MyNewClass
{
    public string MyStringMethod()
    {
        return "method called";
    }
}

答案 3 :(得分:1)

非静态方法需要一个实例。您应该像创建一个程序来调用它的非静态方法一样创建它。

答案 4 :(得分:1)

您需要创建MyNewClass

的实例
class Program
{
    //instantiate MyNewClass
    var myNewClass = new MyNewClass();

    static void Main(string[] args)
    {
        Program p = new Program();
        var myString = p.NonStaticMethod();
    }

    public string NonStaticMethod()
    {
        //use the instance of MyNewClass
        return myNewClass.MyStringMethod(); //Cannot call non static method
    }
}

class MyNewClass
{
    public string MyStringMethod()
    {
        return "method called";
    }
}