度量快速开发平台-专业、快速的软件定制快开平台
标题: 《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信息,那都是编译器检查出来的。所谓这时的错误就叫编译时错误,这个过程中做的啥类型检查也就叫编译时类型检查,或静态类型检查(所谓静态就是没把代码放内存中运行起来,而只是把代码当作文本来扫描下)。
所谓运行时就是代码跑起来了。被装载到内存中去了。(你的代码保存在磁盘上没装入内存之前是个死家伙。只有跑到内存中才变成活的)。而运行时类型检查就与前面讲的编译时类型检查(或者静态类型检查)不一样。不是简单的扫描代码。而是在内存中做些操作,做些判断。
代码 为了更加直观的理解编译时和运行时的区别,我们看以下代码:
- class Program
- {
- static void Main(string[] args)
- {
- mm a = new mm();
- nn b = new nn();//实例化一个nn的对象b
- mm c = b; //把mm的对象c指向b
- Console.WriteLine("非虚方法");
- a.F();
- b.F();
- c.F();
- Console.WriteLine("虚方法");
- a.G();
- b.G();
- c.G();
- Console.ReadKey();
- }
- }
- class mm
- {
- public void F()
- {
- Console.WriteLine("mm.F()");
- }
- public virtual void G() //声明了一个虚方法
- {
- Console.WriteLine("mm.G()");
- }
- }
- class nn : mm
- {
- new public void F() //隐藏了父类的F方法
- {
- Console.WriteLine("nn.F()");
- }
- public override void G() //重写了方法G
- {
- Console.WriteLine("nn.G()");
- }
- }
复制代码
作者: 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 |