目录
1.1、方法的前身是C/C++语言的函数(function)
3.2、狭义的构造器指的是“实例构造器”(instance constructor)
5.3、Step-in,Step-over,Step-out
1、方法的由来
1.1、方法的前身是C/C++语言的函数(function)
- 方法是面对对象范畴的概念,在非面向对象语言中仍然称为函数
- 使用C/C++语言对比
1.2、永远是类的成员
- C#语言中函数不可能独立于类(或结构体)之外
- 只有作为类(结构体)的成员时才被称为方法
- C++中是可以的,成为“全局函数”
1.3、是类(或结构体)最基本的成员之一
- 最基本的成员只有两个——字段与方法(成员变量与成员函数),本质还是数据+算法
- 方法表示类(或结构体)“能做什么事情”
1.4、为什么需要方法和函数
- 目的1:隐藏复杂的逻辑
- 目的2:把大算法分解为小算法
- 目的3:复用(reuse,重用)
- 示例:计算圆面积、圆柱体积、圆锥体积
class Program { static void Main(string[] args) { Calculator c = new Calculator(); Console.WriteLine(c.GetCylinderVolume(10, 100)); } } class Calculator { public double GetCircleArea(double r) { //return 3.14159 * r * r; return Math.PI * r * r; } public double GetCylinderVolume(double r, double h) { return GetCircleArea(r)*h; } public double GetConeVolume(double r, double h) { return GetCylinderVolume(r, h) / 3; } }
自顶向下,逐步求精
2、方法的定义与调用
2.1、声明方法的语法详解
- 参见C#语言文档(声明/定义不分家)
方法头或方法体 有效的修饰符组合
- Parameter全称为”formal parameter“——形式上的参数,简称”形参“
- Parameter是一种变量
2.2、为方的命名规范
- 大小写规范,帕斯扣法
- 需要以动词或动词短语作为名字
2.3、重温静态(static)方法和实例方法
静态方法是类的方法,通过类名.方法名调用;
2.4、调用方法
- Argument中文C#文档的官方译法为”实际参数“,简称”实参“;可以理解为调用方法时的真实条件
- 调用方法时的argument列表要与定义方法时的parameter列表相匹配
C#是强类型语言,argument是值,parameter是变量,值与变量一定要匹配,不然编译器会报错。
3、构造器(一定特殊的方法)
3.1、构造器(constructor)是类型的成员之一
3.2、狭义的构造器指的是“实例构造器”(instance constructor)
3.3、如何调用构造器
3.4、声明构造器
class Program { static void Main(string[] args) { Student student = new Student(); } } class Student { public int ID; public string Name; }
3.5、构造器的内存原理
4、方法的重载(Overload)
4.1、调用重载方法的示例
static void Main(string[] args)
{
Console.WriteLine("Hello");
Console.WriteLine(100);
Console.WriteLine(200L);
}
4.2、声明带有重载的方法
-
方法签名(method signature)由方法的名称、类型形参(<T>)的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。方法签名不包含返回类型。
-
实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。
-
重载决策(到底调用哪一个重载):用于在给定了参数列表的一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。
通过传入参数类型判断调用哪一个重载。
5、如何对方法进行debug
5.1、设置断点(breakpoint)
5.2、观察方法调用时的call stack
4层调用:
5.3、Step-in,Step-over,Step-out
Step-in:快捷键F11;观察函数执行顺序;用于逐步寻找错误发生处
Step-over:快捷键F10;直接获得结果;用于大范围查找错误
Step-out:shfit+F11;查看谁调用了当前方法;Step-in的反向操作
5.4、观察局部变量的值与变化
左下角
点击别针可以将结果固定在界面上
6、方法的调用与栈*
6.1、方法调用时栈内存的分配
-
对stack frame的分析