zoukankan      html  css  js  c++  java
  • static 静态

    readonly

    域的声明中如果加上了readonly 修饰符表明该域为只读域对于只读域我们只
    能在域的定义中和它所属类的构造函数中进行修改在其它情况下域是只读的
    熟悉C 和C++程序员可能习惯了使用const 和#define 定义一些容易记住的名字来
    表示某个数值static 和readonly 修饰符可以起到同样的效果
    public class A
    {
    public static readonly double PI = 3.14159;
    public static readonly Color White = new Color(255, 255, 255);
    public static readonly int kByte = 1024;
    //other members
    }
    这样在程序中我们就可以直接使用PI 来指代圆周率white 来表示白色等等
    那么使用static readonly 与使用const 有什么区别呢简单地说const 型表达式
    的值在编译时形成而static readonly 表达式的值直到程序运行时才形成看下面这个
    例子

    程序清单12-2:
    using System;
    namespace Program1
    {
    public class A
    {
    public static readonly int X = 1;
    }
    }

    namespace Program2
    {
    class Test
    {
    static void Main() {
    Console.WriteLine(Program1.A.X);
    }
    }
    }
    假定名字空间Program1 和 Program2 表示两个分别独立编译的程序有关名字空
    间的概念我们将放在后续章节中介绍在这里域x 为静态只读的它的值由于是在
    编译时形成的所以无论是否改变Program1 中x 的值只要不重新编译Program2
    Program2 的输出就不会发生变化如果Program2 已经安装在用户的系统上对Program1
    的升级不会影响到旧的Program2 的使用这种技术有利于进行版本控制

     域的初始化

    对于静态变量非静态的对象变量和数组元素这些变量自动初始化为本身的默
    认值对于所有引用类型的变量默认值为null 所有值类型的变量的默认值见下表
    所示

    部分类型的域初始化的值
    变量类型默认值
    sbyte, byte, short, ushort, int, uint, long, ulong 0
    char x0000
    float 0.0f
    double 0.0d
    decimal 0.0m
    bool false
    enum 0

    在默认的初始化之前域的值是不可预测的

    class Test
    {
    static int a = b + 1;
    static int b = a + 1;
    }
    实际上等价于
    a = 1, b = 2
    而下面的代码则是非法的
    class A
    {
    int x = 1;
    int y = x + 1;
    }
    因为非静态变量x 在类A 实例化以前并没有初始化代码y = x + 1 无法得到正确
    的x 的值

  • 相关阅读:
    《牛客IOI周赛17提高组A》
    《Codeforces Round #645 (Div. 2)》
    《AtCoder Beginner Contest 168 E》思路详解
    《东华大学2020年程序设计竞赛题解》
    《牛客直播课习题1》
    《Codeforces Round #643 (Div. 2)》
    《TOJ5945》区间覆盖问题。
    解决方案、项目、程序集、命名空间
    SQL存储过程前面后面的几句代码是什么意思?
    无法将类型为“IList”的对象强制转换为类型“System.Data.DataRowView” 。的解决方法
  • 原文地址:https://www.cnblogs.com/handsomer/p/4164859.html
Copyright © 2011-2022 走看看