《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,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...
随机推荐
- 哥们,你真以为你会做这道JVM面试题?
有关Java虚拟机类加载机制相关的文章一搜一大把,笔者这里也不必再赘述一遍了. 笔者这里捞出一道code题要各位大佬来把玩把玩,如果你一眼就看出了端倪,那么恭喜你,你可以下山了: public cla ...
- 干货—MySQL常见的面试题+索引原理分析!
目录 MySQL索引的本质 MySQL索引的底层原理 MySQL索引的实战经验 面试 问:数据库中最常见的慢查询优化方式是什么? 同学A:加索引. 问:为什么加索引能优化慢查询? 同学A:...不知道 ...
- 经典qq表情插件(html+nodejs应用)
由于目前在接触聊天室项目,接到一个需求实现一个类似QQ表情.在网上找了一款jquery经典表情插件.下面介绍一个用法: HTML: 首先在html页面的head中引入jQuery库文件和QQ表情插件j ...
- fast.ai(零)windows + pytorch 0.4
一.下载 git clone https://github.com/fastai/fastai.git 或者直接下载下来 二.安装pytorch 去官网安装建议安装即可 https://pytorch ...
- Redis最新面试题26题(初级、中级Redis面试题)
Redis 1级(入门基础) 1.Redis有哪些数据类型? string,list,set,sorted set(Zset),hash 2.集合和列表有什么区别? 列表是可以从两端推入.推出数据的队 ...
- shiro测试常见错误
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.sh ...
- 修改Spring Boot默认的上下文
前言 默认情况下,Spring Boot使用的服务上下文为"/",我们可以通过"http://localhost:PORT/" 直接诶访问应用: 但是在生产环境 ...
- Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例
目的 安装JDK 9, 练习Jshell工具的使用, 体验Java的交互式编程环境. 什么是Jshell 其实就是一个命令行工具,安装完JDK9后,可以在bin目录下找到该工具,与Python的解释器 ...
- leetcode — string-to-integer-atoi
/** * Source : https://oj.leetcode.com/problems/string-to-integer-atoi/ * * Created by lverpeng on 2 ...
- 【P2P浏览器】跟大家讨论一个想法
内容分享者通过这个浏览器来创建自己待分享的内容 任谁看了这些内容,就会在本地保存一份,成为一个节点只要任一个节点在线,别人就能看这些内容在线的节点越多,获取这些内容的速度越快 任何使用这个浏览器的人, ...