度量快速开发平台-专业、快速的软件定制快开平台

标题: 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译... [打印本页]

作者: fteair    时间: 2020-3-27 11:57
标题: 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译...
概念

编译时顾名思义就是正在编译的时候。那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码。(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言。比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL。另外还有链接器、汇编器。为了了便于理解我们可以统称为编译器)

那编译时就是简单的作一些翻译工作,比如检查你有没有粗心写错啥关键字了啊。有啥词法分析,语法分析之类的过程。就像个老师检查学生的作文中有没有错别字和病句一样。如果发现啥错误编译器就告诉你。如果你用微软的VS的话,点下build。那就开始编译,如果下面有errors或者warning信息,那都是编译器检查出来的。所谓这时的错误就叫编译时错误,这个过程中做的啥类型检查也就叫编译时类型检查,或静态类型检查(所谓静态就是没把代码放内存中运行起来,而只是把代码当作文本来扫描下)。
所谓运行时就是代码跑起来了。被装载到内存中去了。(你的代码保存在磁盘上没装入内存之前是个死家伙。只有跑到内存中才变成活的)。而运行时类型检查就与前面讲的编译时类型检查(或者静态类型检查)不一样。不是简单的扫描代码。而是在内存中做些操作,做些判断。
代码  
为了更加直观的理解编译时和运行时的区别,我们看以下代码:
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             mm a = new mm();

  6.             nn b = new nn();//实例化一个nn的对象b

  7.             mm c = b; //把mm的对象c指向b

  8.             Console.WriteLine("非虚方法");

  9.             a.F();
  10.             b.F();
  11.             c.F();

  12.             Console.WriteLine("虚方法");
  13.             a.G();
  14.             b.G();
  15.             c.G();
  16.             Console.ReadKey();
  17.         }
  18.     }
  19.     class mm
  20.     {
  21.         public void F()
  22.         {
  23.             Console.WriteLine("mm.F()");
  24.         }

  25.         public virtual void G()        //声明了一个虚方法
  26.         {
  27.             Console.WriteLine("mm.G()");
  28.         }
  29.     }
  30.     class nn : mm
  31.     {
  32.         new public void F()         //隐藏了父类的F方法
  33.         {
  34.             Console.WriteLine("nn.F()");
  35.         }

  36.         public override void G()        //重写了方法G
  37.         {
  38.             Console.WriteLine("nn.G()");
  39.         }
  40.     }
复制代码



作者: Adam丶鱼    时间: 2020-3-27 17:32

作者: Adam丶鱼    时间: 2020-3-27 17:34

作者: 张兴康    时间: 2020-3-27 18:03

作者: 张兴康    时间: 2020-3-28 18:15





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2