ITPub博客

首页 > IT职业 > IT职场 > 嵌入式学习资源—说说使用static和const关键字

嵌入式学习资源—说说使用static和const关键字

IT职场 作者:千锋教育官方 时间:2019-08-14 13:23:22 0 删除 编辑

static 和 const 两个关键字 , 好像都是跟静态有关 , 初学时易于混淆不算 , 实际用的时候也是能不用就不用 , 反正用这两个关键字的机会也少 , 而且不用也可以 , 呵呵 , 这种想法也不是我一个人有的 , 几乎所有人这么做时也不是想了想才决定的 , 此事无关风月 , 关乎天性 , 呵呵 .
   
首先一定要弄清楚的是 ,static 关键字修饰的成员虽然叫静态成员 , 却并非是不可改的 , 如果有这个误解 , 千万要从此忘记 .static 关键字被用来声明一个跟对象无关的类型成员 , 这个说法好像不容易理解 , 举个例子 :

 public class Class1()
 {
   public static x = 1;
   public y = 2;
   public Class1()
   {

   }
 }
 public class Class2()
 {
   Class1 myClass1 = new Class1();
   myClass1.x = 2; //
不可以 !x 为静态成员 , 不能以 Class1 的实例对象引用
   myClass1.y = 3; //
可以

   Class1.x = 2;  // 可以
   Class1.y = 3;  //
不可以 ,y 不是静态成员 , 只能以 Class1 的实例对象来引用
 }
   
   
从上面代码片断可以看到 , 使用 static 修饰的字段 , 只能用类名来引用 , 而不能通过类实例化了的对象来应用 , 那么这么做有什么用处 ? 用处是明显的 , 举上面的例子来说 , 不管 Class1 类实例化了多少个对象 , 这些对象的 x 字段的值都是一样的 , 而且对 x 字段值的修改 , 会体现在所有该类型的对象中 . 如在 Class2 类的代码中对 Class1 类再实例化一个对象 myClass2, 则 myClass1 和 myClass2 对象的 x 成员的值都是相同的 , 如果 Class1.x 的值改为 10, 则 myClass1.x 和 myClass2.x 的值都是 10.
    C#
是一种完全面向对象化的语言 , 所有的字段都包含在对象中 , 所以没有像 C++ 或者 VB 里那样的全局变量存在 , 这里 , 使用 static 关键字修饰的字段起到了一个全局变量的作用 .
   
另外 ,static 关键字除了修饰变量 , 也修饰方法 , 属性 , 事件等 , 除了使用 static 关键字修饰的方法 , 只能通过类型名称来调用 . 这样 , 对于需要频繁使用的方法 , 使用 static 关键字修饰能够节省 内存, 因为该方法不会被频繁初始化 .
    const
关键字用于定义一个常量值 , 而且变量必须在声明时赋值 , 用 const 关键字定义的这个值是不允许修改的 , 例 :

 const int CAPACITY;
 CAPACITY = 4;   //
不可以 ! 必须在声明时赋值
 const int DEFAULT_CAPACITY = 4;
 string[] paramArr = new string[DEFAULT_CAPACITY];
 DEFAULT_CAPACITY = 2;  //
不可以 ! 此为常量值不可改
 
   
有人要说了 , 定义一个不能修改的值有意义么 ? 当然有意义了啊 , 定义一个常量值常常用于初始化一个复杂对象的属性值 , 这个值被不慎修改的话 , 有可能造成该复杂对象出现问题 ,
举个浅显的例子 , 如上面代码所示 , 一个字符串数组使用 DEFAULT_CAPACITY 常量初始话一个有 4 个元素的对象 paramArr, 从对象名可以猜的出来它是用来接受参数变量的 , 假如不慎对 DEFAULT_CAPACITY 误操作修改成了 2, 那么就有两个参数值丢失了 , 从而可能造成不可预料的结果 , 所以一个常量值是有用处的 .
   
说道定义的变量不容修改的问题 , 不得不说起 C# 中还有一个 readonly 关键字 , 也是使用在字段上定义不容修改的值 , 但是 const 和 readonly 有几个区别 ,
   
区别 1) 在语法上 ,const 定义的字段只能在字段声明时初始化 , 而 readonly 字段既可以在声明时初始化 , 也可以在构造函数中初始化 , 根据不同的初始化 ,readonly 定义的字段可能会得到不同的值 .
   
区别 2) 在编译时 , 因为 const 字段在声明时即初始化 , 所以是编译时常数 , 而 readonly 字段虽然是只读的 , 其值却可能要等到一个对象初始化后才能知晓 , 所以可以是运行时常数 ( 但 readonly 字段如在声明时初始化仍是编译时常数 ).

区别 3) 在使用时 ,const 字段不能用 static 关键字修饰 , 但 readonly 可以 .
   
说说这两个关键字 , 作为好好练习 编程 基本功的开始 , 把这些关键字都会用了 , 我就可以说我 C# 入门了 , 呵呵 .


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69914734/viewspace-2653639/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
千锋IT职业教育——做真实的自己 用良心做教育

注册时间:2019-03-28

  • 博文量
    140
  • 访问量
    92344