1 方法的由来
(1)方法的前身是C/C++语言的函数(function)
·方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数
·方法实际上就是函数,方法是只存在于面向对象范畴里的概念
·当一个函数以类的成员的身份出现的时候,称为方法
(2)方法都是类(或结构体)的成员
·C#语言去掉了非面向对象的成分,所以C#语言中的函数不可能独立于类(或结构体)之外,只有作为类(或结构体)的成员时才被称为方法(但是在C++中是可以的,称之为全局函数)
(3)是类(或结构体最基本的成员之一)
·最基本的成员只有两个——字段和方法(成员变量和成员函数),本质还是数据+算法
·方法表示类(或结构体)“能做什么事情”
(4)为什么需要方法和函数
目的1:隐藏复杂的逻辑
目的2:把大算法分解为小算法
目的3:复用(reuse,重用)
例如,我们将计算圆柱、圆锥截面积的方法写成一个小的算法,将这个小算法拿出来,封装成一个单独的函数,在很多其他的算法中可以重用这个算法。
示例:计算圆面积、圆柱体积、圆锥体积
没有复用的情况:
有复用的情况:
2 方法的声明与调用
(1)方法的声明:
·声明/定义不分家(不同于C++)
·函数头中的方法名:大小写规范使用帕斯卡法,以动词或动词短语作为名字
(2)方法的调用:
·C#是强类型语言,argument(实参)是值、parameter(形参)是变量,值与变量一定要匹配,不然编译器会报错
3 构造器(一种特殊的方法)
(1)构造器(constructor)是类型成员之一
·构造函数译为“构造器”,成员函数译为“方法”,本质上都是函数
·类型成员包含:字段、方法、属性、事件等等
(2)狭义的构造器指的是“实例构造器”(instance constructor)
·作用:构建实例在内存中的内部结构
·利用例子展示什么是实例构造器?
这个例子表示使用了默认构造器:
这个例子自定义了没有参数的构造器:
这个例子分别定义了一个有参数的构造器和一个没有参数的构造器,这样在构造实例的时候就都可以找到相应的构造函数:
(快捷键ctor)
(3)构造器的内存原理
将内存进行切割和初始化
4 方法的重载(Overload)
(1)调用重载方法的示例
(2)声明带有重载的方法
·重载的定义:在定义方法时,方法的名字可以完全一样,但是方法的签名不可以一样
·方法签名(method signsture)由方法的名称、类型参数的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成,方法签名不包含返回值
·实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成
·重载决策(到底调用哪一个重载):用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用
5 如何对方法进行debug(调试)
·设置断点(breakpoint)
·观察方法调用时的call stack
·Step-into,Step-over,Step-out
·观察局部变量的值与变化
6 方法的调用与栈
·重点:方法调用时栈内存的分配(Stack Frame)