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

本文关键字:静态类 调用 应用程序 控制台 | 更新日期: 2023-09-27 18:08:12

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

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移动到类程序中,则可以正常工作。我怎样才能做到这一点呢?

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

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

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

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

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

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

如果你想调用非静态类的成员函数,那么你必须创建它的实例,然后调用它所需的函数。

对于调用非静态类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";
    }
}

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

您需要创建一个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";
    }
}