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