C# static变量、const变量、readonly变量

本文介绍了如何使用静态变量static在`Wolf`类中表示狼群数量的共享特性,const常量如Circle类中的π值,以及readonly常量在`Hotel`类中表示不同旅店房间数量。通过实例代码展示了它们在程序中的应用和区别。
摘要由CSDN通过智能技术生成

1. static

  • wolfCount 是描述狼群整体特征的量,这种描述类的整体特征的量可以用静态变量
    实现。静态变量在内存中只有一份,为类的所有对象共享。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolf
{
    class Program
    {
        static void Main(string[] args)
        {
            Lion lion = new Lion();

            Wolf[] wolf = new Wolf[5];//这一步并没有调用构造函数
            for (int i = 0; i < wolf.Length; i++)
            {
                wolf[i] = new Wolf();
            }

            //这些狼的心理活动
            Console.WriteLine("我们一共有{0}只狼", wolf.Length);
            //狼开始攻击狮子
            for(int i=0;i<wolf.Length;i++)
            {
                Console.WriteLine("第{0}只狼", i+1);
                wolf[i].Action();
            }
            //狮子反击
            lion.CounterAttack();            
        }
    }
    class Wolf
    {
        public static int wolfCount = 0;
        public Wolf()
        {
            wolfCount++;
        }
        ~Wolf()
        {
            wolfCount--;
        }
        public void Action()
        {
            if(wolfCount >= 5)
            {
                Console.WriteLine("攻击狮子");
            }
            else
            {
                Console.WriteLine("逃跑");
            }          
        }
    }
    class Lion
    {
        public void CounterAttack()
        {
            Console.WriteLine("狮子反击");
            if(Wolf.wolfCount < 7)
            {
                Console.WriteLine("狮子获胜");
            }
            else
            {
                Console.WriteLine("狼获胜");
            }
        }
    }
}

在这里插入图片描述

2. const

const常量有两个优点:

  • 使用了有意义的名称,和数字相比,const常量更易于阅读和修改;
  • 编译器保证它的值在程序运行过程中保持固定不变,和变量相比,const常量更健壮。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolf
{
    class Program
    {
        static void Main(string[] args)
        {
            Circle c1 = new Circle(5.5);
            Console.WriteLine("圆半径{0},面积{1},圆周长{2}", c1.radius,c1.GetArea(), c1.GetCircumference());
        }
    }
    class Circle
    {
        public const double PI = 3.1415926;
        public double radius = 0;
        public Circle(double radius)
        {
            this.radius = radius;//注意这里的this的使用
        }
        public double GetCircumference()
        {
            return 2 * PI * radius;
        }
        public double GetArea()
        {
            return PI * radius * radius;
        }
    }
}

在这里插入图片描述

3. readonly

  • 一座旅店的房间总数是固定的常数,但是不同旅店可能有不同的房间数目。为了表示房间总数,我们需要这样一种常量,它在类的具体对象中是固定的常数,但在不同对象中可有不同的值。这种常量可以用 readonly 常量实现。
  • 现在我们建立一个“旅店类”,用 readonly 常量 roomNumber 表示房间总数。
  • readonly变量只能通过构造函数初始化,初始化之后无法再更改它的值,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolf
{
    class Program
    {
        static void Main(string[] args)
        {
            Hotel hanting = new Hotel(4);
            Hotel greenHotel = new Hotel(6);
			Console.WriteLine("============汉庭酒店==============");
            for (int i = 0; i < 5; i++) 
            {
                hanting.LodgeIn();
            }
            Console.WriteLine("============格林豪泰==============");
            for (int i = 0; i < 5; i++)
            {
                greenHotel.LodgeIn();
            }

        }
    }

    class Hotel
    {
        public readonly int roomNumber;//房间总数量
        public int guestNumber = 0;//已经入住房间数量
        public Hotel(int room)
        {
            roomNumber = room;
        }
        public void LodgeIn()
        {
            if(guestNumber >= roomNumber)
            {
                Console.WriteLine("入住失败,{0}个房间都已经住满",roomNumber);
            }
            else
            {
                guestNumber++;
                Console.WriteLine("入住成功,共有{0}个房间,{1}个入住", roomNumber, guestNumber);
            }
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值