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

8
我正在尝试使用控制台应用程序从另一个类中调用一个方法。我试图调用的类不是静态的。
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个回答

13

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

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

5

非静态类需要实例才能访问其成员。

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

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

3

如果你想调用非静态类的成员函数,那么你需要先创建它的实例,然后调用所需的函数。因此,要调用非静态类MyNewClass的MyStringMethod(),请执行以下操作:

```c++ MyNewClass obj; obj.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";
    }
}

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";
    }
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接