方法的由来
方法(Method)的前身是C/C++语言的函数(Function)
方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数 使用C/C++语言做对比 永远都是类(或结构体)的成员
C#语言中函数不可能独立于类(或结构体)之外 只有作为类(结构体)的成员时才被称为方法 C++中是可以的,称为“全局函数” 是类(或结构体)最基本的成员之一
最基本的成员只有两个——字段与方法(成员变量与成员方法),本质还是数据+算法 方法表示类(或结构体)“能做什么事情” 为什么需要方法和函数
目的1:隐藏复杂的逻辑 目的2:复用(reuse,重用) 示例:计算圆面积,圆柱体积,圆锥体积
namespace Sample
{
class Program
{
static void Main ( string [ ] args)
{
Calculator c = new Calculator ( ) ;
Console. WriteLine ( c. GetConeVolume ( 1 , 2 ) ) ;
}
}
class Calculator
{
public double GetCircleArea ( double 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 ;
}
}
}
方法的声明与调用
声明方法的语法详解 参见C#语言文档(声明/定义不分家) Parameter全称“formal parameter” 形式上的参数,简称"形参" Parameter是一种变量 为方的命名规范 大小写规范 需要以动词或者动词短语作为名字 重温静态(static)方法和实例方法 调用方法 Argumet中文C#文档的官方译法为“实际参数”,简称“实参”,可理解为调用方法时的真实条件 调用方法时的argument列表要与定义方法时的parameter列表相匹配
C#是强类型语言,argument是值,parameter是变量,值与变量一定要匹配,不然编译器会报错
构造器
构造器(constructor)是类型的成员之一 狭义的构造器指的是“实例构造器”(instance constructor)
namespace Consturctor
{
class Program
{
static void Main ( string [ ] args)
{
Student stu = new Student ( ) ;
Console. WriteLine ( stu. ID) ;
}
}
class Student
{
public int ID;
public string Name;
}
}
namespace Consturctor
{
class Program
{
static void Main ( string [ ] args)
{
Student stu = new Student ( ) ;
Console. WriteLine ( stu. ID) ;
Console. WriteLine ( stu. Name) ;
}
}
class Student
{
public Student ( )
{
this . ID = 1 ;
this . Name = "No Name" ;
}
public int ID;
public string Name;
}
}
namespace Consturctor
{
class Program
{
static void Main ( string [ ] args)
{
Student stu = new Student ( 1 , "WangXO" ) ;
Console. WriteLine ( stu. ID) ;
Console. WriteLine ( stu. Name) ;
}
}
class Student
{
public Student ( int InitID, string InitName)
{
this . ID = InitID;
this . Name = InitName;
}
public int ID;
public string Name;
}
}
namespace Consturctor
{
class Program
{
static void Main ( string [ ] args)
{
Student stu = new Student ( 1 , "WangXO" ) ;
Console. WriteLine ( stu. ID) ;
Console. WriteLine ( stu. Name) ;
Student stu2 = new Student ( ) ;
Console. WriteLine ( stu2. ID) ;
Console. WriteLine ( stu2. Name) ;
}
}
class Student
{
public Student ( int InitID, string InitName)
{
this . ID = InitID;
this . Name = InitName;
}
public Student ( )
{
this . ID = 0 ;
this . Name = "No Name" ;
}
public int ID;
public string Name;
}
}
如何调用构造器 声明构造器(在类名下键入ctor 双击tab 可以生成一个默认构造器) 构造器的类型原理
方法的重载
调用重载方法的示例 声明带有重载的方法
方法签名(method signature)由方法的名称,类型形参的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值,引用,或输出)组成。方法签名不包含返回类型。 实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值,引用或输出)组成。 重载决策(到底调用哪一个重载):用于在给定了参数列表和一组候选函数成员的情况下, 选择一个最佳函数成员来实施调用。
namespace OverLoad
{
class Program
{
static void Main ( string [ ] args)
{
}
}
class Student
{
public int Add ( int a, int b)
{
return a + b;
}
public int Add ( int a, int b, int c)
{
return a + b + c;
}
public double Add ( double a, double b)
{
return a + b;
}
public int Add ( ref int a, int b)
{
return a + b;
}
public int Add ( out int a, out int b)
{
a = 100 ;
b = 100 ;
return a + b;
}
}
}
namespace OverLoad
{
class Program
{
static void Main ( string [ ] args)
{
Calculator c = new Calculator ( ) ;
double x = c. Add ( 100 D, 200 D) ;
int y = c. Add ( 1 , 2 , 3 ) ;
}
}
class Calculator
{
public int Add ( int a, int b)
{
return a + b;
}
public int Add ( int a, int b, int c)
{
return a + b + c;
}
public double Add ( double a, double b)
{
return a + b;
}
}
}
如何对方法进行Debug
设置断点(breakpoint) 观察方法调用时的call stack; Step-in,Step-over,Step-out 观察局部变量的值与变化 (具体Debug方法参考视频教程)