Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用控制台应用程序调用非静态类_C#_Static_Console Application - Fatal编程技术网

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

C# 使用控制台应用程序调用非静态类,c#,static,console-application,C#,Static,Console Application,我试图用控制台应用程序从另一个类调用一个方法。我尝试调用的类不是静态的 class Program { static void Main(string[] args) { Program p = new Program(); var myString = p.NonStaticMethod(); } public string NonStaticMethod() { return MyNewClass.My

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

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移动到类程序中,这会起作用。 我怎样才能成功地做到这一点?
我不能使类成为静态的,也不能使方法成为静态的。

就像创建程序类的实例来调用非静态方法一样,必须创建MyNewClass的实例:

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

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

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

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

因此,要调用非静态类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";
    }
}

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

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

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