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

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

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