C# 静态类中静态方法的局部变量和静态成员的区别

首先,静态类不能有非静态成员和函数,即所有函数和变量都只能有一个,不能被实例化。

我们可以做一个静态类,用于存储设置信息、定义一些与变量无关的公共方法。

我们知道静态成员变量是共享的,那静态函数中的临时变量是不是也是共享的呢?

做一个简单的测试:

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并不受另一个线程影响,所以局部变量相当于被“实例化”多份了,不用担心相互之间的影响。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值