我正在尝试使用控制台应用程序从另一个类调用方法。我尝试调用的类不是静态的。
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移动到类程序,这是有效的。 我怎么能成功呢? 我不能使类静态也不能使方法。
答案 0 :(得分:10)
就像你创建一个Program类的实例来调用NonStaticMethod一样,你必须创建一个MyNewClass实例:
public string NonStaticMethod()
{
var instance = new MyNewClass();
return instance.MyStringMethod(); //Can call non static method
}
答案 1 :(得分:4)
非静态类需要一个实例来访问其成员。
在静态Main方法中创建实例并调用非静态类成员:
static void Main(string[] args)
{
MyNewClass p = new MyNewClass();
var myString = p.MyStringMethod();
}
答案 2 :(得分:3)
如果要调用非静态类的成员函数,则必须创建其实例,然后调用其所需的函数。
因此,要调用非静态类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";
}
}
答案 3 :(得分:1)
非静态方法需要一个实例。您应该像创建一个程序来调用它的非静态方法一样创建它。
答案 4 :(得分:1)
您需要创建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";
}
}