CLR via c# 常量与变量

来源:互联网 发布:手机刺客vpn软件 编辑:程序博客网 时间:2024/06/03 05:52
namespace mydll{    public class Class1    {        public const int a = 50;        public static int b = 60;        public static readonly int c = 70;        public static readonly char[] d = new char[]{'A','B','C'};        public static readonly string s = "Hello,world!";    }}
using System;namespace 常量与变量{    class Program    {        static void Main(string[] args)        {            Console.WriteLine(mydll.Class1.a);      //常量,输出为50            Console.WriteLine(mydll.Class1.b);      //字段,输出为60            Console.WriteLine(mydll.Class1.c);      //字段输出为70            Console.WriteLine("{0},{1},{2}",mydll.Class1.d[0],mydll.Class1.d[1],mydll.Class1.d[2]);            Console.WriteLine(mydll.Class1.s);      //输出为:hello,world!            Console.WriteLine("{0}",mydll.Class1.d.GetHashCode());            mydll.Class1.d[0]='X';            mydll.Class1.d[1] = 'Y';            mydll.Class1.d[2] = 'Z';            //mydll.Class1.s="Hello,fxqcn!";错误1 无法对静态只读字段赋值(静态构造函数或变量初始值设定项中除外)            //我个人的理解是改变了字符串的引用。            Console.WriteLine("{0},{1},{2}", mydll.Class1.d[0], mydll.Class1.d[1], mydll.Class1.d[2]);            Console.WriteLine("{0}", mydll.Class1.d.GetHashCode());            //引用类型的字段,为readonly类型,输出为:A,B,C            Console.ReadLine();        }    }}/***************************************************************************** * *当把dll中的a,b,c分别改为500,600,700时,a的值输出仍为50(不编译,只运行),因为常量的值50会嵌入到 * *IL代码中,运行时根本不会加载DLL程序集。由于常量的值直接嵌入到代码中,所以在运行时 * *不需要为常量分配任何内存。除此之外,不能获取常量的地址,也不能以引用的方式此地常量。 * * * *当readonly标示引用类型的字段,不可改变的是引用,而非字段引用的对象。 * *可以看到char[]里的元素可以改变,但是哈希码是一样的。,所以地址是一样的,即引用的是同一个对象 * *by fxqcn 2011-10-10 * ***************************************************************************/


原创粉丝点击