浅析C#静态类,静态构造函数,静态变量

2019-12-30 12:51:09于海丽

○ 在为Cow的字段赋值之前,静态构造函数被触发

○ 接着创建Cow实例,静态构造函数不会被再次触发

○ 静态构造函数只执行一次

到这里,关于静态构造函数被触发的时机,我们可以这样下结论:无论是通过构造函数创建实例,还是给类的字段或属性赋值,静态构造函数是在所有这些动作之前被触发的。

静态类

首先创建一个类,包括静态成员和非静态成员。


public class Logger
{ private static int logNumber = 0;
static public void InitializeLogging()
{
Console.WriteLine("日志初始化");
}
static public void CloseLog()
{
Console.WriteLine("日志关闭");
}
static public void LogMsg(string msg)
{
Console.WriteLine("日志编号为:" + logNumber + ":" + msg);
}
public void DoSth()
{
Console.WriteLine("我不是静态方法~~");
}
}

在客户端,既可以通过"类名.静态方法名称"调用方法,也可以通过类的实例调用方法。


static void Main(string[] args)
{
Logger.InitializeLogging();
Logger.LogMsg("日志被记录下了~~");
Logger.CloseLog();
Logger logger = new Logger();
logger.DoSth();
}

如果把一个类设置成静态类,意味着:这个类的所有一切存在于栈上,因此该类中不能有实例方法,也不能创建该类实例。

修改Logger类,把实例方法去掉。


public static class Logger
{
private static int logNumber = 0;
static public void InitializeLogging()
{
Console.WriteLine("日志初始化");
}
static public void CloseLog()
{
Console.WriteLine("日志关闭");
}
static public void LogMsg(string msg)
{
Console.WriteLine("日志编号为:" + logNumber + ":" + msg);
}
}

在客户端,更不能创建Logger的实例,只能通过"类名.静态方法名"调用方法。


static void Main(string[] args)
{
Logger.InitializeLogging();
Logger.LogMsg("日志被记录下了~~");
Logger.CloseLog();
} 

总结:

○ 静态变量属于全局,位于栈上

○ 静态构造函数只被触发一次,无论是通过构造函数创建实例,还是给类的字段或属性赋值,静态构造函数的触发时机都在这些动作之前

○ 静态类中不能有实例成员

以上内容是小编给大家介绍的C#静态类,静态构造函数,静态变量的全部叙述,希望对大家有所帮助!

 



注:相关教程知识阅读请移步到c#教程频道。