《Inside C#》笔记(二) 初识C#
一 程序的编译、构成
a) 编写C#代码一般用VS,但作者在这儿介绍了使用记事本编写C#代码并编译运行的过程,以便对VS有更深入的认识。
用记事本编写C#代码后,修改文本文件的后缀为.cs,然后用csc.exe(C# Command-Line Complier)来编译。如果编译成功,在命令行输入程序的路径和名称便可以执行了。
b) 用命名空间来为类分组,可以在.cs文件的头部使用Using指令来代指命名空间,后续使用类时,编辑器会从Using指令指定的命名空间中查找是否有对应的类。
还可以在Using指令区域为类创建别名,比如:

c) 程序错误
对程序来说,任何意料之外发生的事都可以认为是错误。程序错误分为两种:编译时错误和运行时错误。前者在编译的时候就会发生,这时编辑器会提示错误信息类似:

错误信息告知了编译时发生的错误详情,并有错误代码,比如图中的cs0234。关于该错误的更详细信息可以在.NET Framework SDK Documentation中根据错误码查找。

对于编译时错误,如果一个文件中有多处错误,编译器只会报第一个错,因为只要遇到错误,编译就会终止。
二 ILDASM
这里作者详细介绍了HelloWold.cs程序使用ILDASM生成的IL码。

Main函数的IL码如下:

程序第一行.method关键字表示方法,另外有public、static修饰符,最后还有managed关键字,与之对应的还有unmanaged、unsafe,这些作者会在后面讲解。
第二行的.entrypoint表示这个方法是这个程序的入口,这在C#中对应Main函数为入口函数。
IL_0000行,ldstr为Load String的简写,将硬编码“Hello, World”装载到内存。
IL_0005行,调用Console.WriteLine函数,后面括号中的(class System.String)指示了参数的类型和个数。
最后一行还有IL_000a: ret,图里面漏掉了,表示返回执行结果。
三 关于命名规范
统一的命名规范有很对好处,比如降低维护成本。本书成书于2002年前后,作者还认为匈牙利命名规范(名称中包含了变量的类型、作用域等信息)不适合面向对象语言,因为在这类语言中类型都继承自基本类型,比如在C#中都继承自System.Object。
推荐组合使用帕斯卡命名法(Pascal Casing)和驼峰命名法(Camel Casing),在类、方法的命名中使用帕斯卡命名法,在变量的命名中使用驼峰命名法。详情如下:
命名空间:帕斯卡,推荐使用公司名称
类:帕斯卡,使用能描述类的职能的名词
方法:帕斯卡,使用描述方法动作的动词
方法参数:帕斯卡,使用有意义的名称
接口:帕斯卡,以大写字母I开头,代表某种行为,推荐使用I***able的形式
《Inside C#》笔记(二) 初识C#的更多相关文章
- Oracle学习笔记二 初识Oracle(二)
Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer
作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
- Mastering Web Application Development with AngularJS 读书笔记(二)
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...
- Python 学习笔记二
笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- webpy使用笔记(二) session/sessionid的使用
webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...
随机推荐
- C#基础-gc算法
众所周知,c++是需要程序员手动管理内存的,然而手动释放内存很容易被程序员遗漏,从而导致资源浪费或内存泄露.为解决这个问题,垃圾回收器诞生了,代替程序员自动管理内存的释放.至于gc算法则是垃圾回收器清 ...
- git无法识别新增的文件
问题是这样的我新增几个文件夹打算提交到git库,但输入指令:“git status” 发现新增的文件夹并没有出现在准备提交区里 不知道什么原因造成的后来我百度找到方法 使用指令:“git add -f ...
- Python基础教程(第3版) 笔记(三)
1.9.1让脚本像普通程序一样在UNIX中运行脚本,只需将下面的代码作为脚本的第一行, 就可在UNIX中轻松运行脚本: #!/usr/bin/env python 要像普通程序一样运行脚本,还必须将其 ...
- python 使用PyInstaller将程序打包
PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了.类似于C#窗体程序使用Setup Factory 9 Trial进行打包. 安装: ...
- java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.bjsxt.mapper.PeopleMapper
报错信息: Type Exception Report Description The server encountered an unexpected condition that prevente ...
- SQL Server性能优化(9)聚集索引的存储结构
一.索引的概念和分类 索引的概念大家都知道,日常开发中我们也会使用常见的聚集索引.非聚集索引.但是除了这两者以外,sqlserver中还提供其他的索引,如: a. 唯一索引:不包含重复键的索引,聚集索 ...
- python计算数组中对象出现的次数并且按照字典输出
解决的问题如题,如果对Python不是很熟悉,解决的办法可能如下: test_array=[1,2,3,1,2,3]; def count_object1(array): result_obj={} ...
- php网页上传文件到Ubuntu服务器(input type=fire)- 赖大大
直接上代码: <form enctype="multipart/form-data" method="post" action=""& ...
- SQL 必知必会·笔记<20>高级SQL特性
1. 约束 约束(constraint)就是管理如何插入或处理数据库数据的规则.DBMS通过在数据库表上施加约束来实施引用完整性. 1.1 主键 主键是一种特殊的约束,用来保证一列(或一组列)中的值是 ...
- JVM笔记10-性能优化之高级特性
一.垃圾回收器配置和 GC 日志分析 1.堆典型配置: 32位的操作系统限制堆大小介于1.5G到2G,64位操作系统无限制,同时系统可用虚拟内存和可用物理内存都会限制最大堆的配置. 堆空间分配典型配置 ...