《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)...

概念

  • 编译时


编译时顾名思义就是正在编译的时候。那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码。(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言。比如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 
 7             nn b = new nn();//实例化一个nn的对象b
 8 
 9             mm c = b; //把mm的对象c指向b
10 
11             Console.WriteLine("非虚方法");
12 
13             a.F();
14             b.F();
15             c.F();
16 
17             Console.WriteLine("虚方法");
18             a.G();
19             b.G();
20             c.G();
21             Console.ReadKey();
22         }
23     }
24     class mm
25     {
26         public void F()
27         {
28             Console.WriteLine("mm.F()");
29         }
30 
31         public virtual void G()        //声明了一个虚方法
32         {
33             Console.WriteLine("mm.G()");
34         }
35     }
36     class nn : mm
37     {
38         new public void F()         //隐藏了父类的F方法
39         {
40             Console.WriteLine("nn.F()");
41         }
42 
43         public override void G()        //重写了方法G
44         {
45             Console.WriteLine("nn.G()");
46         }
47     }

运行结果截图如下:

对象a,b没有问题,但对象c的编译时类型为mm,那是因为对象a,b,c都是引用类型,运行时类型=编译时类型,但对于虚方法来说,调用哪个方法取决于该实例运行时的类型。

总结

 2.用运行时常量(readonly)而不是编译时常量(const)
    运行时常量(readonly)
        不能声明在方法中
        使用更灵活,便于后期维护
        运行时求值
        能使用任意类型
        二进制层次兼容
    编译时常量(const)
        可声明在方法中
        性能优于readonly
        值在目标代码中替换
        仅能用于基本类型(内建的整数和浮点类型)、枚举或字符串
        二进制层次不兼容
        在编译时必须得到确定数值(或永远都不会改变)时使用,例如attribute的参数和枚举的定义等

转载于:https://www.cnblogs.com/hekuerle/p/6773298.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQ介绍

一:MQ介绍 1:异步 2:解耦 3:削峰 二:MQ优缺点 三:Kafka和RabbitMQ和RocketMQ比较

白月光

张信哲----白月光http://mu.njzx.com/gt/nan/zxz-200409/01.mp3白月光 心里某个地方那么亮 却那么冰凉每个人都有一段悲伤想隐藏却欲盖弥彰白月光 照天涯的两端在心上 却不在身旁擦不干你当时的泪光路太长追不回原谅你是我不能言说的伤想遗忘又忍不住回想像流亡一路跌跌撞撞…

oracle 次月,Oracle日期查询:季度、月份、星期等时间信息

摘要:Select to_char(sysdate,Q) from dual;--指定日期的季度Select to_char(sysdate,MM) from dual;--月份Select to_char(sysdate,WW) from dual;--当年第几周Select to_char(sysdate,Q) from dual;--指定日期的季度Select to_char(sysdate,MM) from dual;--月份S…

转:A/B测试:实现方法

概念:http://www.aliued.cn/2010/09/13/ab-testing-basic-concept.html 我们先来看一个图: (注:感谢Algo提供本图。) 上图展示了 A/B 测试的实现原理。从左到右,四条较粗的竖线代表了 A/B 测试中的四个关键…

同学录

在中学同学的提醒下,去5460和ChinaRen的同学录更新了我的联系方式等等,了解到中学同学过年时在家乡搞了一个聚会。很久没有见过他们了,最近的一次是去年在zte南研所见到张辉,他从zte深圳来南京出差,此后不久我就离开了…

linux命令编写四位数密码本,grub-crypt命令 – 对口令进行加密

grub-crypt命令的作用是对口令进行加密。grub-crypt命令支持对口令进行MD5和SHA加密,默认情况下是对口令进行SHA-512加密。SHA是Secure Hash Algorithm的简写,中文为安全散列算法,是美国国家安全局 设计,美国国家标准与技术研究院…

mac修改host

1.打开终端 2.输入sudo vi /etc/hosts 3.输入密码 4.进入文件hosts,然后按“i”,进入编辑模式 5.把你的host添加到最后 6.esc推出编辑模式 7.输入:wq,保存退出

宝洁广告的智慧

有趣的是,一大批写文章针砭宝洁拿稿费的营销高手,同时也在满心期待某天能加入宝洁一了夙愿。而宝洁的形象之所以如此深入人心,除了家家户户都在用宝洁公司的产品之外,更离不开十余年宝洁公司通过“宁拙勿巧、气势绵长”的广告运作…

语法之知识点的改进(Func/Action)

上一章我们讲到关于面向对象思想上C#和JAVA之差别。笔者分别从面向对象的三大特性入手。而本章主要讲一些C#改进的知识点。在.NET Framework 2.0之后出现很多新的知识点。这些知识点更是让C#在写法上更加的多样性。有些写法还真的让笔者觉得很有不错。由于这一部分的知识更多是…

linux取字符串的前面,Linux Shell 截取字符串

shell中截取字符串的方法很多${var#*/}${var##*/}${var%/*}${var%%/*}${var:start:len}${var:start}${var:0-start:len}${var:0-start}下面用几个例子展示一下:1) 获得字符串的长度语法:${#var}示例代码:str"http://www.fengbohello.xin…

vs.net 2005 beta 2安装问题

我之前已经卸载了BETA 1了,但可惜安装后,在新建工程后,还是出现 "package load failur"等错误信息。比较郁闷。于是搜索了下,发现有位外国牛人的blog,提供了很好的解决方法 http://blogs.msdn.com/astebner/default.asp…

idea修改新的git提交地址

更换git地址步骤 1、点击VCS 2、点击Git 3、点击Remotes 点击框中链接即可在右边看到一个铅笔字样的按钮,即可看到如图所示弹窗 点击铅笔(编辑),看到新的弹窗,链接已经被默认选中这时候粘贴新的git地址,点…

[HNOI2008]玩具装箱toy(dp+斜率优化)

斜率优化问题一般都是决策单调问题。对于这题能够证明单调决策。 令sum[i]sigma(c [k] ) 1<k<i , f[i]sum[i]i , cL1; 首先我们能够写出转移方程 dp[i] min( dp[j] (f[i]-f[j]-c)^2 ) 。令决策j1<j2。若决策j2更优有 dp[j2](f[i]-f[j2]-c)^2<dp[j1](f[i]-f[…

全球500强企业人力资源管理之道

美国杜邦的组织机构改革 美国杜邦公司(DuPont)是世界上最大的化学公司&#xff0c;建立至今&#xff0c;已近200年。杜邦公司所创设的组织机构&#xff0c;曾成为美国各公司包括著名大公司的模式&#xff0c;并反映了企业组织机构发展演变的一般特点。 拜耳公司人力资源管理…

mac idea实现全局替换

点击Edit ----- Find ----- Replace in Path 例如要把项目中的cc替换为aa 点击Replace All

linux下防火墙脚本,Linux系统如何修改防火墙配置

这篇文章主要介绍了Linux系统如何修改防火墙配置,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下改Linux系统防火墙配置需要修改 /etc/sysconfig/iptables 这个文件vim /etc/sysconfig/iptables在vim编辑器&…

现代希腊语字母表

转载于:https://www.cnblogs.com/zhangzujin/p/6782532.html

在俱乐部首页看不到的团队成员(更新中...)

截至到目前&#xff0c;可能因为暂时在博客园没有用户ID&#xff0c;在深圳.NET俱乐部首页看不到的几位成员是&#xff1a;1.小郑&#xff1a;没有留下任何信息&#xff0c;如果看到的话请补充。2.周文军&#xff1a;zhouwjsytech.com.cn &#xff1b;深圳时代高科&#xff1b;…