csyx3.1-class

1-字段和方法

2-构造函数和析构函数

3-对象初始化,this,属性,索引器

4-常量,静态构造函数和类,终结器,局部类和方法,nameof


class类-引用类型

字段是1个变量,是class/struct成员

readonly修饰符-防止字段在构造之后被改变

readonly字段只能在声明的时候被赋值,或在构造函数里被赋值

字段的初始化在构造函数之前运行

字段可以可选初始化,未初始化的字段有1个默认值

字段是1个变量

可以同时声明多个字段

1个方法通常只做1件事-单一职责原则

参数由调用者提供

方法的返回

1.通过返回类型返回-返回值/void

2.通过ref/out参数返回

方法签名-方法名和参数列表(和顺序有关)

方法签名与参数名称和返回类型无关

异步编程async

方法结合lambda表达式=>

只适用于单表达式

方法重载-函数名相同,参数列表不同

与参数名称和返回类型无关

参数列表:

含顺序

不含params修饰符

含ref/out-ref和out都是按引用传递-二者不能重复

参数列表相同与否不包含params修饰符

方法是按值传递还是按引用传递的,也是方法签名的一部分

ref/out

2,3相同

ref/out

C#7本地方法

本地方法在另1个方法的方法体内

本地方法不可以使用static修饰符

构造函数-运行class/struct的初始化代码

构造函数和类型名一致,无返回值

字段的初始化在构造函数之前运行

C#7-允许单语句的构造函数写成expression-bodied成员的形式

构造函数的重载

调用重载构造函数时使用this

当同1个类型下的构造函数A调用构造函数B的时候,B先执行

可以把表达式传递给另一个构造函数,但表达式本身不能使用this引用

因为这时候对象还没有被初始化,所以任何方法的调用都会失败

但是可以使用static方法-此时这个方法不是实例的方法,是类型的方法

无参的构造函数

默认构造函数-无参的public构造函数

字段的初始化发生在构造函数执行之前

字段按照声明的先后顺序进行初始化

非public的构造函数-单例模式

constructor构造函数

deconstructor-C#7-作用和构造函数相反,deconstructor会把字段赋给一堆变量

构造函数的方法名必须和类型名相同,无返回值

Deconstructor的方法名只能是deconstructor,有返回值

写法迭代12345

12

3

4

5

deconstructor可以被重载

deconstruct这个方法可以是扩展方法

扩展方法要求为static类里面的static方法

static类命名为Extensions

对象初始化器

如果是无参的构造器-()可以省略

()-构造器

{}-初始化器

编译器对初始化器的处理

有1个临时变量tmp-保证在初始化的过程中出现了异常,那么不会以1个初始化到1半的对象来结尾

在构造函数中使用可选参数

this引用指的是实例的本身

this引用可以让你把字段与本地变量或参数区分开

只有claa/struct的非static成员才可以使用this

属性

字段+get/set方法对=属性

属性是字段的包装器

set-value上下文关键字

属性是字段的包装器

可以保护字段不被非法值污染

只读属性-只有get没有set

只写属性-只有set没有get-less

C#6-get只读属性

C#7-set

自动属性-属性的简化声明prop

属性的完整声明-propfull

C#6-属性简化声明的初始化器

1.=xxx;

2.也可以在构造函数里被赋值

public get

internal/private set

 

inline-把方法的调用替换成直接展开使用这段代码

索引器-可以按下标访问

实现索引器

使用索引器-读取和赋值

多个索引器

1个类型可以声明多个索引器,它们的参数类型可以不同

1个索引器可以有多个参数

只读索引器-只有get没有set

常量-const

类似于cyy的宏

ex

常量和静态只读字段

静态只读字段场景-当值有可能改变,并且需要暴露给其他assembly时

常量

1.类型的字段

2.本地常量-方法中的常量

静态构造函数

1个类型只能定义1个静态构造函数,并且只执行1次

static修饰,方法名和类型名一致,必须无参

非静态构造函数可以被重载,每个实例执行1次

类型的静态构造函数加载的时机-当类被load时

1.实例化1个类型

2.访问类型的1个静态成员

字段比构造函数先执行

静态字段比静态构造函数先执行

静态字段的初始化顺序和它们声明的顺序一致

静态类

静态类的成员全是静态的

静态类不能有子类

析构函数

在GC回收未引用对象的内存之前运行

C#7

partial type

partial类-允许1个类型的定义分布在多个地方

应用场景-1个类的一部分是自动生成的,另1部分需要手动写代码

每个分布的类都必须使用partial来声明

每个分布类的成员不能冲突,不能有同样参数的构造函数

每个分布类必须在同1个assembly里

如果有父类,可以在1个或多个分布类上指明,但必须一致-因为C#不支持多继承

每个分布类可以独立的实现不同的接口-C#类型只能有1个父类,但可以实现多个基接口

编译器无法保证各分布类的字段的初始化顺序

局部方法

partial类里可以有partial方法-两部分:定义和实现

定义部分通常是自动生成的

实现部分通常是手动编写的

partial方法必须是void,并且是隐式private的

C#6-nameof操作符-重构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值