ASP.NET Web 应用开发实战快速上手系列 2——C#基础
这里介绍C#,最高到3.0这个版本,不涉及4.0的内容,C#4.0的新特性可以参阅:.NET Framework 4 中的新 C# 功能。有C#基础者本文没必要看了。
所有的C#代码都存储在扩展名为.cs的文件中,一般情况下,一个cs文件保存的就是一个C#类(class)或接口(interface)或结构(struct),这三个是什么,可以先不理会。
一、用Visual Studio创建项目
我们创建一个控制台应用程序(Console Application),控制台应用程序一般用于学习C#语言 ,具体步骤(中英文对照):【运行Visual Studio】——点击菜单栏的【文件】(File)-——【新建】(New)——【项目】(Project),出现下图界面:
按上图选择开发语言(C#)下的模板类型Windows中的Console Application。
1——项目名称
2——存储目录,可点击输入框后面的【浏览】(Browse)选择
3——解决方案名称
4——创建解决方案目录
5——添加到源代码管理,只有在安装了和VS继承的源代码管理工具后,此项才能选择
点击【确定】 (OK)创建项目:
项目与解决方案的关系:一个解决方案可以包含多个项目,编译解决方案会编译全部项目,要运行解决方案必须设定启动项目(Set as Startup Project,在项目的右键菜单中可以看到),接下来添加第二个项目:
右击解决方案名称,在右键菜单中选择【添加】(Add) ——【新建项目】(New Project),
在弹出的窗口中的(项目)名称输入框中输入:MySecondApp,点击【确定】创建第二个项目,解决方案资源管理器(Solution Explorer) 中将出现刚添加的这个项目:
二、C#文件结构
Program.cs就是一个C#类文件,如果你使用的是VB,扩展名将会是.vb。
第一部分:添加对命名空间的引用,当创建文件时,开发环境会默认(可以修改)添加一些
第二部分:当前类所在的命名空间,如果在命名空间外访问此类,则必须添加对命名空间MyFirstApp的引用(参考第一部分)或者用完整的访问方式MyFirstApp.Program。
第三部分:类(先不要管什么是类)
三、C#语言规范
初学者写代码的时候要注意,当不考虑嵌套类型时,所有代码,除了以下代码(命名空间引用、指定命名空间、定义类、定义接口、定义结构、定义枚举、定义委托),都应该写在类、结构、接口、枚举的内部,内部代码也有讲究,后面再说。
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyFirstApp
{
//创建名为Animal的类
class Animal
{
//代码写在这里
}
//创建名为IActivity的接口
interface IActivity
{
//代码写在这里
}
//创建名为CurrentPosition的结构
struct CurrentPosition
{
//代码写在这里
}
//创建名为WeekDay的枚举
enum WeekDay
{
//代码写在这里
}
///创建名为Del的委托
delegate void MyEventHandler();
}
C#中的一个语句:从行的第一个单词(或上一个分号结束位置)开始直到遇到分号(“;”,英文半角),如
也就是说C#是分号断句,下面的代码虽然在一行上,但表示两个语句,这种写法要尽量避免:
C#中的注释:
namespace MyFirstApp
{
/// <summary>
/// 类Program
/// 包含应用程序的主入口函数Main
/// 用于类、结构、接口、枚举、方法
/// </summary>
class Program
{
/*
* 多行注释
* 控制台应用程序的主入口函数
* args:string类型的数组
*/
static void Main(string[] args)
{
//单行注释,定义整型变量
int daysOfWeek = 7;
}
/// <summary>
/// 方法说明
/// </summary>
/// <param name="s">参数说明</param>
static void WriteLineString(string s)
{
/*
多行注释
Console.WriteLine(s);
Console.ReadLine();
*/
}
}
}
C#种对象命名规范:
1)不能使用关键字(IDE中默认为蓝色);
2)可以用字母、数字、下划线组合,但只能以字母或下划线开始 ;名称可以由多个单词或单词的缩写组合;可以定义纯中文对象名,但不提倡;
3)除变量、常量外,其它命名名称的每个单词的第一个字母应该大写;变量则从第二个单词开始第一个字母大写,常量则全部大写;
可以参照一些类库中对象的元数据(metadata),如下图,双击类名File,在右键菜单中选择【转到定义】(Go To Definition):
四、C#数据类型
C#数据类型 分为:值类型和引用类型;也可以分为内置数据类型和用户定义数据类型。
C#类型 |
.NET Framework |
范围 |
说明 |
默认值 |
System.Boolean |
布尔值,true或false |
false |
||
System.Byte |
0 到 255 |
8 位的无符号整数 |
0 |
|
System.SByte |
-128 到 127 |
8 位的有符号整数 |
0 |
|
System.Char |
U+0000 到 U+ffff |
16 位 Unicode 字符 |
‘\0’ |
|
System.Decimal |
±1.0 × 10-28 到 ±7.9 × 1028 |
28 到 29 位有效位 |
0.0M |
|
System.Double |
±5.0 × 10-324 到 ±1.7 × 10308 |
15 到 16 位精度 |
0.0D |
|
System.Single |
±1.5 × 10-45 到 ±3.4 × 1038 |
7 位 |
0.0F |
|
System.Int32 |
-2,147,483,648 到 2,147,483,647 |
有符号 32 位整数 |
0 |
|
System.UInt32 |
0 到 4,294,967,295 |
无符号 32 位整数 |
0 |
|
System.Int64 |
-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
有符号 64 位整数 |
0L |
|
System.UInt64 |
0 到 18,446,744,073,709,551,615 |
无符号 64 位整数 |
0 |
|
System.Object |
对象层次结构的根 |
- |
||
System.Int16 |
-32,768 到 32,767 |
有符号 16 位整数 |
0 |
|
System.UInt16 |
0 到 65,535 |
无符号 16 位整数 |
0 |
|
System.String |
Unicode 字符的不变的定长串 |
- |
||
特定类型值范围+null值 |
可空类型是 System.Nullable 结构的实例 |
关注一下:可空类型和隐式类型局部变量。
五、C#运算符
运算符 |
说明 |
表达式 |
+ |
执行加法运算(如果两个操作数是字符串,则该运算符用作字符串连接运算符,将一个字符串添加到另一个字符串的末尾) |
操作数1 + 操作数2 |
- |
执行减法运算 |
操作数1 - 操作数2 |
* |
执行乘法运算 |
操作数1 * 操作数2 |
/ |
执行除法运算 |
操作数1 / 操作数2 |
% |
获得进行除法运算后的余数 |
操作数1 % 操作数2 |
++ |
将操作数加 1 |
操作数++ 或++操作数 |
-- |
将操作数减 1 |
操作数-- 或--操作数 |
~ |
将一个数按位取反 |
~操作数 |
赋值运算符
运算符 |
计算方法 |
表达式 |
求值 |
结果(X = 10) |
= |
给变量赋值 |
变量=值 |
||
+= |
运算结果 = 操作数1 + 操作数2 |
X += 5 |
X = X + 5 |
15 |
-= |
运算结果 = 操作数1 - 操作数2 |
X -= 5 |
X = X - 5 |
5 |
*= |
运算结果 = 操作数1 * 操作数2 |
X *= 5 |
X = X * 5 |
50 |
/= |
运算结果 = 操作数1 / 操作数2 |
X /= 5 |
X = X / 5 |
2 |
%= |
运算结果 = 操作数1 % 操作数2 |
X %= 5 |
X = X % 5 |
0 |
比较运算符
运算符 |
说明 |
表达式 |
> |
检查一个数是否大于另一个数 |
操作数1 > 操作数2 |
< |
检查一个数是否小于另一个数 |
操作数1 < 操作数2 |
>= |
检查一个数是否大于或等于另一个数 |
操作数1 >= 操作数2 |
<= |
检查一个数是否小于或等于另一个数 |
操作数1 <= 操作数2 |
== |
检查两个值是否相等 |
操作数1 == 操作数2 |
!= |
检查两个值是否不相等 |
操作数1 != 操作数2 |
类别 |
运算符 |
说明 |
表达式 |
三元运算符 |
? : |
检查给出的第一个表达式 expression 是否为真。如果为真,则计算 operand1,否则计算 operand2。这是唯一带有三个操作数的运算符 |
表达式? |
类别 |
运算符 |
说明 |
表达式 |
成员访问运算符 |
. |
用于访问数据结构的成员 |
数据结构.成员 |
赋值运算符 |
= |
给变量赋值 |
操作数1 = 操作数2 |
逻辑运算符 |
&& |
对两个表达式执行逻辑“与”运算 |
操作数1 && 操作数2 |
|| |
对两个表达式执行逻辑“或”运算 |
操作数1 || 操作数2 |
|
! |
对两个表达式执行逻辑“非”运算 |
! 操作数 |
|
( ) |
将操作数强制转换为给定的数据类型 |
(数据类型) 操作数 |
六、变量
变量用于存储特定类型的值,关于数据类型,参阅上面第四部分,如:
string userName;
//时间和日期变量
DateTime birth;
//整型变量
int age;
//布尔型变量
bool isChinese;
//单精度浮点型变量
float salary;
//others
了解一下隐式类型局部变量。
七、常量
建议常量名全部大写。常量一旦赋值后,其值不能被改变。
八、选择结构和循环结构
1)选择结构
{
<语句块>
}
else
{
<语句块>
}
还可以有else if(条件){}一个或多个。
{
case 值1:
…
break;
case 值2:
…
break;
...
...
default :
…
}
各个 case 标签不必连续,也不必按特定顺序排列
default 标签可位于 switch…case 结构中的任意位置
default 标签不是必选的,但使用 default 标签是一个良好的编程习惯
每两个 case 标签之间的语句数不限
2)循环结构
{
//循环内语句
}
{
//循环内语句
} while(条件)
{
//循环内语句
}
{
//语句
}
break 语句可用于退出循环
continue 语句可用于跳过当前循环并开始下一循环
九、数组
参阅MSDN:数组。 了解交错数组。