使用控制台应用程序调用非静态类
我正在尝试使用控制台应用程序从另一个类调用方法。 我尝试调用的类不是静态的。
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"; } }