以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Dot NET,C#,ASP,VB 』 (http://bbs.xml.org.cn/list.asp?boardid=43) ---- 初探c# (一 至 五) (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=75964) |
-- 作者:卷积内核 -- 发布时间:7/10/2009 4:06:00 PM -- 初探c# (一 至 五) /* 1 绪论 c# 是一种简练,时髦(?),面向对象(object oriented),类型可靠(type-safe)的 编程语言。它(发音:C sharp)是从c/c++发展而来的(?俺觉得更象是java),和c/c++是一个语系。所以,很容易被c/c++的程序员接受。c#的目标是结合Visual Basic的高产和C++质朴的力量。 c#将会是vs7的一分子。vs7还支持vb,vc和标记语言——VBScript和JScript。所有这些语言都会在Next Generation Windows Services (NWGS) platform 中得到支持(c#就需要一个NWGS SDK包,可以在m$的网站上下载)。有了这个东东(NWGS),c#就不需要自己的类库,而使用vc或vb这样一些成熟的库。c#也确实没有自己的类库。 废话完了。 1。1 一个老土的例子(就不能换换吗?)*/ 先说说怎样运行。首先,你需要windows2000!(是的,就是它,请各位不要随地丢果皮—— 整个香蕉丢给俺就可以了。)然后,需要NWGS SDK!(82.4mb,不算很大噢。嘿嘿,好在它没有自己的类库。)安装后,在你的程序所在的目录下键入: csc idontlikeHelloworld.cs (加上一个回车键) 是不是有点复古的味道?这个操作会在和你的*.cs相同目录下产生一个 i dont like Hello world 回车就可以结束它,非常简单。 不过,也可以这样:把它存成后缀为.c的文件更好 csc idontlikeHelloworld.c (加上一个回车键) 最终效果是完全一样的。 1: using System; using 其实是c++的关键字,在c#中的含义也相仿(就是说俺还不敢100%肯定,抱歉)。using用在另一个关键字namespace之后。还是先看看namespace。 namespace [identifier] { namespace-body } 俺的理解: 在{ namespace-body }中的是真正有用的东东,包括第五行的"nsole.WriteLine"的声明和定义(后面还会提到)。System是由NWGS定义的,咱们只需用(using)它即可。至于System在什么文件里定义,咱就不用管了!交给编译器(就是刚才那个“csc.exe”)去寻找。这就代替了c/c++中的“#include”,可以说是近了一步,避免大量烦人的细节。如果你没学过c/c++,就不用理会。namespace 在后面还会谈到。 2: class idontlikeHelloworld class:是c语系中另一个关键字“类”。表示一系列的特性(官方说法:属性)和行为方法,有了它你的程序就可以“另类”,创造与别不同的有你特色的东东噢!在这里,俺就定义了“idontlikeHelloworld”。注意:这也是c#强制的,对于每一个可执行的程序都必须有。你想干的事就可以记录在紧跟着你定义的class后面的一对花括号。注意:“{”和“}”一一对应的,“(”和“)”同样。 4: static void Main() { Main()是本例子第一个动作(行为方法),干的第一件事。它是属于俺定义的idontlikeHelloworld类的方法。并且是c#强制的,是程序的真正开始!在紧跟在它后面的“{}”中的语句顺序,就是程序的运行顺序!本例中只有一行(第六行干嘛用?你可以去掉再编译一次看看),输出一句话。 5: Console.WriteLine("i dont like Hello world"); 非常奇怪,Console(再次提醒:注意大小写)不是俺定义的,从何而来?它其实是属于Systemnamespace 的一个class。WriteLine()是Console类中的一个方法,用来显示一句话(字符串)。 语句不通顺,俺会在以后改进(update),敬请原谅!--“请先用叉子喝汤” /* idontlikeHelloworld.cs */ /* 看见了,当俺注销掉“using System;”后,在第五行和第六行加了“System”。程序的结果不会改变。但是,很明显的这样比较罗嗦,所以引入了“namespace”。 其实,class应该可以完成同样的功能。 |
-- 作者:卷积内核 -- 发布时间:7/10/2009 4:07:00 PM -- 初探c#(二)自动化的内存管理 手动管理内存需要程序员自行分配和释放内存块。这要求程序员有清晰的头脑和对整个运行过程有十分的把握(好难!)。而c#把程序员从这难以承担的任务中解放出来。在多数的情况下,这种自动内存管理提高代码的质量和程序员的生产力。并且,不会对程序的意图和执行产生幅面的影响(?俺可不相信m$的鬼话)。不过,估计比java的回收站好一点吧。因为c#出道迟嘛(尽胡扯)。 好了,来看看例子。*/ using System; class Test 其实,当显示完了“10”以后,就会有一个Node的实例符合被释放的条件,但垃圾收集器并不一定会这样做。 using System; |
-- 作者:卷积内核 -- 发布时间:7/10/2009 4:09:00 PM -- 初探c#(三)类型 c#支持两种基本的类型:一种是值(value types),一种是引用(reference types)。值包括简单类型(char、int、和float),枚举(enum)和结构(struct)。引用包括类(class),界面(interface),代表(delegate)和数组阵列(array)。值与引用不同之处在于:值直接存储它的数据内容;而引用存储对象 的引用。是不是粉费解?!打个比方吧。你在某地买了套别墅(好棒噢)。却从未去过,只知道地址,怎么办?你可以坐出租车,司机看了地址就知道怎样走不用你操心。你手里的地址就好像对象的名字,你把它写在程序中,就好像把地址给了司机。司机就是你的编译器,它知道该去哪。你豪华的房子就好比那个NGWS SDK开发包(82mb噢,够豪华了!俺的m啊--就这样烧喽)。房子里有你想要的东东,比如你想写一句话(i dont like Hello world),就好像上面例子,要用到“WriteLine”。于是,你就给出“WriteLine”的地址,比如:“Console.WriteLine”。明白?!俺可累了。zzz... (强打精神)不知道你想到没有,值和引用的区别可以引出一个重要特性。值的变量和变量存储的数据是一一对应的,唯一性。而引用则不然。引用中不同的变量可以引用同一个对象的实例。当其中一个变量改变实例的值时,其他引用这个实例的变量也会受到影响(当然,变量本身并没有改变,即,地址没变)。瞧,变量只是说明存储对象的位置(地址),而不是对象本身。就好像你漂亮的房子被烧了,但你的地址并没有改变,但地址对应的房子就没了。 也许是别人也有这个地址,他去烧了你的房子!好了,在给个例子:*/ 1: using System; /* 下面是输出的结果: 啊哈,应该粉清楚了吧。变量val1和变量val2互不影响,它们各自有自己的存储空间。而ref2复制了ref1,所以,它们引用了同一个对象的实例。当改变它们其中一个的时候,就会影响到另一个的值。 |
-- 作者:卷积内核 -- 发布时间:7/10/2009 4:10:00 PM -- 初探c#(四)预定义类型 c#提供了一系列预定义类型。它们与c/c++有不少相似的地方。预定义引用类型有object和string。object类型是所有其他类型的基础。 预定义类型包括符号数、无符号数、浮点、布尔、字符和十进制数。符号数有: sbyte、short、 布尔类型就像一个开关,只有两种状态:true或false。c#对布尔的要求比c/c++严格,与java类似。 */ 是没有问题的。但在c#中会引发一个编译错误(error CS0029: Cannot implicitly converttype 'int' to 'bool')。当然,这样牺牲了一点没有必要的灵活性。我们再也不能这样: */ 而必须: */
三层交换技术 交换机与路由器密码恢复 交换机的选购 路由器设置专题 路由故障处理手册 数字化校园网解决方案 我抄了一张预定义类型的简表供大家参考。 Type Description Examples object The ultimate base type of all other types object o = new Stack(); string String type; a string is a sequence of string s = "Hello"; sbyte 8-bit signed integral type sbyte val = 12; short 16-bit signed integral type short val = 12; int 32-bit signed integral type int val = 12; long 64-bit signed integral type long val1 = 12; byte 8-bit unsigned integral type byte val1 = 12; ushort 16-bit unsigned integral type ushort val1 = 12; uint 32-bit unsigned integral type uint val1 = 12; ulong 64-bit unsigned integral type ulong val1 = 12; float Single-precision floating point type float value = 1.23F; double Double-precision floating point type double val1 = 1.23 bool Boolean type; a bool value is either bool value = true; char Character type; a char value is a Unicode char value = 'h'; decimal Precise decimal type with 28 significant digits decimal value = 1.23M; 你也可以自定义自己的预定义类型,可以这样: */ |
-- 作者:卷积内核 -- 发布时间:7/10/2009 4:10:00 PM -- 初探c#(五)数组类型(Array types) 1.5 数组类型(Array types) 数组可以是一维的,也可是多维的。数祖的成员可以是整齐的,也可以是变长(jagged)的。 一维的数组是最普通,最简单的。这里值给出一个例子,就不多解释了。 /* 结果如下: 1.5 数组类型(Array types) 我们还可以比较的看看多维,规则,变长的数组的定义和赋值:*/ 上面对数组的赋值是严谨的风格,在某种情况下,我们可以简化写法,但我总觉得这种简化应用限制太多,容易出错。在这里就不作介绍了。这里再给一个例子说明函数中的参数如何赋值*/ |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
62.500ms |