因为C#就是这样子的,任何地方都可以访问静态函数  main函数是静态的

解决方案 »

  1.   

    加上static的构造函数是静态构造函数,不加的是实例构造函数。两个有本质的不同。不是相加就加不想加就不加的。编写如下代码,自己观察:
    class A
    {
        public static A() { Console.WriteLine("static ctor"); } 
        public A() { Console.WriteLine("ctor"); } 
    }
    void Main()
    {
        Console.WriteLine("Main start...");
        A a = new A();
    }
      

  2.   

    这个问题问得奇怪,构造函数恐怕只有少数是用static修饰的吧.
      

  3.   

    没有static修饰的构造函数不只是可被Main调用,它可以在任何地方被调用。构造函数有两种,一种是实例构造函数,不带static,用于构造类的实例。如new Object(), new Program()等都是调用实例构造函数。另一种是静态构造函数,被static修饰。参见2楼。你从来无法显式地调用静态构造函数。当你第一次访问这个类的静态成员或创建类的实例时,.net 运行时自动帮你调用这个静态构造函数。
      

  4.   

      
    感谢大神们赐教不过我还想问一句 加static修饰的构造方法 怎么看着没啥用啊
      

  5.   


    静态构造函数是为了在第一次使用类时,初始化静态成员和属性。
    静态构造函数,程序没法调用,这个是运行时自己处理的,所以不能有什么操作符;
    实例构造函数,这个是你创建实例的时候调用。
    main函数里能实例化类,自然就会调用实例构造函数。
      

  6.   

    c#中类的构造函数为什么不用static修饰也可被Main方法调用?
    ----------
    这个问题问的奇怪.
    你调用了类中的构造函数??
    还是说你在实例化类的时候类自己调用的?
    代码贴出来看看你是如何在Main里调用类中的构造函数的.
      

  7.   

    baidu下构造函数和静态构造函数不就了解了
      

  8.   


    当类的静态字段的初始化值比较复杂的时候可能有用。请尝试运行以下代码观看结果。静态字段sum是字段numbers之和,两个字段有依赖关系。
        class Program
        {
            private static readonly int sum;
            private static readonly int[] numbers;
            static Program()
            {
                numbers = new int[10];
                for (int i = 0; i < numbers.Length; i++)
                    numbers[i] = i + 1;            sum = 0;
                for (int i = 0; i < numbers.Length; i++)
                    sum += numbers[i];            Console.WriteLine("静态构造函数执行完毕");
            }        static void Main(string[] args)
            {            Console.WriteLine("进入Main方法");
                Console.WriteLine("Program.sum={0}", sum);            Console.WriteLine("Program2.sum={0}", Program2.sum);            Console.ReadKey();
            }
        }    class Program2
        {
            internal static readonly int sum=GetSum(numbers);        internal static readonly int[] numbers=GetNumbers();        private static int[] GetNumbers()
            {
                var numbers = new int[10];
                for (int i = 0; i < numbers.Length; i++)
                    numbers[i] = i + 1;            return numbers;
            }        private static int GetSum(int[] numbers)
            {
                int sum = 0;
                for (int i = 0; i < numbers.Length; i++)
                    sum += numbers[i];
                return sum;
            }
        }
      

  9.   

    加了static的函数,属于全局的,在程序启动前就会执行
    没加static的函数,要有实例化对象才能调用
    你在Main里调用的是类的实例化对象