C# 类的结构

  1. 现实世界,表示一类事物。比如:动物,人。类需要具象化实例化

  2. 理论上类中的成员没有编写顺序。约定: 字段 --》构造函数 --》属性 --》方法


  3. 执行顺序:

    1. 字段如果有初始化先执行字段初始化

    2. 进入构造函数,实例构造函数可以执行多次 //如果是静态构造函数会在类实例化的时候最先执行,并且只执行一次

  4. 访问嵌套类和调用命名空间一样打点调用

  5. 普通类中能包含实例方法、静态方法、虚方法、密封方法,不能包含抽象方法

  6. 静态类中只能包含静态方法

  7. 密封类中能包含实例方法、静态方法,不能包含

  8. 抽象类中能包含实例方法、静态方法、抽象方法、虚方法,密封方法

访问修饰符

public  公开的

private  私有的,只能在本类内部使用

internal 内部的,当前程序集使用 //方法不能用

protect  保护

protected 受保护的,在当前类和派生类中使用

字段

  1. 字段,类体第一层中定义的变量。

  2. 默认是私有的 private。

  3. 字段可以是公开的,也可以是私有的。

但是字段一般建议定义成私有的。

  4. C#在设计字段这个概念时,其实是为了给类本身存储一些自身需要的数据,而不是为

了给类的实例存储一些数据。给类实例存储数据应该使用属性。

  5. 建议:

    • 字段私有

    • 以下划线 _开头表示private

  6. 可用 readonly 修饰字段

    • const 可以修饰字段,也可以修饰常量

      • 不能修改

    • readonly 只能修饰字段

      • 只能在构造函数修改

构造函数

⚪ 输入ctor + Tab 快速创建构造函数

base //访问父类的构造函数

特点

  1. 没有返回值



  2. 构造函数名称必须和类名相同


  3. 构造函数可以是公开的,也可以是私有的

    • 静态类中的构造函数是私有


  4. 一般在构造函数给类的某些属性赋初始值。

属性

⚪ 快捷键 prop + Tap propfull 完整属性

  1. 完整属性: 自动属性(get;set)就是从完整属性简化而来的,所以自动属性支持的,完整属性都支持。但反过来不行。

  2. 自行属性一般用来对属性的赋值不做太多验证的发问下。

  3. 完整属性一般是对属性的赋值有要求(校验)

set

  1. 修改属性时执行。如:p2.X=130;(不是调用构造函数)

  2. set语句主要在什么场景下使用?数据校验。如:年龄限制:18-80

  3. value关键字用来接收传递过来的实参(实际参数)

  4. alue就是再次修改属性值时,向属性赋的新值。

get

get语句(get访问器):获取属性值时执行

public int X
{
  get
  {
    return x;
  }
  set
  {
    if(value >100)
   {
      Exception ep = new Exception("X坐标不能大于100”);
      throw ep;//throw抛出,抛出异常
      x = value;
    }
   }
}

析构函数

  1. 定义时在类名前加 ~

  2. 类的析构函数没有参数,只有一个

  3. 主要用来回收对象,将来类会实例化很多个体,个体在使用完后,需要回收所占内存

    • 通过 GC 垃圾回收器 回收

    • GC 会定期扫描内存,发现不再使用的对象时,会先标记一下,下一次再扫描内存时,就会把所标记的对象的所占内存回收

  4. 自己定义析构函数时最好继承 IDisposable 接口创建

静态类

  1. 关键词: static

  2. 静态类中所有成员只能是静态的

  3. 不能继承

静态类中的构造函数:

  • 只会在第一次调用的时候执行一次

  • 必须默认私有,不能用 private

  • 必须静态

  • 不能使用修饰符

  • 不能有参数

抽象类 abstract

特点

  1. 不能实例化。

  2. 可以包含抽象方法、实例方法、静态方法、虚方法。

    • 实例方法:必须实现(编写业务逻辑)

    • 静态方法:必须实现

    • 虚方法:必须实现

    • 抽象方法:不能实现,必须等待子类继承后,在子类重写 override

  3. 建议抽象类中只定义抽象方法

  4. 可以包含属性、字段和构造函数。

  5. 必须被继承才有存在的意义。

  6. 抽象方法在抽象类中只有声明,没有具体的实现。

  7. 如果一个类继承自抽象类,并且该抽象类中有抽象方法,那么子类必须实现这些抽象方法,除非子类本身也是抽象类。

  8. 在子类修改抽象父类的方法时:

    • 可以在子类中覆盖父类中的实例方法,但是会造成一个警告

      • 应该把父类的实例方法隐藏,使用 new 关键字

      • 隐藏一般用于想保留继承过来的名字,但是不想使用其业务逻辑

    • 可以重写抽象父类中的虚方法

密封类 sealed

  1. 不能被继承。

  2. 可以包含实例成员、静态成员,但不能有抽象成员。

  3. 可以实例化

  4. 密封类通常用于以下场景:

    • 类的设计已经非常完善和稳定,不需要也不应该被继承来进行修改或扩展。

    • 为了提高性能,因为继承关系可能会带来一些额外的运行时开销。

部分类 Partial

  1. 创建多个文件来定义同一个类的不同部分。这些文件中的类声明都需要使用 partial 关键字。

  2. 在每个部分中,可以添加属性、方法、字段等类成员。

  3. 在需要使用这个类的地方,像使用普通类一样进行实例化和操作。

你可能感兴趣的:(c#)