方法的由来
方法(method)的前身是C/C++中的函数(function)
- 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数。
$ vim fn.c
#include <stdio.h>
double add(double x, double y)
{
return x + y;
}
int main()
{
double x = 1.0;
double y = 2.0;
double result = add(x,y);
printf("%f + %f = %f", x, y, result);
return 0;
}
$ gcc -o fn fn.c
$ fn.exe
$ vim fn.cpp
#include <iostream>
double sum(double x, double y)
{
return x + y;
}
int main()
{
double x = 1.0;
double y = 2.0;
double result = sum(x, y);
std::cout<<x<<"+"<<y<<"="<<result;
return 0;
}
$ g++ -o fn fn.cpp
$ fn.exe
方法永远都是类或结构体的成员
- C#语言中的函数不可能独立于类或结构体之外
- 只有作为类或结构体的成员时才被称为方法
- C++中存在全局函数
方法是类或结构体中最基本的成员之一
- 最基本的成员只有两个
字段或方法,即成员变量与成员方法,其本质还是数据+算法 - 方法表示类或结构体能做什么事情
为什么需要方法和函数呢
- 隐藏复杂的逻辑
- 复用、重用(reuse)
方法定义
方法调用
方法调用与栈的关系
构造器
- 构造器(constructor)是类型的成员之一
- 狭义的构造器指的是实例构造器(instance constructor)
- 声明和使用构造器
class User
{
//字段
public int UserID;
public string UserName;
public DateTime CreatedAt;
//ctor自定义构造器:无返回值 与类名相同
public User(int userid = 0, string username = "")
{
//初始化字段
this.UserID = userid;
this.UserName = username;
this.CreatedAt = DateTime.Now;
}
}
实例构造函数
实例构造函数是一种特殊的方法,在创建类的每个新实例时执行。
- 构造函数用于初始化类实例的状态
- 若希望从类的外部创建类的实例,需将构造函数声明为public。
- 构造函数的名称和类名相同
- 构造函数不能有返回值
带参数的构造函数
- 构造函数可带参数
- 构造函数可以被重载
方法重载(overload)
调用重载方法
Console.WriteLine(100);
Console.WriteLine(1.00);
Console.WriteLine('o');
Console.WriteLine("overload");
Console.WriteLine(true);
声明带重载的方法
public int sum(int x, int y)
{
return x + y;
}
public int sum(int x, int y, int z)
{
return x + y + z;
}
public double sum(double x, double y)
{
return x + y;
}
方法签名
- 方法签名(method signature)由方法的名称、类型参数的个数和每个形参的类型与种类组成。
- 方法签名不能包含返回类型
- 实例构造函数签名由它的每个形参的类型和种类组成
类型形参
public int Sum(int x, int y)
{
return x + y;
}
public int Sum<T>(int x, int y)
{
return x + y;
}
参数种类
// 传值
public int Sum(int x, int y)
{
return x + y;
}
// 传引用
public int Sum(ref int x, int y)
{
return x + y;
}
public int Sum(out int x, int y)
{
x = 100;
return x + y;
}
重载决策
用于在给定参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。
namespace TestApp
{
class Calculator
{
public int Sum(int x, int y)
{
return x + y;
}
public double Sum(double x, double y)
{
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
c.Sum(1, 2);
c.Sum(1D, 2D);
}
}
}