如何在静态main()中实例化非静态数据项

时间:2018-01-18 18:08:09

标签: c# static main

我有一个带有静态主方法的C#控制台应用程序。

我希望能够在main中调用非静态方法 不能。

我相信我需要保持主静态,但我也想 在程序中运行非静态方法?

下面的陈述说明需要一个对象参考。

c1 = new Class1()

在哪个/如何在此程序中实例化非静态对象?

谢谢

namespace VER
{
    class Example
    {
        private Dictionary<string, long> dStrLong;
        Class1 c1;

        static void Main(string[] args)
        {
            c1 = new Class1();

        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果你使Class1 c1为静态,你就可以为它分配新对象并调用它的非静态方法。

或者,从班级中删除Class1 c1字段并撰写Class1 c1 = new Class1();

答案 1 :(得分:0)

我认为你需要了解它在幕后的运作方式。

使用静态方法时,会为您创建一个静默实例,即为静态方法调用提供服务的实例。

任何非静态的东西都属于您创建的每个实例。这就是为什么编译器说需要对象引用(c1被声明为实例成员)。

为了让您在c1内使用main,您可以将其设为静态,也可以将其设为公共成员并创建一个实例,以便您可以使用它:

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

        }
    }
}

OR

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

由于您的代码当前存在,您尝试从静态方法访问属于实例的变量。

无论哪种方式,请确保为变量实例化对象。