1、构造函数不能有返回值,
2、静态构造函数不能有修饰符(publi,private)
3、不能从程序中显示地调用静态构造函数,系统回自动的调用他们
4、静态构造函数不能访问所在类的实例成员
5、类只能有一个静态构造函数不能带参数
6、静态构造函数调用会先于实例构造函数之前
7、静态构造函数只执行一次,仅在第一次调用类的任何成员时自动执行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 实例构造函数和静态构造函数
{
class Program
{
static void Main(string[] args)
{
A objA = new A();
A objB = new A("cnm");
Console.ReadKey();
}
/// <summary>
/// 1、构造函数不能有返回值,
/// 2、静态构造函数不能有修饰符(publi,private)
/// 3、不能从程序中显示地调用静态构造函数,系统回自动的调用他们
/// 4、静态构造函数不能访问所在类的实例成员
/// 5、类只能有一个静态构造函数不能带参数
/// 6、静态构造函数调用会先于实例构造函数之前
/// </summary>
public class A
{
public static string str1 = "静态字段";
public string str2 = "普通字段";
static A()
{
//str2 = ""; //不能访问非静态字段
str1 = "我是静态字段我可以在静态构造函数中被访问";
Console.WriteLine("我是静态构造函数,我先执行");
}
public A()
{
str2 = "";
Console.WriteLine("我是非静态构造函数,我后执行");
}
public A(string str)
{
Console.WriteLine("我是带参数的构造函数,输出值为:{0}",str);
}
}
}
}
例外如下:
如果在类中有实例化一个窗体类的静态字段objFrmMain,则会先执行无参的构造函数,再实例化这个字段,最后执行静态构造函数。
namespace Model
{
public partial class FrmMain : Form
{
private Thread CheckSys;
private gts.mc.TJogPrm Jog;
private static FrmMain objFrmMain = new FrmMain(); //new一个静态的FrmMain对象
static FrmMain()
{
MessageBox.Show("1");
}
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_Load(object sender, EventArgs e)
{
if (!Gts_Init())
{
//Environment.Exit(0);
}
}