Sunday, October 3, 2004
微软提出的CLS(Common Language Specification, 通用语言标准)对能被用来编写dotNET程序的语言的最小功能集做出了规定。
就拿C#来说,它是目前程序设计语言“以效率换安全”发展潮流的一个产物。
“编译器”把整个程序一次性地全部转换为将被计算机执行的机器代码;机器码形成一个“可执行文件”,这个文件可以直接在计算机上运行。但因为机器码是与某特定计算机相关联,所以可执行文件只能在特定的类型的计算机上执行。
传统过程化程序设计语言(如C),数据将由过程(或者叫“函数”“子例程”)代码进行处理;在面向对象程序设计语言里,程序员创建各种“类”,并由此衍生出“对象”,一个对象就是代码和数据的混合体,数据由对象自身进行处理。这种观念大大提高了代码的“复用性”。
20世纪90年代,SUN公司推出了Java,这种面向对象程序设计语言以C为蓝本,但与C++有着显著的区别。JAVA摒弃了C++某些难看又难用的语法,也剔除了某些有危险性的C语言功能,但它保留了C语言简洁紧凑的特点。
一个“操作符”(Operater)就是一个将使计算机执行某一个特定操作的符号或者单词;
在C#及其他很多现代程序设计语言里,程序代码都必须写成称为“类”和“方法”的单元。
最简单的C#程序仅包含一个类,这个类又仅包含一个方法---》Main()入口函数。
一个方法声明将由一个修饰符(such as static),一个返回值类型(such as void),一个方法名称,一个括在一对圆括号的输入参数列表,一个包含着该方法代码主体的语句块等组成.
一个方法就是一组用来完成某项特定任务的程序代码.
一个表达式可以是一个变量、一个常量或者是一个操作的执行或计算结果。
当C#对两个整数做除法运算时,它会把结果“截短”。幸好有求余(%)弥补。
Tuesday, October 5,2004
表达式(expression)是由操作数(operand)和操作符(operater)构成。一个表达式有他的值,因此表达式可以作另一个表达式的操作数。
C家族重要特征之一,精练,少打字。“复合赋值”操作符:+=加等;-+减等;++递增;--递减;……
C#编译器的特殊功能:出现在类、方法或者其他程序结构元素的前面且以三个斜线“///”开头的注释允许包含XML标记。C#编译器将生成一个XML文件来存放这些标记。
在如今的数字计算机里,各种信息都将编码为一系列“比特”;比特是信息最简单的表示形式。计算机硬件用电压的高低或者有无来表示一比特;
现今的个人电脑大都是32位计算机,这是因为它们以32比特作为对数据进行存储和处理的基本单位。早期的计算机每次只能处理8个比特,人们把8个比特称为一个字节。即使到了今天,字节仍是计算机领域最常用计量单位。
C#使用32比特(4个字节)来表示一个int类型的变量。一个int可以用来存储正数和负数,所以int正式定义是“32比特的带符号整数”。
二进制数是以2的幂次来表示的,2的N次幂就是一个二进制数字1后面跟上N个0所构成的一个二进制数。如:1-0000-0000等于256或28
现代的数字计算机里,负数通常被表示成“二进制补码”。二进制补码指的是一种用来对正数和负数进行转换的方法。如要表示-7(假设只有4个比特,头一位为符号位):先得7的二进制表示:0111,再把0111按取反加一得“补码”1001,1001即-7
C#关键字checked and unchecked激活溢出检查机制
C#支持8种整型数据;选用整型数据的基本原则:
@97%优先考虑使用int类型,32位便于处理也更有效率
@数值比int大,才选用long
@如果需要使用磁盘文件来存储或检索大量小整数,考虑选用shot,byte 节约空间
字段和方法的相似之处是它们都是某个类或者某个结构的成员,但字段要简单得多。一个字段其实就是一个变量或者一个取值固定不变的常数。
Thursday, October 7, 2004
在一条涉及多种运算的复杂语句里,C#将根据操作符的优先级和运算规则依次对各有关操作的操作数进行必要的类型转换(小容量向大容量转)。在赋值操作中,等号右边的表达式将被隐含地转换为等左边的变量的类型。
方法重载(overload)就是一个方法的多种不同版本。如Console.WriteLine()方法的方法签名(即输入参数)可以是整数也可以是字符串。
同样,操作符重载是指用同一个操作符完成不同类型的操作的做法。如加号“+”用作数值加法和字符串合并。
C#里的“字符串里的引号”问题:
用转义字符改变字符的正常含义如:string StringWithQuotes = "The name of the composition is\"Appalachian Spring.\"";
用"@"关提掉转义如: string Directory = @"C:\Program files\Key of c#";
程序在内存中分布(清楚存放部位)
代码区:存放程序的代码,程序的各个函数代码块;
全局数据区:存放程序的全局数据和静态数据;
堆区:存放程序的动态数据;
栈区:存放程序的局部数据,可以说是函数中的数据;
特别的是栈区的数据,函数结束就会释放.
C#里的“引用”不是C/C++里的“指针”,它是安全的“引用指针”,与C/C++“指针”完成类似的操作。引用类型数据(如类)的具体数据内容被保存在从堆里分配的某个内存块中,而这个内存块的引用指针则保存在堆栈上。
从内存分配来理解null和空串的区别:
保留字null是一个取值为0的引用指针,这意味着C#不会多堆里分配内存。一个没用引用任何堆内存的字符串变量叫作一个“null字符串”。
当某个字符串变量被赋值为null时,C#不会从堆里为它分配任何内存且堆栈上与它对应的值是0;
当某个字符串变量等于空字符串时,C#会从堆里为它分配一些内存,但字符串长度为0。
文本是人与计算机进行交流的主要媒介。人们“强迫”计算机显示文本输出和接受文本输入。即便是在只显示数值的场合,计算机也必须把各有关的有关数值的二进制表示形式转换为相应的文本输出形式。
int与string互转:
ToString是一个实例(instance)方法: string str = 123.ToString();//存在实例
Int32.Parse是一个静态(static)方法: int i = Int32.Parse("123");//创建实例
System名字空间还有一个很好用的Convert类。程序员可以利用Convert类所提供的各种静态方法对任意两种数据类型进行类型转换。如:
int i = Convert.ToInt32(str);
string str = Convert.ToString(i);
C#两种非整形数据类型:浮点数和decimal
浮点数很常用,但有着一个先天的不足,就是精度不够(float七位有效数字,double有15或16位)
对比于int和uint(32位),long和ulong(64位),decimal使用128位16个字节储存数据;其中用96位表示有效数字(29个),5位表小数点位置(0-28),一位作符号位,共102位余26位。
Saturday, October 9, 2004
decimal舍入
“四舍五入”:
Decimal.Truncate(Value);//向零方向舍入
Decimal.Floor(Value);//向负无穷方向舍入
“舍入为偶数”:
Decimal.Round(Value,Digits);//Round(3.345,2) = 3.34
格式字符串
Consloe.WriteLine("{0,20:X5}{1,10:C2}",str1,str2);//{占位,输出宽度:格式}
保留字“static”表明该方法为静态方法,将作用于类或结构而不是作用于类或结构中的某个特定的方法,它必须与类或结构的名字配合使用,如Console.WriteLine();
字段就是在一个类的内部,但在这个类里的所有方法的外部所声明的变量或者常数。如里字段只与这个类关联而不与类的实例关联,声明为静态static。
new保留字的角色和作用:
new表达式的返回值是一个引用(指针),它指系统从堆分配的那个内存块。如:int[] aiArray = new int[]
进一步理解new的作用:明确给对象在堆里分配空间
Random rand;//rand没被初始化,什么都不做
rand = new Random();//为rand从堆分配内存和初始化操作等
C#不允许你用保留字const去声明一个数组——只有在编译阶段被确定或计算出来的值才能被声明为常数;数组需要一个new操作,而new操作只有等到运行阶段才会发生。
程序学一项基本原则——“把变量,不管是数组还是其它类型的变量,尽可能声明为局部变量”;可是当需要在一个程序里频繁调用某个方法而这个方法又要用到一个其元素都是些常数的数组时,就应该把那个数组搬到那个方法的外部并把它声明为一个static字段。
.NET的Random类供程序员用来从从那颗随机种子开始生成随机数。
Monday, October 11, 2004
逻辑公式--德·莫干定律:
!( A | B ) = !A & !B
!( A & B ) = !A | !B
C#中的char数据类型:代表单个字符
在C#里,可以用一个字符array去创建一个字符串,也可以把一个字符串转换为一个字符array,但把一个C#字符串说成是一个字符array是不恰当的。C#有字符串数据类型string。
所有的程序设计语言都是用数值来代表字符的,但C语言把char看作是一种与int,short和long没有什么不同的数值类型。在C里,char的宽度是8个比特且代表一个ASCII字符,但在C#里,char的宽度是16个比特且代表的是一个Unicode字符。C#里的char变量不是数值。
String.Chars 属性
在 C# 中,该属性为 String 类的索引器。获取此实例中位于指定字符位置的字符。
new构造器的理解
如果要你创建一个由21个"@"字符构成的字符串,你会怎么做?
string str = "@@@@@@@@@@@@@@@@@@@@@";//老实型
string str = new string('@', 21);//简单聪明