• #region 常量和静态变量静态类readonly


    #region 常量和静态变量静态类readonly
            //----------------------------------------------------------------------
            //常量和静态变量,静态类
            //----------------------------------------------------------------------
            //类的静态变量和常量,都属于类而不属于对象,不能用对象来调用,只能用类名调用
            //这不同于C++,是更合理的设计
            //常量的值在类定义时就确定了,不因对象而不同,因此存放在类中更合理
            class CNormclass
            {
                class CInclass
                {
                    public float fx = 20;
                }
                public int _id;
                public const string cname = "CNormalclass";
    
                //1,常量仅能修饰 :数字,bool,字符串,null引用
                //不能像C++那样定义一个常量对象,这真是太悲哀了,因为很多时候这可以加速数据传递,增加安全//由于这个原因,C#的List.ToArray每次都只能返回一个内部数组的拷贝,因此使用list存储数量较大较复杂的数据//不要轻易使用ToArray,直接用List就行了,它也支持下标索引方式取数组元素
                const CInclass lst = null;
    
                //2,readonly也不能实现常量对象的效果
                //readonly仅表示变量本身不能被赋值,但不阻止通过对象变量更改对象内的字段
                //onc.readonlyobj.fx = 20
                public float fx = 20;
    
                private readonly CInclass readonlyobj = new CInclass();
      
                public static void Test()
                {
                    //1,不能调用非静态字段或方法
                    //this._id = 20; //error,没有this指针
    
                    //2,可以调用常量字段
                    var lname = cname;
    
                    var onc = new CNormclass();
    
                    //私有变量在类的静态方法也可以访问
                    //2,虽然不能更改readonlyobj本身的值,却可以更改其内部成员的值,这就是readonly的作用
                    onc.readonlyobj.fx = 20; 
                }
            }
            static class C712//类中类,默认为私有
            {//静态类不能实例化,且只能声明:常量,静态常量,静态属性,静态方法
                public const int constX = 20; //1,常量
                public static int staticX = 0; //2,静态常量
                public static int ix { set; get; } //3,静态属性
    
                //一,【静态类中不能定义实例化字段】
                //public int _id; 
    
                //二,【静态类中不能定义实例化字段】
                //void Ctest(){ //【error: 静态类中不能定义实例化方法】
                //    this._id = 20;
                //}
    
                static void Test()//4,静态方法
                {
                    //三,【静态方法中不能调用非静态变量或方法,因为没有this指针】
                    //_id = 20;  //error 
    
                    //四,【可以调用常量字段,这与C++不同】
                    var c = constX;
                }
    
            }
            public const int ixd = 20;
            public static float fx = 20;
            public void Testff()
            {
                fx = 30; //等价于Program.fx = 30,而不是 this.fx = 30;
                Program.fx = 30;
                var tx = C712.constX;
                C712.staticX = 30;
                var ix = Program.ixd;
    
                //var oc7 = new C712(); //error 静态类不能创建实例
            }
  • 相关阅读:
    VS2008环境下CEGUI 0.7.1及相关工具的编译(转载 + 额外的注意事项)
    Makefile的学习
    Erlang 程序文档(转)
    erlang 二进制数据
    erlang中命令行传参,以及类型等。
    笔记:JAVA的静态变量、静态方法、静态类
    关于手机定位方案设计
    转:eclipse技巧
    DXUT CD3DArcBall类
    关于模型转向自然化思考
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/9391426.html
Copyright © 2020-2023  润新知