C# 基础语法

1 C# 是大小写敏感的
2 所有语句和表达是必须以分号结尾
3 程序的执行从Main方法开始

一个 C# 程序主要包括以下部分
1 命名空间声明
2 一个class
3 Class方法
4 Class属性
5 一个Main方法
6 语句(Statements) & 表达式(Expressions)
7 注释
8 using 关键字用于在程序中包含命名空间。

1 C# 数据类型

1 值类型变量可以直接分配给一个值
2 引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
内置的 引用类型有:object、dynamic 和 string
3 指针类型变量存储另一种类型的内存地址

  • 关于引用类型的注意点:
  • 当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
  • 动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。
  • 字符串类型是从对象类型派生的。
  • 用户自定义引用类型:class、interface 或 delegate。

2 C# 类型转换

内置的转换方法是以To前缀的方法
例如
ToDateTime:把类型(整数或字符串类型)转换为 日期-时间 结构。
ToString:把类型转换为字符串类型。
ToDecimal:把浮点型或整数类型转换为十进制类型。

3 C# 变量和常量

一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。
定义常量 const = value;

4 C# 特殊运算符 (基础运算符不做总结)

sizeof 返回数据类型的大小。
typeof() 返回 class 的类型。
& 返回变量的地址。

  • 变量的指针。
    ? : 条件表达式。Exp1 ? Exp2 : Exp3 ; 其中,Exp1、Exp2 和 Exp3 是表达式。
    is 判断对象是否为某一类型。
    as 强制转换,即使转换失败也不会抛出异常。

5 C# 判断和循环(判断不做总结,循环只需注意foreach循环)

使用foreach可以迭代数组或者一个集合对象。

6 C# 封装

一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。
注意:成员变量默认的访问类型是private

  • 解释一 :
    比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:D不在他家里)
    如果我们给A的事情增加修饰符:
    public事件,地球人都知道,全公开
    protected事件,A,B,D知道(A和他的所有儿子知道,妻子C不知道)
    private事件,只有A知道(隐私?心事?)
    internal事件,A,B,C知道(A家里人都知道,私生子D不知道)
    protected internal事件,A,B,C,D都知道,其它人不知道
  • 解释二
    (1) Pubilc :任何公有成员可以被外部的类访问。
    (2) Private :只有同一个类中的函数可以访问它的私有成员。
    (3) Protected :该类内部和继承类中可以访问。
    (4) internal : 同一个程序集的对象可以访问。
    (5) Protected internal :3 和 4 的并集,符合任意一条都可以访问。

7 C# 方法传递参数

(Parameter List)
{
Method Body
}

按值传递参数
按引用传递参数
按输出传递参数

按值传递参数:实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。
按引用传递参数:引用参数表示与提供给方法的实际参数具有相同的内存位置。在 C# 中,使用 ref 关键字声明引用参数。
按输出传递参数:return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。在 C# 中,使用 out 关键字声明输出参数。

注意: 提供给输出参数的变量不需要赋值。当需要从一个参数没有指定初始值的方法中返回值时,输出参数特别有用。

8 C# 可空类型单问号及双问号

? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的。
int? i = 3
等同于
Nullable i = new Nullable(3);
?? : 如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值。
double? num1 = null;
double num3;
num3 = num1 ?? 5.34; // num1 如果为空值则返回 5.34

9 C# 数组 特殊方法

int[] list = { 34, 72, 13, 44, 25, 30, 10 };
// 逆转数组
Array.Reverse(list);
// 排序数组
Array.Sort(list);

10 C# 字符串 注意点

拼接字符串 + 符号
根据数组返回字符串 string message = String.Join(" ", array);
string.Format格式化日期
除去string.Format()可以对日期进行格式化之外,*.ToString()也可以实现相同的效果, 对象方法

11 C# 结构体

类和结构有有以下几个基本的不同点:

  • 类是引用类型,结构体是值类型。
  • 结构体不支持继承
  • 结构体不能声明默认的构造函数,可定义构造函数,但不能定义析构函数。默认的构造函数是自动定义的,且不能被改变。
  • 结构体中声明的字段无法赋予初始值,类可以
  • 结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制。
  • 与类不同,结构体可以不适用New操作符即可被实例化,当然也可以用使用New操作符创建一个结构对象,会调用适当的构造函数来创建结构。
  • 因此,如果不适用New操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。意思是需要单独对结构体中每个变量进行赋值。

12 C# 枚举

枚举是一组命名整形常量。枚举是值类型。枚举不支持继承。
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

13 C# 类

1 类的默认访问标识符是internal,成员的默认访问标识符是private。
2 类的构造函数是类的一个特殊的成员函数,当创建类的新对象时执行。构造函数的名称和类的名称完全相同,它没有任何返回类型。
3 默认的构造函数没有任何参数。但是可以创建一个参数化构造函数,构造函数的名称和类的名称完全相同
4 类的析构函数是类的一个特殊的成员函数。在类的名称前加波浪形(~)作为前缀,它不返回值,也不带任何参数。不能继承或重载。
5 当我们声明一个类成员变量为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。static关键字
public static int num;
6 当我们声明一个类成员函数为静态时,这样的函数只能访问静态变量。静态函数在对象被创建之前就已经存在。static关键字
public static int getNum()
{
return num;
}

14 C# 继承及多种继承

使用接口interface来实现多重继承

15 C# 静态多态性

  • 函数重载
    函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。
  • 运算符重载

16 C# 动态多态性

  • 抽象类 关键字abstract创建抽象类
    1 不能创建一个抽象类的实例
    2 不能在一个抽象类外部声明一个抽象方法,关键字abstract声明的
    3 通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。
  • 虚方法 关键字virtual声明的。
    virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。
    1.virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现。
    2.virtual可以被子类重写,而abstract必须被子类重写。

17 C# 接口 interface

声明默认是public的
一个接口可以继承其他接口,而且实现类或结构体就需要实现所有接口的成员。

18 C# 命名空间

关键字 namespace,命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
关键字using, 可以使用 using 命名空间指令,这样在使用的时候就不用在前面加上命名空间名称。该指令告诉编译器随后的代码使用了指定命名空间中的名称。

19 C# 异常处理

try...catch...finally
throw() 可以在 catch 块中使用 throw 语句来抛出异常

你可能感兴趣的:(C# 基础语法)