C#笔记
基础知识
一个C#程序主要包括以下部分:
命名空间声明(Namespace declaration)
一个 class
Class 方法
Class 属性
一个 Main 方法
语句(Statements)& 表达式(Expressions)
关于Main函数的一些注意事项:C#中Main()函数为什么必须是静态的?
注释
数据类型、变量与常量
程序的基本任务是:对数据进行处理。
数据分为变量(variable)与常量(literal)int age=18;
变量的值可以改变,本质上是内存的空间,用来存储信息。
常量的值是固定的,直接写出来,称字面常量(literal)
关于字面量、常量和变量有什么区别:
1,在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数、浮点数以及字符串;而有很多也对布尔类型和字符类型的值也支持字面量表示;还有一些甚至对枚举类型的元素以及像数组、记录和对象等复合类型的值也支持字面量表示法。
2,“常量”在程序运行时,不会被修改的量。换言之,常量虽然是为了硬件、软件、编程语言服务,但是它并不是因为硬件、软件、编程语言而引入。
常量区分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,‘a’‘b’为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。
3,变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。
变量命名(identifier,标识符)要遵守如下规则:
(1)不能是C#关键字。
(2)由字母、数组、下划线构成。
(3)第一个字符必须是字母或下划线。
(4)不要太长,一般不超过31个字符为宜。
(5)变量名最好不要与库函数、类名相同。
与C/C++类似,与C/C++一样C#是大小写敏感的。
变量命名方法:匈牙利命名法
数据类型
数据类型:本质上是数据存储方式及其能参与的运算的抽象。
如图:
C#数据类型分两大类:
1.值类型(Value Type)
2.引用类型(Reference Type)
前者如:int,double,Point,Size,DataTime。
后者如:Button,Label,Book,Person。
两者的区别在于类型是直接存储在对应的空间内,而引用类型则在对应的位置存储一个指针(或者叫引用),该指针指向对应的数据。
任何变量都有类型。
值类型包括:
简单类型(Simple Type)
结构类型(Struct Type)
枚举类型(Enum Type)
引用类型包括:
类类型(Class Type)
接口类型(Interface Type)
委托类型(Delegate)
数组类型(Array Type)
注意:每种简单类型都有一个关键词
int相当于System.Int32
double相当于System.Double
bool相当于System.Boolean
string相当于System.String
(如果using System,则string相当于String)
关于数据类型的一些细节
整数类型又分为:
有符号 sbyte short int long 和87L,0x1F(注:没有八进制写法)
无符号 byte ushort uint ulong 如87UL
字符类型 char 如‘a‘ ‘\uA0B1‘表示Unicode‘\n‘(回车)
实数类型又分为:
float 如3.14F
double 如3.14 1.5E-3 3.14D(后面这个D可以省略)
十进制类型
Decimal 如120.50M
布尔类型
bool 如true false(小写)不能用0和1代替(区别于C/C++)
字符类型
char型数据用来表示通常意义上“字符”。
字符变量是用单引号括起来的单个字符。char c=‘A‘;
C#字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示char c1=‘\u0061‘;
C#语言中还允许使用转义字符‘‘来将后面的字符转变为其它的含义。char c2=‘\n‘; //代表换行符
转义字符与C语言中的类似,值得一提的是\r 与\n的不同,\r表示回车,\n表示换行。
字符串类型
是引用类型,但对字符串常量有特殊处理。
字符串前可以使用@,加了@的字符串可以换行写,可以不进行\转义,可以换行,双引号则用两个双引号表示一个双引号。
针对C++程序员来说,引用类型与值类型是由其类型定义的,而不是由其使用决定的(不存在*&这些符号类指定类型的类型)。
C#新版本中的特殊类型
1.推断类型(C#3.0)var a=1+2;
var表示其类型又编译器推断,而不是自己指定。
2.Nullable类型(C#3.0)int? a=32;
可以有值可以没有值,在数据库中常用。
3.Dynamic(C#4.0)由DLR支持
编译时不检查,运行时才确定,主要用于与COM组件或其他语言交互。
运算符与表达式
运算符
基本与C/C++类似,不赘述,多了一个字符串连接运算符:+。
+运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后在进行连接
表达式
表达式是符合一定语法规则的运算符和操作数的序列。
表达式有类型和值,对表达式中的操作数进行运算得到的结果称为表达式的值。该值的类型称为表达式的类型。
赋值时的默认类型转换与C/C++的原则是一致的,值得一提的是C#中的强制类型转换:
字符串转换成数值:
double.Parse(s) int.Parse(s)
数字转成字符串:
10.ToString() 使用方法ToString();
""+10; 使用字符连接运算符来把数字转换成字符串。
使用Convert
Convert.ToInt32(textbox1.Text)
Convert.ToDouble("123.45")
Convert.ToDateTime*("2019-10-01 14:00")
流程控制语句
结构化的程序设计的三种基本流程:顺序、选择、循环。
顺序语句
方法调用语句和赋值语句都为顺序语句(简单语句)
C#中没有表达式语句这一概念。
分支语句
if-else与C语言的if-else一 致。
在VS中按Ctrl+E+D(格式文档)
按Ctrl+E+F(格式化选中部分)
switch语句与C/C++不同的是,变量可以为字符串类型。
另外如果在C#中switch语句不加break编译器会报错。
循环语句
循环五要素:
初始化部分
循环条件部分
循环体部分
迭代部分,我们称为“循环改变”
结束后处理
C#中的数组(与C/C++大不相同)
C#中的数组是引用类型。
以为数组的声明方式:int[] a1;
注意方括号写到变量名的前面
C#中声明数组时不能指定其长度(数组中元素的个数),这与C/C++不一样。
每个数组都有一个属性Length指明它的长度。
foreach语句可以方便的处理数组、集合中的各元素。(不可以在foreach中改变数组的内容,只读式遍历)。 C
C#中的多维数组与交错数组是不同的概念,这与C/C++似乎不同,因为在C/C++中我们一般把多维数组看做数组的数组,然而在C#中只有交错数组才被看做数组的数组。
多维数组和交错数组的区别详见:C# 多维数组 交错数组的区别