1.面向对象基本概念
l
概念:面向对象(
object-oriented ;
简称:
oo
)
至今还
没有统一的概念,我这里把它定义为:
按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,
模拟客观世界分析、设计、实现软件的办法。
l
-
l
即指现实世界中各种各样的实体。
它可以指具体的事物也可以指抽象的事物。
如:整数1、2、3、流氓陈水扁、苹果、飞机、规则、法律、法规、表单等等。
每个对象皆有自己的内部状态和运动规律,
如流氓陈水扁具有名字、身高、体重等内部状态,
具有吃饭、睡觉、打人、偷税、漏税等运动规律。
在面向对象概念中我们把对象的内部状态称为属性、运动规律
成为方法或事件。
-
l
类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
l
类的概念来自于人们认识自然、认识社会的过程。
l
在这一程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。
l
在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,
l
形成一个一般的概念,这就是"归类";
l
如:昆虫、狮子、爬行动物,因为它们都能动所以归类为动物。
l
在演绎的过程中我们又把同类的事物,根据不同的特征分成不同的小类,
l
如动物->猫科动物->猫->大花猫等。
对
于一个具体的类,它有许多具体的个体,我们就管这些个体叫做"对象"。
类的内部状态是指类集合中对象的共同状态;
类的运动规律是指类集合中对象的共同运动规律。
如:博拉图对人作如下定义:人是没有毛能直立行走的动物。在博拉图的定义中"人"是一个类,具有"没有毛、直立行走"等一些区别于其它事物的共同特征;而张三、李四、王五、流氓等一个个具体的人,是"人"这个类的一个个"对象"。
这就是“分类”;
类(class):
-
消息(Message):
消息是指对象间相互联系和相互作用的方式。 一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。如下图:
2.变量
格式:datatype 变量名称
(1)int i;
(2)赋值: i = 10;
(3)int i = 10;
(4)int x = 10, y =20;
(5)int x = 10, bool y = true; // 这是不符合语法规定的!必须分为两行。
3.常量
4.预定义类型
在声明和初始化变量时,在变量的前面加上关键字const。
常量是其值在使用过程中不会发生变化的变量:
const int a = 100;
5.分支语句
(1)值类型:直接存储其值,存储在堆栈
转 义 序 列 | 字 符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\0 | 空 |
\a | 警告 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
(2)地址类型:存储对值的引用,存储在托管堆
名称 cts类
说 明
6.循环语句
(
1)条件语句
statement(s)
else
statement(s)
如果在条件中要执行多个语句,就需要用花括号({ ... })把这些语句组合为一个块。
1 bool isZero;
2 if (i == 0 )
3 {
4 isZero = true ; Console.WriteLine( " i is Zero " );
5 }
6 else
7 {
8 isZero = false ;
9 Console.WriteLine( " i is Non-zero " );
10 }
(2)分支语句
代码
1 // 下面的switch语句测试integerA变量的值:
2 switch (integerA)
3 {
4 case 1 :
5 Console.WriteLine( " integerA =1 " );
6 break ;
7 case 2 :
8 Console.WriteLine( " integerA =2 " );
9 break ;
10 case 3 :
11 Console.WriteLine( " integerA =3 " );
12 break ;
13 default :
14 Console.WriteLine( " integerA is not 1,2, or 3 " );
15 break ;
16 }
17
(3)循环语句
(1)For
代码
1 // This loop iterates through rows...
2 for ( int i = 0 ; i < 100 ; i += 10 )
3 {
4 // This loop iterates through columns...
5 for ( int j = i; j < i + 10 ; j ++ )
6 {
7 Console.Write( " " + j);
8 }
9 Console.WriteLine();
10 }
11
(2)While
代码
1 while (condition)
2 statement(s);
3
4 ( 1 )解决for循环的不足,在循环开始前,不知道重复执行一个语句或语句块的次数。如下面的例子所示。
5 bool condition = false ;
6 while ( ! condition)
7 {
8 // This loop spins until the condition is true
9 DoSomeWork();
10 condition = CheckCondition(); // assume CheckCondition() returns a bool
11 }
12 ( 2 ) 所有的C#循环机制,包括while循环,如果只重复执行一条语句,而不是一个语句块,都可以省略花括号。许多程序员都认为最好在任何情况下都加上花括号。
13
(3)do...while
代码
1 do ...while循环是while循环的后测试版本。该循环的测试条件要在执行完循环体之后执行。因此do...while循环适合于至少执行一次循环体的情况:
2
3 bool condition;
4 do
5 {
6 // this loop will at least execute once, even if Condition is false
7 MustBeCalledAtLeastOnce();
8 condition = CheckCondition();
9 } while (condition);
10
(4)foreach
foreach语句是c#中新增的循环机制,也是非常受欢迎的一种循环。
foreach (int temp in arrayOfInts)
{
Console.WriteLine(temp);
}
其中,foreach循环每次迭代数组中的一个元素。它把每个元素的值放在int型的变量temp中,然后执行一次循环迭代。
注意,不能改变集合中各项(上面的temp)的值,所以下面的代码不会编译:
foreach (int temp in arrayOfInts)
{
temp++;
Console.WriteLine(temp);
}
7.枚举
定义一个枚举:
public enum TimeOfDay
{
Morning,
Afternoon,
Evening
}
//我们可以将整数转换为枚举类型
int aa=1;
Console.WriteLine((TimeOfDay)aa);
//也可以实现枚举类型转换为整数
TimeOfDay bb = TimeOfDay.Evening;
Console.WriteLine((int)bb);
代码
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace ConsoleApplication1
6 {
7 class Program
8 {
9 public enum TimeOfDay
10 {
11 Morning,
12 Afternoon,
13 Evening
14 }
15
16 static void Main( string [] args)
17 {
18 Console.WriteLine( " 请输入一天的几个选项,其中0:Morning,1:Afternoon,2:Evening: " );
19 string aa = Console.ReadLine();
20 // 将输入的数字转换为枚举类型
21 WriteGreeting((TimeOfDay)Convert.ToInt32(aa));
22 }
23 static void WriteGreeting(TimeOfDay timeOfDay)
24 {
25 switch (timeOfDay)
26 {
27 case TimeOfDay.Morning:
28 Console.WriteLine( " Good morning! " );
29 Console.ReadLine();
30 break ;
31 case TimeOfDay.Afternoon:
32 Console.WriteLine( " Good afternoon! " );
33 Console.ReadLine();
34 break ;
35 case TimeOfDay.Evening:
36 Console.WriteLine( " Goodevening! " );
37 Console.ReadLine();
38 break ;
39 default :
40 Console.WriteLine( " Hello! " );
41 Console.ReadLine();
42 break ;
43 }
44 }
45 }
46 }
47
48
如果需要将一个字符串转换为枚举值,我们将enum类的parse方法:
TimeOfDay time2 = (TimeOfDay)
Enum.Parse(typeof(TimeOfDay), "afternoon", true);
8.数组
(1)int表示一个整数,而int[]表示一个整型数组
(2)用new关键字初始化特定大小的数组,方括号中给出大小:
int[] integers = new int[32];
(3)所有的数组都是引用类型
如:int[] copy = integers;
该代码也只是把变量copy指向同一个数组,而不是创建一个新数组。
(4)数组从0开始,所以要用下标0引用第一个变量:
integers[0] = 35;
同样,用下标值31引用有32个元素的数组中的最后一个元素:integers[31] = 432;
(5)可以在声明数组时不进行初始化,动态地指定其大小。
如:int[] integers; integers = new int[32];
可以使用下面的语法查看一个数组包含多少个元素:
int numElements = integers.Length;
9.命名空间
例如:namespace CustomerPhoneBookApp
{
using System;
public struct Subscriber
{
// Code for struct here...
}
}
代码
1 命名空间还可以嵌套:
2 namespace FirstNameSpace
3 {
4 namespace SecondNameSpace
5 {
6 namespace ThirdNameSpace
7 {
8 class NamespaceExample
9 {
10 // Code for the class here...
11 }
12 }
13 }
14 }
15 // 引用的方式为: FirstNameSpace. SecondNameSpace. ThirdNameSpace. NamespaceExample
如: using System; using FirstNameSpace;
(2)用绝对路径引用命名空间可以防止类重复。
例如,类NamespaceExample同时存在于FirstNameSpace和SecondNameSpace命名空间中,那么就需要制定全名:
using FirstNameSpace; class Test {
public static void Main()
{
FristNameSpace.NamespaceExample nSEx = new FristNameSpace.NamespaceExample();
//do something with the nSEx variable
} }
10.C#编程规范
(1)标识符(值类型、引用类型)都要区分大小写 ;
(2)它们必须以一个字母或下划线开头,但可以包含数字字符;
(3)不能把C#关键字用作标识符
(4)命名空间的名称非常重要,一定要仔细设计 ,最好用自己的公司名创建*的命名空间,再嵌套后面技术范围较窄、用户所在小组或部门、或类所在软件包的命名空间。
Microsoft建议使 l用如下的命名空间:<CompanyName>.<TechnologyName>.
l