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();
}