文档介绍:第二章 C#程序设计基础
1
第一个C#程序--Hello,World!
创建控制台应用程序
完整对象路径=
例如,?
using ;
(“Hello,World!”);
调试运行F5, 非调试运行Ctrl+F5(忽略断点)
2
CTS(Common Type System)(或者说中间语言(IL)中使用的预定义数据类型)的集合,确保这些语言可以相互传送数据,。
值类型直接存储其值,存储在堆栈Stack中;而引用类型存储对其值的内存地址的引用,存储在运行库托管堆heap中。
我们必须在设计类型的时候就决定类型实例的行为。这种决定非常重要,用《CLR via C#》作者Jeffrey Richter的话来说,“不理解引用类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题(I believe that a developer who misunderstands the difference between reference types and value types will introduce subtle bugs and performance issues into their code.)”。这就要求我们正确理解和使用值类型和引用类型。
关于正确理解和使用值类型和引用类型,参见
C#的值类型和引用类型
3
具体的值类型和引用类型见课本P31 -P38
C#数据类型不过是CTS类型的别名而已。
如,(别名)而已
即int i; 可以用 i; 代替
《Framework Design Guidelines》一书中说:我们要避免在标志符中使用语言特有的名字(别名)来称呼它们。因为别名没有增加任何价值,反而引起了大量的混淆。
所以,()而不是ToInt(),()而不是ToLong()。
4
C#的命名规范
参见 ().aspx
标识符 大小写方式 示例
类 Pascal AppDomain
接口 Pascal IDisposable
方法 Pascal ToString
命名空间 Pascal
参数 Camel typeName
属性 Pascal BackColor
枚举类型 Pascal ErrorLevel
枚举值 Pascal FatalError
事件 Pascal ValueChanged
异常类 Pascal WebException
只读的静态字段Pascal RedValue
5
装箱boxing 拆箱unboxing
装箱
将一个值类型实例转换为一个相同内容的引用类型实例
当想把值类型实例作为某方法(参数定义为引用类型)的参数时,装箱发生
基于CLR的语言隐藏了装箱过程,程序员不需显式转换,但带来性能上的问题
例:
int i = 1;
object o = i; // boxing
int j = (int) o; // unboxing
拆箱
装箱的逆过程,需显式转换
如果应用程序频繁地把值类型变量作为对象处理,最好最初使用引用类型声明。
6
类型转换
隐式转换
编译器自动进行
byte bData = 20; int iCount = bData;
int iCount = 20; byte bData = iCount ;
编译通过
报错,为什么?
显式转换
上面的错误怎么修改才能编译通过?
int iCount = 20;
byte bData = (byte)iCount ;
但是,显示转换时可能会发生截断或溢出。
7
强制转换
数值字符串数值,如,”123”123
Convert类:将一个基本数据类型转换为另一个基本数据类型
string str = "123";
int i = (str);
(“Int32: {0}”, i);
Parse方法: 将数字的字符串表示形式转换为它的等效 32 位有符号整数。一个指示操作是否成功的返回值。
string str = "123";
Int32 int32Val;
Int32