方法的由来
- 方法的前身是C/C++语言中的函数
方法是面对对象范畴的概念,在非面对对象语言中仍然称为函数 - 永远都是类(或结构体)的成员
C#中的函数不可能独立于类(或结构体)之外
只有作为类(结构体)的成员时才能称为方法 - 是类(或结构体)最基本的成员之一
最基本的成员只有两个——字段与方法(成员变量与成员函数),本质还是数据+算法
方法表示类(或结构体)“能做什么” - 为什么需要方法和函数
隐藏复杂的逻辑
复用
方法的声明与调用
- 方法的声明语法
(特性)(方法修饰符) 返回值 (泛型) 方法名 (形参) - 方法的命名
方法名用大驼峰命名法,且用动词或动词短语命名 - 方法的调用
构造器
一种特殊的方法
- 构造器是类型的成员之一
- 狭义的构造器指的是“实例构造器”
- 如何调用构造器
实例化的时调用 - 声明构造器
方法修饰符 类名() {} - 构造器内存原理
eg:
class Fun
{
public int x;
public string y;
public Fun(int x, string y)
{
this.x = x;
this.y = y;
}
}
class program
{
static void main(string[] args)
{
Fun fun = new Fun(1, "name");
}
}
//栈内存为 fun 开辟 4 字节空间
//在堆空间 new 一个 Fun 的空间将首地址给 fun
//再在堆中开辟一个存放 string 类型的长度的空间,将首地址给y
//执行构造方法为 x,y 赋值
方法的重载
- 声明带有重载的方法
方法签名由方法的名称,类型参数的个数和他的每一个参数的类型和种类(值,引用或输出)构成。方法签名不包括返回类型
实例构造函数签名由他的每一个形参的类型和种类(值,引用或输出)组成
重载决策: 用于在给定了参数列表和一组候选函数成员的情况下选择一个最佳函数成员来实施调用
方法的调用与栈
- 方法的调用时内存的分配
主函数入栈
形参入栈,在C#中归主调函数管
函数入栈
返回值存进寄存器
运行时:
函数出栈
返回值返回主函数