http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 12030|回复: 3

[C#入门] C#类和对象3-静态成员:const和readonly常量

[复制链接]
发表于 2014-7-16 23:24:43 | 显示全部楼层 |阅读模式
在类的静态成员中,有两个表示常量的符号:一个是const,另外一个是readonly.下面我们来学习之:
const常量我们在学习函数中已经接触过了,它有两个优点:一是由于使用有意义的名称,和数字相比,const常量更易于阅读和修改;第二个优点是由于编译器保证它的值在程序运行中保持固定不变,和变量相比,const常量更健壮。下面我们来学习如何在类中建立常量。为了说明问题,我们建立一个“园类”,其中圆周率用const常量PI来表示。
[C#] 纯文本查看 复制代码
  class Circle
    {
        //公有变量
        public double radius;                     //半径
        public const double PI = 3.1415926;   //圆周率                                        

        //构造函数
        public Circle(double radiusValue)
        {
            radius = radiusValue;
        }
        //函数:计算周长
        public double GetCircumference()
        {
            return 2 * PI * radius;
        }
        //函数:计算面积
        public double GetArea()
        {
            return PI * radius * radius;
        }

    }
特别需要注意的是,类的const常量成员是隐式静态的,为所有园共有。所以,在类外要通过类名来引用变量PI。虽然const常量默认是静态的,但不能用static关键字显示申明。
然后我们在主函数中使用const常量。
[C#] 纯文本查看 复制代码
class Program
    {
        static void Main(string[] args)
        {
            Circle mycircle = new Circle(10);
            Console.WriteLine("园周率:{0}",Circle.PI);
            Console.WriteLine("半 径:{0}",mycircle .radius);
            Console.WriteLine ("周 长:{0}",mycircle .GetCircumference());
            Console.WriteLine("面 积:{0}", mycircle.GetArea());
        }

    }
运行结果: const.JPG
请找出使用const变量PI的代码,与其他三个成员做比较,看看在使用语法上有何区别。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2014-7-17 00:18:59 | 显示全部楼层
const常量是隐式常量,为同一个类的全部对象所共有,如PI只有属于Circle类的对象,常量PI的值都是一样的:3.1415926.
有时我们需要另外一种常量,它在类的某一个具体对象时是不变的,但在不同的对象中有不同的值,如一座酒店的房间总数是固定的,但在不同酒店中,每一个酒店的房间总数是不一样的,这时,如果要创建酒店这个类用来统计房间总数时,就用readonly来定义totalNumber常量就很合适。
[C#] 纯文本查看 复制代码
 //定义Hotel类
    class Hotel
    {
        public readonly int totalNumber;     //房间总数              
        public int guestNumber = 0;           //已入住的房间数目

        //构造函数
        public Hotel(int totalValue)
        {
            totalNumber = totalValue;
        }

        //函数:判断旅店是否已满
        private bool IsFull()
        {
            if (guestNumber >= totalNumber)
                return true;
            else
                return false;
        }

        //函数:入住一个旅客
        public void LodgeIn()
        {
            if (IsFull())
                Console.WriteLine("对不起,房间已满!");
            else
            {
                guestNumber++;
                Console.WriteLine("入住成功!");
            }
        }
    }
下面我们在主函数中创建并使用Hotel类的对象:
[C#] 纯文本查看 复制代码
  static void Main(string[] args)
        {
            Console.WriteLine("======太阳酒店=====");
            Hotel sunHotel = new Hotel(5);
            //入住两人
            for (int i = 1; i <= 2; i++)
            {
                sunHotel.LodgeIn();
            }
            Console.WriteLine("房间总数:{0}",sunHotel.totalNumber);
            Console.WriteLine("入住总数:{0}",sunHotel.guestNumber);

            Console.WriteLine("=====月亮酒店=====");
            Hotel moonHotel = new Hotel(3);
            //入住4人
            for (int i = 1; i <= 4; i++)
            {
                moonHotel.LodgeIn();
            }
            Console.WriteLine("房间总数:{0}",moonHotel.totalNumber);
            Console.WriteLine("入住旅客:{0}",moonHotel .guestNumber);
        }
运行 结果如下: readonly.JPG
发表于 2014-7-17 08:25:56 | 显示全部楼层
你在学习曾瑛的课程
 楼主| 发表于 2014-7-18 18:30:02 | 显示全部楼层
谢谢关注,我在学习《叩响C#之门》(电子工业出版社)梁斌玉编著。觉得这本书很适合初学者。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-10-18 15:43

© 2014-2021

快速回复 返回顶部 返回列表