簡體   English   中英

使用控制台應用程序調用非靜態類

[英]Call a non-static class with a 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移動到類程序,這是有效的。 我怎么能成功呢? 我不能使類靜態也不能使方法。

就像您創建一個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";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM