我有一个带有静态主方法的 C# 控制台应用程序。
我希望能够在 main 中调用非静态方法,但不能。
我相信我需要保持主要静态,但我也想在程序中运行非静态方法?
下面的语句表示需要对象引用。
c1 = new Class1()
我在哪里/如何实例化这个程序中的非静态对象?
谢谢
namespace VER
{
class Example
{
private Dictionary<string, long> dStrLong;
Class1 c1;
static void Main(string[] args)
{
c1 = new Class1();
}
}
}
如果Class1 c1
设置为静态,则可以为其分配新对象并调用其非静态方法。
或者,从类中删除Class1 c1
字段并写入Class1 c1 = new Class1();
。
您需要了解这在幕后是如何工作的。
使用静态方法时,将为您创建一个静默实例,该实例用于调用静态方法。
任何非静态的东西都属于您创建的每个实例。这就是为什么编译器说需要对象引用(c1
声明为实例成员(。
为了让您在 main
中使用c1
,您也可以将其设置为静态,也可以使其成为公共成员并创建一个实例,以便您可以使用它:
namespace VER
{
class Example
{
private Dictionary<string, long> dStrLong;
//You can make it static
static Class1 c1 = new Class1();
static void Main(string[] args)
{
c1.DoSomething();
}
}
}
或
namespace VER
{
class Example
{
private Dictionary<string, long> dStrLong;
//You can make it public
public Class1 c1 = new Class1();
static void Main(string[] args)
{
var c1 = new Example();
c1.DoSomething();
}
}
}
由于您的代码当前存在,因此您正在尝试从静态方法访问属于实例的变量。
无论哪种方式,请确保实例化变量的对象。