CHAPTER2 Learning the C# Language
这一章将对C#语言进行概述。论述的内容包括数据类型,操作方式,定义函数需要的代码,循环,特定逻辑.虽然你不需要去了解全部的细节,但这正是职业与业余的区别.对学习者的建议是,你可以不必要去记住这一章,可以当有需要的时候返回到这一章来.
The .NET Languages
使用C#代替VB.NET仅仅只是开发形式的变化,而而并不影响其他,同样你也可以使用第三方提供的语言,但需要记住的是.NET Framework里CLR只认识中间语言,而并不认识其他的语言.所以使用任何语言编写的程序,在被编译成中间语言之前,是无法被CLR运行的.
C# Language Basics
Case Sensitivity
有些语言是大小写敏感的,例如C,C#,JAVA,而VB.NET不是的,如果使用VB.NET的人在使用大小写敏感的语言时,如果不注意大小写敏感,则编译器的编译是不能通过的.C#的语言比较多的是小写.
Commenting
注释加强程序代码的可读性,他不会被编译器编译,C#提供了两种注释方法,第一种在"//"后写注释,"//"所在行之后的内容全部会被当作注释,第二种/*与*/之间的内容,他们之间的内容会被当作注释.
C#还有一种基于XML的注释,此格式与HTML的语言很相近,格式是
///<summary>
///............
///............
///</summary>
他们之间的内容会显示出来,做为对某个按钮的使用说明.
Line Termination
C#语言的任何一个语句是以";"结尾的,如果一行最后没有";",那么他会把下一行也算为这个语句,直到";"为止.
例如:
myValue=myValue1+myValue2+myValue3;
myValue=myValue1+myValue2+
myValue3;
myValue=myValue1+
myValue2+
myValue3;
是一样的,他们代表的,执行的是同一个动作.
Block Strctures
C#的代码放在{}之间,{}之间的代码被看做是一个整体,{}里面还可以有{},而且{}是成对出现的,这好比是文章的开始"{"与文章的结束"}".
Variables and Data Types
任何语言都可以定义变量,变量用于存储相应的数据信息,使用C#定义变量时,首先要给变量命名,然后要赋予变量正确的类型,这些类型包括,文本,数据,时间,指针,类等等.例子 int errorCode 定义了一个名为errorCode的整数变量.
在解决不同语言的定义变量类型使用名称的不同这个问题上,微软提出了一个基础变量类型.
基础变量类型,VB变量类型,C#变量类型表如下:
Table 2-1.
Class Library Name VB Name C# Name Contains
Byte Byte byte An integer from 0 to 255.
Int16 Short short An integer from –32,768 to 32,767.
Int32 Integer int An integer from –2,147,483,648 to 2,147,483,647.
Int64 Long long An integer from about –9.2e18 to 9.2e18.
Single Single float A single-precision floating point number from approximately –3.4e38 to 3.4e38.
Double Double double A double-precision floating point number from
approximately –1.8e308 to 1.8e308.
Decimal Decimal decimal A 128-bit fixed-point fractional number that
supports up to 28 significant digits.
Char Char char A single 16-bit Unicode character.
String String string A variable-length series of Unicode characters.
Boolean Boolean bool A true or false value.
DateTime Date * Represents any date and time from 12:00:00 AM,
January 1 of the year 1 in the Gregorian calendar,
to 11:59:59 PM, December 31 of the year 9999.
Time values can resolve values to 100 nanosecond
increments. Internally, this data type is stored as a 64-bit integer.
TimeSpan * * Represents a period of time, as in ten seconds or
three days. The smallest possible interval is 1 tick
(100 nanoseconds).
Object Object object The ultimate base class of all .NET types. Can
contain any data type or object.
* If the language does not provide an alias for a given type, you can just use the .NET class name.
*代表,这种类型在此语言中没有定义,但这种类型是实际存在的,当然也是可以使用的,例如C#要使用TimeSpan类型,可以这样来定义,
TimeSpan mytime;/*我想,要使用TimeSpan类型,必须得加上一个前缀,例如System.Time.TimeSpan,这个不一定正确,只是打个比方*/
其他存在的数据类型也可以这样定义.
Assignment and Initializers
一旦定义了变量,就要对变量进行赋值了,例如
int errorcode;
errorcode = 10;
关于变量定义的方式,可以查看C语言的定义以及赋值方式.但有一点需要注意,例如:
decimal myDecimal = 14.5;
decimal表示的是数据范围是,大约是1.0*10^-28到7.9*10^28,decimal的位数是128,double的位数是64,那么为什么decimal没有double表示的范围大呢,这是因为浮点数分两部分存储:尾数和阶码(指数部分),表示尾数的位数多则精度高,表示指数的位数多则范围大,double虽然64位,但其精度低,故其可以表示的范围大,decimal虽然是128位,但由于其用了较多的位来表示其精度,只好牺牲表示范围了.在微软的帮助书中这样写到,decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。
上面这个例子,赋值的时候会自动将myDecial定义为double类型,如果要避免这种情况的发生,则定义时要加上decimal myDecimal = 14.5M;
为什么定义的decimal类型变量在赋值的时候会被转换成double类型?有知道的高手还望指教一下!谢谢!
Strings and Escaped Characters
"\"和一些字符合在一起,就可以构成新的意思,所以"\"也被称为转义字符,*看来以后还是要具体的查查转义字符怎么使用*,例如
path = "c:\\myapp\\myfiles"; 它和 path = @"c:\myapp\myfiles"; 的意思是一样的,因此,@字符的意思为忽略@之后的"\"字符.
Arrays
数组,这个是许多语言都有的定义方式,他可以定义一系列相同类型的数据,例如int类型,数组的起始数字是0.例子:
string[] stringArray = new string[4];
此处定义了1个字符串数组,数组的名字是stringArray,数组的成员有4个(而不是5个,这个问题很容易混淆),访问数组的方式是,例如,访问数组成员的第一个是stringArray[0],第二个是stringArray[1],依次类推.
当然还可以定义一维数组,二维数组,三维数组.他们都遵循上面的规则.
在数组被定义,但是没被初始化的时候,他们会被默认为0或者false.
以二维数组为例子,定义一个二维数组.应该如下定义:
int[4,2] intArray = {{1,2},{3,4},{5,6},{7,8}};/*不一定要遵循这个赋值规则,这是两个值一起赋值,也可以单个单个 的赋值*/
上面的数组,可以使用理解EXCEL表格来理解,int[4,2],其中4代表行数,2代表列数,所以这个数列定义了8个整型,第一个是intArray[0,0],最后一个是intArray[3,1].
The Arraylist
这对我而言是个新东西,我说说我的理解吧,这个可以说是一个比较特殊的数组类型,你可以使用他来定义一个数组,但在没有转换他之前你是无法使用他的,因为他并没有具体的类型,他也许是int,也许是char,也许是string.你可以把你想要的数据放进去,等需要使用的时候再把他转换一下提出来,似乎我表达不清楚,那么我来举个例子吧.
ArrayList dynamiclist = new ArrayList();
dynamiclist.Add("one");
dynamiclist.Add("one");
dynamiclist.Add("one");
这样dynamiclist数组里面就有了三个,这三个都是one;
string item = Convert.ToString(dynamiclist[0]);
int myvalue = Convert.ToInt(dynamiclist[1]);/*ToInt是我猜测的,我并不知道有没有这个方法,我是类推的*/
bool myboolean = Convert.ToBool(dynamiclist[2]);/*ToBool也是猜的*/
我想,除了第一个是one字符串之外,第二个是数字,第三个是bool数.
因此,这个数组打破了一个数组内定义的数据必须是相同类型的这样一个规定,你可以往ArrayList型数组里放入数字,字符,字符串等.我想这就是这个数组类型存在的必要.
Enumerations
枚举,和类有点相似,但有不一样,类有方法,而他却没有,例如;
enum UserType
{
Admin,
Guest,
Invalid
}/*这几个会被自动赋值,Admin被赋值0,Guest为1,Invalid为2,需要注意的是,他们之间是",",而不是";"*/
UserType newUserType = UserType.Admin;
也可以自主赋值,只需要在后面加上=和数字即可,例如 Admin = 80;