一步一步学习C#(二C#基础)

1.面向对象基本概念

         我们认为现实世界是由各种各样的实体(事物、对象)所组成的,每种对象都有自己的内部状态和运动规律。 不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。同时人们为了更好的认识客观世界, 把具有相似内部状态和运动规律的实体(事物、对象)综合在一起称为类。 类是具有相似内部状态和运动规律的实体的抽象, 进而人们抽象的认为客观世界是由不同类的事物间相互联系和相互作用所构成的一个整体。 计算机软件的目的就是为了模拟现实世界,使各种不同的现实世界系统在计算机中得以实现, 进而为我们工作、学习、生活提供帮助。 如下图:

      
l概念:面向对象(object-oriented ;简称:oo 至今还没有统一的概念,我这里把它定义为:
按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。
l
 
  • l
    即指现实世界中各种各样的实体。
    它可以指具体的事物也可以指抽象的事物。
    如:整数123、流氓陈水扁、苹果、飞机、规则、法律、法规、表单等等。
    每个对象皆有自己的内部状态和运动规律,
    如流氓陈水扁具有名字、身高、体重等内部状态,
    具有吃饭、睡觉、打人、偷税、漏税等运动规律。
    在面向对象概念中我们把对象的内部状态称为属性、运动规律成为方法或事件。
  
  • l
类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
l类的概念来自于人们认识自然、认识社会的过程。
l在这一程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。
l在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,
l形成一个一般的概念,这就是"归类"
l如:昆虫、狮子、爬行动物,因为它们都能动所以归类为动物。
l在演绎的过程中我们又把同类的事物,根据不同的特征分成不同的小类,
l
如动物->猫科动物->猫->大花猫等。    
于一个具体的类,它有许多具体的个体,我们就管这些个体叫做"对象"。    
类的内部状态是指类集合中对象的共同状态;    
类的运动规律是指类集合中对象的共同运动规律。
如:博拉图对人作如下定义:人是没有毛能直立行走的动物。在博拉图的定义中"人"是一个类,具有"没有毛、直立行走"等一些区别于其它事物的共同特征;而张三、李四、王五、流氓等一个个具体的人,是"人"这个类的一个个"对象"。
这就是分类
   类(class):
  •     消息(Message):
     消息是指对象间相互联系和相互作用的方式。 一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容(参数)、反馈。如下图:
 类的特性,类的定义决定了类具有以下5个特性: 抽象、继承、封装、重载、多态。
 
   对象(object):
通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。

2.变量

 

格式:datatype 变量名称
 
1int i; 
2)赋值:           i = 10;
3int i = 10; 
4int x = 10, y =20;
5int x = 10, bool y = true;   // 这是不符合语法规定的!必须分为两行。

3.常量

 在声明和初始化变量时,在变量的前面加上关键字const。 常量是其值在使用过程中不会发生变化的变量: const int a = 100; 
4.预定义类型

在声明和初始化变量时,在变量的前面加上关键const
 常量是其值在使用过程中不会发生变化的变量: const int a = 100; 

 

5.分支语句

 
1)值类型:直接存储其值,存储在堆栈
  
 
   
\' 单引号
\" 双引号
\\ 反斜杠
\0
\a 警告
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
 
2)地址类型:存储对值的引用,存储在托管堆
  名称      cts类                    说    明
 object  System.Object   根类型,CTS中的其他类型都是从它派生而来的(包括值类型)
 string   System.String   Unicode字符串

6.循环语句

1)条件语句
 if (condition)   
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);  1)int表示一个整数,而int[]表示一个整型数组 (2)用new关键字初始化特定大小的数组,方括号中给出大小: int[] integers = new int[32];               (3)所有的数组都是引用类型    如:int[] copy = integers; 该代码也只是把变量copy指向同一个数组,而不是创建一个新数组。
如果需要将一个字符串转换为枚举值,我们将enum类的parse
TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);

8.数组 

    (1int表示一个整数,而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
 (1)用 using语句指定命名空间位置
如: 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
原文地址:https://www.cnblogs.com/MR_ke/p/1673350.html