首先,静态类不能有非静态成员和函数,即所有函数和变量都只能有一个,不能被实例化。
我们可以做一个静态类,用于存储设置信息、定义一些与变量无关的公共方法。
我们知道静态成员变量是共享的,那静态函数中的临时变量是不是也是共享的呢?
做一个简单的测试:
using System;
using System.Threading;
namespace ConsoleApp2
{
static class A
{
static int number1 = 0;
public static void Test(Object obj)
{
int number2 = 0;
string name = (string)obj;
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{name} number1:{number1.ToString()} number2:{number2.ToString()}");
Thread.Sleep(500);
number1++;
number2++;
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Thread th1 = new Thread(A.Test);
th1.Name = "th1";
th1.Start(th1.Name);
Thread.Sleep(800);
Thread th2 = new Thread(A.Test);
th2.Name = "th2";
th2.Start(th2.Name);
Console.ReadLine();
}
}
}
通过先后两个线程调用静态函数A.Test
,因为执行一次函数需要5s时间,两次调用间隔800ms,所以同一时间两个线程都在对数据进行访问。
但通过观察发现,静态成员变量number1是被两个线程都在修改,而局部变量nubmer2并不受另一个线程影响,所以局部变量相当于被“实例化”多份了,不用担心相互之间的影响。