[Day25]C# 鸡础观念- 共产主义者~静态成员

农场里的鸡饲料都是大把大把的撒在地上,
每只鸡都去吃那些饲料,吃完就没了,
而不像其他宠物有独立的饲养笼,
专用的饭碗,吃饭时都不用抢食,
C#中也有像鸡饲料的用法,
撒在地上大家一起共用

静态变数/images/emoticon/emoticon30.gif

  • 一般情况下变数成员并不会互相影响
  • 如同每个人都有自己的年龄,并不会互相影响
  • 但静态变数不一样,他的值在记忆体中只会存一份,然後大家一起共用他
  • 结构

https://ithelp.ithome.com.tw/upload/images/20210925/20097001QhRt9Z7xf4.png

范例: 我们来做一个小游戏

  • 目前农场有30只鸡
  • 一天会出生3只鸡
  • 每过两天,农夫就会载8只鸡去市场卖掉
  • 只要农场的鸡变成0,那农场就倒闭了
  • 那一个月後农场会不会倒闭呢?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CsharpDemo
{


    class Program
    {
        static void Main(string[] args)
        {
            for(int i = 1; i <= 31; i++)
            {
                Console.WriteLine();
                Console.WriteLine("---新的一天--");
                Console.WriteLine("今天 : " + i + "号");
                //新的一天需要生新的鸡
                Chicken chickenClass = new Chicken();
                chickenClass.NewDayChicken();
                Console.WriteLine("目前农场有 : " + Chicken.ChickenCount + "只鸡");

                //判断今天是否有要去市场
                if ((i % 2) == 0)
                {
                    //农夫去市场卖鸡
                    Farmer farmerClass = new Farmer();
                    Console.WriteLine("农夫载鸡去卖了...");
                    farmerClass.GoToMarket();
                    Console.WriteLine("卖完鸡後剩下 : " + Chicken.ChickenCount + "只鸡");
                }
                //判断鸡还剩几只
                if(Chicken.ChickenCount <= 0)
                {
                    Console.WriteLine();
                    Console.WriteLine("!!!!!!!鸡被卖光光了!!!!!");
                    Console.WriteLine("农场倒闭!");

                    //既然营业不下去就跳脱回圈吧
                    break;
                }
            }
            Console.ReadKey();
        }
    }
    //定义鸡的类别
    class Chicken
    {
        //宣告一个鸡数量的静态变数
        public static int ChickenCount = 30;

        //新的一天生四只鸡
        public void NewDayChicken()
        {
            ChickenCount += 3;
        }
    }
    //定义农夫的类别
    class Farmer
    {
        public void GoToMarket()
        {
            //使用静态变数不需要实例化
            Chicken.ChickenCount -= 8;
        }
    }
}

结果:

---新的一天--
今天 : 1号
目前农场有 : 33只鸡

---新的一天--
今天 : 2号
目前农场有 : 36只鸡
农夫载鸡去卖了...
卖完鸡後剩下 : 28只鸡

---新的一天--
今天 : 3号
目前农场有 : 31只鸡

---新的一天--
今天 : 4号
目前农场有 : 34只鸡
农夫载鸡去卖了...
卖完鸡後剩下 : 26只鸡
.
.
.
.
---新的一天--
今天 : 29号
目前农场有 : 5只鸡

---新的一天--
今天 : 30号
目前农场有 : 8只鸡
农夫载鸡去卖了...
卖完鸡後剩下 : 0只鸡

!!!!!!!鸡被卖光光了!!!!!
农场倒闭!

最终鸡还是供不应求卖光光了!农场难逃倒闭危机!

静态变数只有在创建类别的时候会做一次初始化而已,这点是大家须特别注意的,我们就明天见喽


<<:  Day 11 - 用 canvas 复刻 小画家 多边形

>>:  [Day12]程序菜鸟自学C++资料结构演算法 – 树Tree

[Day29] React - 浅谈 Component 的Props

Props 是传递给 React Component 的参数。 Propse 透过HTML属性传递...

Day 2 基本工具及套件

前言 今天我会说明一些开始实作所需要的工具,包含 flask 套件。但单单一个 flask 并不足以...

Day27:歪楼+卡文(全英文笔记 - I)

铁人赛写到现在,其实主题中的内容还有很多可以实作的部分,但一方面是不确定时间到期後,铁人赛系列还能不...

Day 4. 关於.NET後端(2)

开开始学後端的人多少会听到ASP.NET、.NET Framework、.NET Core,但不清楚...

Day 18 Compose Gestures II

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...