一、c#程序结构
注意:(1)c#是大小写敏感的
(2)所有的语句和表达式必须以分号(;)结束
(3)程序执行以Main结束
(4)与java不同的是,文件名可以不同于类的名称
二、c#基本语法
c#是面向对象的语言,在面向对象的程序设计方法中,程序由各个相互作用的对象组成。一个对象采取的动作称为方法。相同种类的对象通常具有相同的属性,或者说是在相同的类中。
(1)在所有c#程序的第一句都是using System;
using关键字用于在程序中包含命名空间,一个c#程序中可以有多个using语句
(2)class关键字
class关键字用于声明一个类
(3)成员变量
成员变量是一个类的属性或数据成员,用于存储数据。
(4)成员函数
成员函数是一系列执行特定任务的语句。类的成员函数是在类内部声明的。类似于JS中对象的方法
(5)实例化一个类
在Main()方法中进行实例化一个类。类似于JS中的新建一个对象的操作。
(6)标识符
标识符是用于标识类,变量,函数或任何其他用户定义项的名称。它有三点规则:
①名称必须以字母开头,后跟字母,数字或下划线,标识符第一个字符不能是数字
②它不能包含任何嵌入式空格或符号(除了下划线_)
③标识符不能是c#关键字
三、C#数据类型
在C#中,变量分为以下几种种类型:值类型、引用类型、对象类型、动态类型、字符串类型、指针类型
(1)值类型
值类型变量可以直接分配给其一个值,值类型直接包含数据,当声明一个值类型的数据时,系统会分配内存来存储它的值。
C#中的值类型有:bool、byte(8位无符号数)、char、decimal(128位精确的十进制值)、double(64位双精度浮点数)、float、int、long、sbyte、short、uint、ulong、ushort
注:如果想得到一个类型或者一个变量在某个地方的准确大小可以使用sizeof()方法。sizeof(type)
(2)引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。也就是说,它们指向的是一个内存位置。使用多重变量是,引用类型可以指向一个内存位置。当内存位置的数据由于这些多重变量中的一个而改变是,其它变量也会自动跟着变。内置的引用类型有:object、dynamic和string。(dynamic是动态类型,它会跳过编译器的类型安全检查,在编译的时候编译器不知道是什么类型的数据,直到运行时才知道它是什么类型)。用户自定义引用类型有:class、interface或delegate。
注:值类型赋值给dynamic类型也会发生装箱操作,dynamic本质也是引用类型,它保存的是对object的引用,而非值本身。对于object类型来说,保存值类型总是会发生装箱操作。
(3)对象类型
对象类型是C#通用类型系统中的所有数据类型基类 。对象类型可以被分配任何其它类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是在分配之前需要先进行(强制)类型转换。
装箱:把一个值类型的值转换为对象类型或引用类型的值。
e.g:
object obj;
obj = 120; // 这是装箱操作
拆箱:把一个对象类型或引用类型的值转换为值类型的值。
e.g:
int a = 40;
object obj = a;
a = (int)obj; // 这是拆箱操作
注:对象类型是引用类型里的一种
(4)动态类型
可以在动态类型数据类型变量中存储任何类型的值。这些变量的类型检查是在运行时进行的。
声明动态类型的语法:
dynamic <variable_name> = value;
e.g:
dynamic d = 20;
Console.WriteLine(d); // 输出20
(5)字符串类型
字符串类型允许给变量赋任何字符串值。他是从对象类型派生的。字符串类型的值可以通过两种形式进行分配:引号和@引号。
e.g:①引号形式:
string str = "asdf";
②@引号形式:
string str1 = @"qwer";
(6)指针类型
指针类型变量存储另一种类型的内存地址。c#中指针与c和c++中的指针功能一样。
声明语法:
type* identifier;
e.g:
int* intp;
char* charp;
四、c#类型转换
类型转换是把数据从一种类型转换成另一种类型,它有两种形式:隐式类型转换和显式类型转换。
(1)隐式类型转换:这类转换是c#默认的以安全方式进行的转换。例如:从小的整数类型转换为大的整数类型,从派生类转换为基类。
(2)显式类型转换:这类转换时通过用户使用预定义的函数完成的。这类转换需要强制转换运算符。
五、C#变量
基本的值类型:整数类型(sbyte、byte、short、ushort、int、uint、long、ulong、char)、浮点型(float、double)、十进制类型(decimal)、布尔类型(true或false)、空类型(可为空值的数据类型)。
c#允许定义其它值类型的变量,比如enum,也允许定义引用类型变量,比如class。
六、C#运算符
C#有六类运算符:
(1)算数运算符(+ - * / % ++ --)
(2)关系运算符(== != > < >= <=)
(3)逻辑运算符(&& || !)
(4)位运算符(& | ^)
(5)赋值运算符(= += -= *= /= %= <<=(左移且赋值) >>=(右移且赋值) &=(按位与且赋值) ^=(按位异或且赋值) |=(按位或且赋值))
(6)其它运算符(sizeof():返回一个数据类型的大小 typeof():返回一个类的类型 ?: 条件表达式)
七、C#封装
八、C#类
一个类定义以关键字class开始,其后跟的是类的名称。
e.g:
class class_name{
variable1;
variable2;
......
variablen;
// 成员变量
method1{
// 方法主体
}
method2{
}
......
methodn{
}
}
注意:(1)访问说明符的访问成员的规则与类本身的访问规则相同。也就是说假如成员变量和成员方法都是public,但是类是private,相当于成员变量和成员方法都是private。如果没有声明访问说明符,那么默认对类的访问类型为internal(表示它所修饰的类只能在同一个程序集中被访问,而同一个程序集表示同一个dll程序集或同一个exe程序集),对成员的默认访问类型是private(私有)。(私有成员变量和私有成员方法不能通过外部进行访问,只能通过这个类内部的公共的成员方法来调用它,而外部通过调用这个类的公共的成员方法来调用这个私有成员方法)
(2)数据类型制定了变量的类型,如果有返回值的话,返回指定方法的数据类型。
(3)