C#学习笔记——readonly修饰符、const成员常量、本地常量、常量与静态量

readonly修饰符

字段可以用readonly修饰符声明。其作用类似将字段声明为const,一旦设定不能改变。

readonly和const的区别:

  1. const只能在声明时初始化,而readonly可以在任意位置设置值。(字段声明语句类似const。类的任何构造函数。如果是static字段,初始化必须在静态构造函数中完成。)
  2. const字段的值必须在编译时决定,而readonly字段的值可以在运行时决定。
  3. const的行为总是静态的,而对于readonly字段以下两点是正确的:1它可以是实例字段,也可以是静态字段。2它在内存中有存储位置。

例:

    class Shape
    {
        readonly double PI = 3.1416;
        readonly int NumberOfSide;//边的数量

        //矩形
        public Shape(double side1, double side2)
        {
            NumberOfSide = 4;
        }

        //三角形
        public Shape(double side1, double side2, double side3)
        {
            NumberOfSide = 3;
        }

    }

PI在声明时初始化。

 NumberOfSide在构造函数中初始化。

成员常量

被声明在类中。声明时初始化。

class MyClass {
    const int a = 1;
}

 


本地常量

本地常量一旦被初始化,它的值不能改变。

特征:

  1. 常量在声明时必须初始化。
  2. 常量在声明后不能改变。

常量的声明与字段或变量的声明相同,除了以下内容:

  1. 在类型前增加关键字const。
  2. 必须有结构化语句。
const Type Identifier = value;

例:

        public void Display()
        {
            const double PI = 3.1415;

            for (int i = 0; i <= 5; i++)
            {
                double area = i * i * PI;
                Console.WriteLine("半径为{0}的圆,面积为{1}", i, area);
            }
        }

这个方法结束,这个常量失效 


常量与静态量

与真正的静态量不同,常量没有自己的存储位置,而是在编译时被编译器替换。

using System;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("PI = {0}", T.pi);
        }

    }
    class T
    {
        public const double pi = 3.1415;
    }
}

常量pi可以在类外使用 

 

posted @ 2019-06-13 12:08  养鼠的猫  阅读(169)  评论(0编辑  收藏  举报