加上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(); }
这个问题问得奇怪,构造函数恐怕只有少数是用static修饰的吧.
没有static修饰的构造函数不只是可被Main调用,它可以在任何地方被调用。构造函数有两种,一种是实例构造函数,不带static,用于构造类的实例。如new Object(), new Program()等都是调用实例构造函数。另一种是静态构造函数,被static修饰。参见2楼。你从来无法显式地调用静态构造函数。当你第一次访问这个类的静态成员或创建类的实例时,.net 运行时自动帮你调用这个静态构造函数。
当类的静态字段的初始化值比较复杂的时候可能有用。请尝试运行以下代码观看结果。静态字段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; } }
class A
{
public static A() { Console.WriteLine("static ctor"); }
public A() { Console.WriteLine("ctor"); }
}
void Main()
{
Console.WriteLine("Main start...");
A a = new A();
}
感谢大神们赐教不过我还想问一句 加static修饰的构造方法 怎么看着没啥用啊
静态构造函数是为了在第一次使用类时,初始化静态成员和属性。
静态构造函数,程序没法调用,这个是运行时自己处理的,所以不能有什么操作符;
实例构造函数,这个是你创建实例的时候调用。
main函数里能实例化类,自然就会调用实例构造函数。
----------
这个问题问的奇怪.
你调用了类中的构造函数??
还是说你在实例化类的时候类自己调用的?
代码贴出来看看你是如何在Main里调用类中的构造函数的.
当类的静态字段的初始化值比较复杂的时候可能有用。请尝试运行以下代码观看结果。静态字段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;
}
}
没加static的函数,要有实例化对象才能调用
你在Main里调用的是类的实例化对象