C#中const和readonly的用法比较

2020-01-05 09:54:31于丽

  • const:在声明时必须初始化值;readonly:可以不初始化值,且可以延迟到构造函数。
  • cons:在编译期间会被解析,并将常量的值替换成初始化的值;readonly:延迟到运行的时候。
  • const:注重的是效率;readonly:注重灵活。
  • const:没有内存消耗;readonly:因为需要保存常量,所以有内存消耗

    举个例子:一座旅店的房间数是固定的,但是不同的旅店可能有不同的房间数,这时我们就需要使用readonly修饰的这样一个常量

    
    namespace ReadonlyDemo
    {
      /// <summary>
      /// 创建一个旅店类
      /// </summary>
      class Hotel
      {
        public readonly int roomNum; //表示房间总数
        public int guestNun;     //表示已入住房间数
        public Hotel(int roomNumValue) { //构造函数
          roomNum = roomNumValue;
        } 
        public bool isFull()
        {
          if(guestNun >= roomNum)
          {
            return true;
          }
          else
          {
            return false;
          }
        }
        //一个旅客入住
        public void LodgeIn()
        {
          if (isFull())
          {
            Console.WriteLine("房间满了");
          }
          else
          {
            guestNun++;
            Console.WriteLine("入住成功");
          }
        }
      }
      class Program
      {
        static void Main(string[] args)
        {
          Console.WriteLine("---------HOT1旅店----------");
          Hotel hot1 = new Hotel(6); //hot1旅店有6个房间
          for (int i = 0; i < 7; i++)
          {
            hot1.LodgeIn(); //入住客人
          }
          Console.WriteLine("HOT1旅店房间总数:{0}", hot1.roomNum);
          Console.WriteLine("HOT1旅店已经入住:{0}人", hot1.guestNun);
          Console.WriteLine("---------Tel1旅店----------");
          Hotel tel1 = new Hotel(5); //Tel1旅店有10个房间
          for (int i = 0; i < 3; i++)
          {
            tel1.LodgeIn(); //入住客人
          }
          Console.WriteLine("Tel1旅店房间总数:{0}", tel1.roomNum);
          Console.WriteLine("Tel1旅店已经入住:{0}人", tel1.guestNun);
          Console.ReadLine();
        }
      }
    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ASPKU的支持。