题外话:今天看到有一个园主的博客里面说的学习之塔,探讨了如何提高学习效率的问题。很受启发,自己学习程序却没有坚持程序。却一直从事程序二线实施,现在想重新拾起那些厚厚的课本走上一线。时间就是金钱,如何快速的提高自己的水平呢?
- 阅读
- 培训
- 向先进者学习
- 辅导他人学习
- 日记与博客
培训现在还没有条件,辅导他人学习是不大靠普的,自己对程序理解的还很浅。阅读,总结阅读。最为适合自己的学习方式,坚持下去。
好了,一切从基础开始《C#高级编程》。第一章,.Net的体系结构。最基础,却也很高深。实话,现在读不懂。没事儿,老师曾教导我们说:看不懂,没有关系,先当小说看。然后回过头去看,理解起来就不那么痛苦了。个人总结:编程语言C#和.Net之间的关系。有点像微软的Office和操作系统 的关系,要想高效的办公,不仅需要office这个工具,还需要window系统。没有操作系统的支持,好用的地office工具总不能安转载裸机上吧。没有系统,再高效的office也没用。同样,没有.Net framework x.x编写再好的程序。却无用武之地,使用开发C#需要.net framework。
第二章有14个小结,前面的hello word就省略了。从变量开始说起,平时操作变量操作贯了。却没有总结过,变量,理解:变化的量,量:计量,数量,数的多少。数:整数,小数。(想到的就是这么多了),程序里面表示为(常见):int,float。单词:variable。声明:datatype identifier;例如:int i;这样就声明了一个装整数的变量:取名叫i,这个i就能装整数,可以装负整数和正整数。装多大(多小),看数据类型一会儿写出来,变量倒是声明出来了,有什么用呢?把数据保存到电脑,保存起来有什么用?处理数据,简单作用从电脑屏幕打印出来。Int I; i=10;Console.WriteLIne(i);i=11;Console.WriteLine(i);个人理解:找来一个容器(装整数的),在容器里面放10这个数,从Dos窗体输出容器里的东西。继续这时候把容器的东西变一下,变成11,然后再输出。当然还能换别的东西(负整数也可以)。需要注意的是:要对变量进行处理(比方:打印到屏幕)。有个前提,变量里有东西,才能处理。就声明一个变量,如果不对其赋值。就处理程序就要异常。为何?我们要处理容器里的东西,容器里面没有东西。处理还有意义吗?所以.Net禁止使用未赋值的变量。(结果是错误)
变量
- 变量的初始化。
概括起来:c#的变量在使用前,必须初始化。那.net又是如何判断的呢?两个方法
- 变量如果是类或结构中的字段,创建这些变量时其值就是默认。
- 方法的局部变量必须在代码中显示的初始化,之后才能再语句中使用变量。
.net是怎么做到的呢?不关心,如果不这么做,。Net会怎么样呢?会很生气,后果很严重。报错:使用了未初始化的变量。英语怎么说:忘了。。。。
- var:网络上有一种说法:变数。这解释有些靠谱,变着戏法的识别数据。专业一点的说法:类型推断,数据类型的推断。就是根据数据类型自动推断,变着戏法的推断数据类型。且推断十分准确,不管什么类型都能推断出来。除非:这个类型没有被初始化。
言外之意:类型推断必须是对有了值得数据类型进行推断。没值,没法推断。
- 变量的作用域。(这个变量的使用范围)
- 在同一个花括号内有效。
- 在同一个花括号内不能声明两个相同类型,相同名字的变量。
例如:{int i=1;int i=2;},错误,也包括{int i=1;{int i=2;}},这样也不行。 但两个for循环不嵌套也能声明为同类型,同名的变量。两个for的花括号是独立的花括号。
- 与变量相对的就是常量
- 理解:定义并且马上赋值,且在其作用域内不能修改。例如:const int i=10;
- 不能把变量给常量,即使变量已有值。如:int i=1; const j=I;//这样是错误的
- 常量是静态的,但不必在常量声明中定义'static'
预定义数据类型
差别:
值类型:直接存储值,存放在内存的堆栈中。
引用类型:存储值得引用地址,存放在内存的托管堆中。
值类型包括:
类型 | 名称 | CTS类型 | 说明 | 范围 | |
类型 | 类型 | ||||
整数 | 有符号 | sbyte | System.SByte | 1个字节的有符号整数。1个字节有8位,2的8次方-1就是它的最大值 | SByte.MaxValue| SByte.MinValue |
short | System.Int16 | 2个字节的有符号 |
| ||
int | System.Int32 | 4个字节的有符号 |
| ||
long | System.Int64 | 8个字节的有符号,默认声明是:int类型,需要显示声明:如long longNum=123L; |
| ||
无符号 | byte | System.Byte | 1个字节的无符号 |
| |
ushort | System.Uint16 | 2个字节的无符号 |
| ||
uint | System.Uint32 | 4个字节的无符号,默认声明是:int类型,需要显示声明:如uint longNum=123U; |
| ||
ulong | System.UInt64 | 8个字节的无符号, 默认声明是:int类型,需要显示声明:如ulong longNum=123UL; |
| ||
小数 | 单精度 | float | System.Single | 4个字节单精度,最长小数点7位。默认声明:double类型,需要显示声明:如:float f=123.123F; |
|
双精度 | double | System.Double | 8个字节双精度,最长小数点 15|16位 |
| |
多精度 | decimal | System.Decimal | 16个字节的多精度,最长小数点 128位,同要需要指定类型,decimal d=25.25365M; |
| |
字符 | char | System.Char | 2个字节的unicode字符 |
| |
布尔 | bool | System.Boolean | true或false |
|
引用类型包括
类型 | 名称 | CTS类型 | 说明 |
对象类型 | object | System.Object |
|
字符串 | string | System.String | Unicode字符串 |
使用object类型的目的
- 使用object引用绑定任何子类型对象。
- object类型执行许多一般用途的基本方法。
string对象保留在堆上,而不是堆栈里。因此,当把一个字符串变量赋值给另一个字符串时。会得到内存中同一个字符串的两个引用,但又与引用类型有些区别,那就是修改其中一个字符串,就会创建一个全新的string对象。而另一个字符串没有改变
理解起来有些困难就直接操下来,以后再慢慢理解。