一、方法的核心定义与作用方法是将相关功能的代码封装在一起的代码块核心作用是减少代码重复率相同功能无需重复编写后续需要时直接调用即可提高代码可读性和可维护性将复杂功能拆分到不同方法逻辑更清晰实现灵活复用可通过参数传递不同值实现不同场景下的相同功能返回结果可通过返回值将方法执行的结果传递到其他地方使用。注意所有方法的定义和调用均在Program类内部完成结合示例代码规范。二、方法的核心组成定义语法方法的定义需包含5个核心部分语法格式如下以静态方法为例// 语法格式修饰符 静态修饰符 返回值类型 方法名(参数列表) // { 方法体具体功能代码 } public static void Test() { // 方法体实现具体功能的代码 Console.WriteLine(范冰冰); }各组成部分详解方法修饰符控制方法的访问权限常用public公共的可在类内部/外部调用也可使用internal默认静态修饰符static目前学习重点带static的是静态方法后续会学习非静态方法返回值类型void无返回值方法执行后不返回任何结果不能赋值给变量其他类型如string、int有返回值方法执行后会返回一个对应类型的结果需用return返回。方法名遵循大驼峰命名法则首字母大写后续每个单词首字母也大写如Test、Test2参数列表小括号内的内容用于接收调用方法时传递的值可空如示例中的Test方法无参数参数是方法灵活复用的核心下面详细讲解方法体大括号内的代码是方法实现具体功能的核心。三、关键概念形参与实参重点回顾1. 形参形式参数定义方法时小括号内的参数是“形式上”的参数仅在方法内部有效用于接收调用方法时传递的实参。示例public static void Test(int a, int b)中int a、int b就是形参。2. 实参实际参数调用方法时传递给方法的实际值用于给形参赋值实参的类型、数量需与形参对应。示例Console.WriteLine(hello world)中hello world就是实参传递给WriteLine方法的实际值。四、返回值相关说明返回值是方法执行后的具体结果分为“无返回值”和“有返回值”两种无返回值void如示例中的Test、Test2方法执行后不返回任何结果不能赋值给变量有返回值如Console.ReadLine()执行后会返回用户输入的字符串可赋值给变量使用示例// Console.ReadLine() 是有返回值的方法返回string类型string name Console.ReadLine(); // 将方法返回的结果用户输入赋值给name变量五、方法的调用重点分静态方法方法定义后必须调用才能执行否则方法体中的代码不会执行。目前重点学习静态方法带static的调用方式。静态方法的调用方式2种// 前提方法是static静态方法且与调用代码在同一个类Program中 // 方式1类名.方法名()规范写法明确指定类 Program.Test();// 调用Test方法会执行方法体中所有代码打印“范冰冰” // 方式2直接写方法名()简化写法可省略类名前提是同个类 Test();// 与Program.Test()效果一致可省略类名 // 调用Test2方法循环打印10次“赵薇” Test2();调用注意事项调用方法时小括号不能省略即使无参数如Test错误正确为Test()方法调用时会执行方法体中所有代码执行完毕后回到调用方法的位置继续执行后续代码若方法有参数调用时必须传递对应数量、对应类型的实参结合上面参数案例理解。六、方法的参数重点进阶核心复用关键参数是方法定义时的“输入项”通过传递不同的实参让同一个方法实现不同的功能核心遵循“形参与实参一一对应”原则。参数类型主要分为4种结合实战案例重点掌握均为静态方法的参数用法。1. 单个参数基础核心语法// 定义方法名(参数类型 形参名) public static void 方法名(参数类型 形参名) { // 方法体中使用形参实现功能 }实战案例// 定义一个静态、无返回值、带一个string类型参数的方法 // name形参接收调用时传递的字符串实参 public static void Test(string name) { // 形参name在方法体中使用循环打印10次实参的值 for (int i 0; i 10; i) { Console.WriteLine(name); } } // 调用带单个参数的方法3种调用方式实参类型必须与形参一致 static void Main(string[] args) { // 方式1直接传递字符串常量实参张娜拉 Test(张娜拉);// 实参类型为string与形参string name一致 Test(邓论); // 方式2传递变量变量类型需与形参一致 string name 郑爽; Test(name);// 变量name是string类型作为实参传递 // Test(749); // 错误形参是string类型实参是int类型类型不匹配 }关键注意实参的类型、数量必须与形参完全对应否则会报语法错误如形参是string实参不能是int。2. 多个参数常用当方法需要多个输入项时可定义多个形参形参之间用逗号分隔调用时按顺序传递对应实参。实战案例// 定义带两个参数int count、string name实现“指定次数打印指定姓名” public static void Test1(int count, string name) { // 形参count控制循环次数形参name控制打印内容 for (int i 0; i count; i) { Console.WriteLine(name); } } // 调用带多个参数的方法实参顺序、类型、数量必须与形参一致 static void Main(string[] args) { // 实参1100int类型对应形参count实参2房祖名string类型对应形参name Test1(100, 房祖名); }关键注意多个参数调用时实参顺序必须与形参顺序一致如形参是count在前、name在后实参不能颠倒。3. 对象类型参数进阶参数不仅可以是基础类型int、string也可以是自定义对象类型如class类的对象传递的是对象的引用内存地址。实战案例// 第一步定义自定义类Dog引用类型 public class Dog { public string Name { get; set; } // 狗的姓名属性 public int Age { get; set; } // 狗的年龄属性 } // 第二步定义带对象类型参数的方法形参是Dog类型 public static void Test2(Dog d1) { // 方法体中使用对象参数的属性d1是Dog对象可访问其Name和Age for (int i 0; i 10; i) { Console.WriteLine(d1.Name : d1.Age); } } // 第三步调用带对象参数的方法实参是Dog类的对象 static void Main(string[] args) { // 先创建Dog对象并赋值 Dog d1 new Dog() { Name 高市早苗, Age 50 }; // 传递Dog对象作为实参形参d1接收该对象的引用 Test2(d1); }关键注意传递对象参数时传递的是对象的引用方法体中修改对象的属性会影响原对象与引用类型的特性一致。4. 默认参数简化调用定义形参时可给形参设置默认值调用方法时若不传递该实参则使用默认值若传递实参则使用传递的值。核心规则默认参数必须写在所有非默认参数的后面不能把默认参数放在前面调用时默认参数可省略非默认参数必须传递。实战案例// 定义带三个参数第三个参数lj是默认参数默认值为劣迹明星 // 注意默认参数lj放在最后前面是两个非默认参数count、name public static void Test4(int count, string name, string lj 劣迹明星) { for (int i 0; i count; i) { Console.WriteLine(name 是 lj); } } // 调用带默认参数的方法两种调用方式 static void Main(string[] args) { // 方式1不传递默认参数使用定义时的默认值lj 劣迹明星 Test4(10, 张默); // 仅传递前两个非默认参数输出张默是劣迹明星 // 方式2传递默认参数使用传递的值lj 榜样明星 Test4(10, 韩红, 榜样明星); // 传递三个实参输出韩红是榜样明星 }七、方法、类和对象的关系核心关联方法、类和对象是C#面向对象编程的核心三者层层关联、相互依赖结合本笔记已学案例Dog类、Test系列方法具体关系如下1. 核心关系总纲类是模板对象是类的实例方法是类/对象的行为功能载体。简单来说类规定了对象有哪些属性和可执行的方法对象是类的具体实现方法则封装了具体的功能通过类静态方法或对象非静态方法调用。2. 具体关联结合笔记案例细化类与对象模板与实例的关系笔记中的Dog类就是一个抽象模板它定义了对象的属性Name、Age规定了“狗”这类对象的共同特征而d1 new Dog() { Name 高市早苗, Age 50 }是Dog类的具体对象是模板的实例化拥有Dog类定义的所有属性是“具体的一只狗”。 类似的Program类也是一个模板它定义了Test、Test1、Test2等静态方法规定了该类可执行的功能。类与方法包含与被包含的关系所有方法都必须封装在类的内部不能脱离类单独存在。笔记中所有方法Test、Test1、Test2、Test4都定义在Program类中Dog类也可新增方法如Dog类可添加Eat()方法描述狗的进食行为。 类通过包含方法明确了自身静态方法或其对象非静态方法能实现的功能——比如Program类包含Test2方法就规定了该类可调用Test2方法实现“打印Dog对象信息”的功能。对象与方法调用与被调用的关系对于非静态方法对象是方法的调用主体需通过“对象.方法名()调用对于静态方法笔记重点无需创建对象可通过“类名.方法名()调用但本质上仍是依赖类的定义。 结合笔记案例Test2方法的形参是Dog对象调用时需传递d1Dog对象作为实参方法体中通过d1.Name、d1.Age访问对象的属性实现打印功能——这体现了“方法依赖对象获取数据对象依赖类拥有属性类依赖方法实现功能”的闭环关系。3. 通俗类比类 “手机模板”对象 “具体的某部手机”方法 “手机的功能打电话、发消息”模板规定了手机有哪些功能具体手机才能调用这些功能。八、完整实战案例含所有参数类型带详细注释namespace _04方法的参数 { internal class Program { static void Main(string[] args) { // 1. 调用带单个参数的方法 Test(张娜拉);// 实参张娜拉string类型对应形参name Test(邓论); // Test(749);// 错误形参是string实参是int类型不匹配 string name 郑爽; Test(name);// 实参变量namestring类型 // 2. 调用带多个参数的方法按顺序传递实参 Test1(100, 房祖名);// 实参1100int实参2房祖名string // 3. 调用带对象类型参数的方法 Dog d1 new Dog() { Name 高市早苗, Age 50 }; Test2(d1);// 实参Dog对象d1 // 4. 调用带默认参数的方法 Test4(10, 张默); // 不传递默认参数使用默认值劣迹明星 Test4(10, 韩红, 榜样明星);// 传递默认参数使用实参值榜样明星 } // 1. 带单个参数的静态方法无返回值 // name形参string类型接收实参 public static void Test(string name) { for (int i 0; i 10; i) { Console.WriteLine(name); } } // 2. 带多个参数的静态方法无返回值 // count形参1int控制循环次数name形参2string控制打印内容 public static void Test1(int count, string name) { for (int i 0; i count; i) { Console.WriteLine(name); } } // 3. 带对象类型参数的静态方法无返回值 // d1形参Dog类型接收Dog对象 public static void Test2(Dog d1) { for (int i 0; i 10; i) { Console.WriteLine(d1.Name : d1.Age); } } // 4. 带默认参数的静态方法无返回值 // count非默认参数name非默认参数lj默认参数默认值劣迹明星 public static void Test4(int count, string name, string lj 劣迹明星) { for (int i 0; i count; i) { Console.WriteLine(name 是 lj); } } } // 自定义Dog类用于对象类型参数案例 public class Dog { public string Name { get; set; } public int Age { get; set; } } }九、易错点提醒高频踩坑新增参数相关方法名命名错误未遵循大驼峰命名法则如写成test正确应为Test方法调用时遗漏小括号如Test错误正确应为Test()定义方法后忘记调用方法仅定义不调用方法体中的代码永远不会执行混淆形参和实参把定义方法时的形参当成调用方法时的实参或反之静态方法调用错误未加类名不同类时或误将非静态方法按静态方法调用后续会讲解非静态方法无返回值方法赋值给变量如string res Test();错误Test方法是void类型不能赋值参数类型/数量不匹配如形参是string实参传int或形参有2个实参只传1个均会报错多个参数顺序颠倒调用带多个参数的方法时实参顺序与形参顺序不一致导致逻辑错误默认参数位置错误将默认参数放在非默认参数前面如Test4(int count, string lj 劣迹明星, string name)错误对象参数使用错误未创建对象就传递给方法如Test2(null);会导致空引用异常混淆类、对象、方法的关系误以为方法可脱离类存在或对象可脱离类创建如未定义Dog类直接创建Dog d1 new Dog();会报错。十、核心总结方法核心封装功能代码减少重复实现复用可通过返回值传递结果通过参数实现灵活适配方法定义修饰符 static静态 返回值类型 大驼峰方法名 (参数列表) 方法体静态方法调用同个类中可直接写方法名()或类名.方法名()必须调用才会执行关键区分形参定义方法时、实参调用方法时两者类型、数量、顺序需完全匹配返回值void无返回值不能赋值其他类型有返回值需用return可赋值参数类型重点掌握4种——单个参数、多个参数、对象参数、默认参数默认参数必须放在最后对象参数传递的是对象引用方法体中修改对象属性会影响原对象类、对象、方法的核心关联类是模板含属性、方法对象是类的实例方法是类/对象的功能载体三者相互依赖、缺一不可。
C#方法(方法的调用与定义与方法的参数)
发布时间:2026/5/21 14:46:08
一、方法的核心定义与作用方法是将相关功能的代码封装在一起的代码块核心作用是减少代码重复率相同功能无需重复编写后续需要时直接调用即可提高代码可读性和可维护性将复杂功能拆分到不同方法逻辑更清晰实现灵活复用可通过参数传递不同值实现不同场景下的相同功能返回结果可通过返回值将方法执行的结果传递到其他地方使用。注意所有方法的定义和调用均在Program类内部完成结合示例代码规范。二、方法的核心组成定义语法方法的定义需包含5个核心部分语法格式如下以静态方法为例// 语法格式修饰符 静态修饰符 返回值类型 方法名(参数列表) // { 方法体具体功能代码 } public static void Test() { // 方法体实现具体功能的代码 Console.WriteLine(范冰冰); }各组成部分详解方法修饰符控制方法的访问权限常用public公共的可在类内部/外部调用也可使用internal默认静态修饰符static目前学习重点带static的是静态方法后续会学习非静态方法返回值类型void无返回值方法执行后不返回任何结果不能赋值给变量其他类型如string、int有返回值方法执行后会返回一个对应类型的结果需用return返回。方法名遵循大驼峰命名法则首字母大写后续每个单词首字母也大写如Test、Test2参数列表小括号内的内容用于接收调用方法时传递的值可空如示例中的Test方法无参数参数是方法灵活复用的核心下面详细讲解方法体大括号内的代码是方法实现具体功能的核心。三、关键概念形参与实参重点回顾1. 形参形式参数定义方法时小括号内的参数是“形式上”的参数仅在方法内部有效用于接收调用方法时传递的实参。示例public static void Test(int a, int b)中int a、int b就是形参。2. 实参实际参数调用方法时传递给方法的实际值用于给形参赋值实参的类型、数量需与形参对应。示例Console.WriteLine(hello world)中hello world就是实参传递给WriteLine方法的实际值。四、返回值相关说明返回值是方法执行后的具体结果分为“无返回值”和“有返回值”两种无返回值void如示例中的Test、Test2方法执行后不返回任何结果不能赋值给变量有返回值如Console.ReadLine()执行后会返回用户输入的字符串可赋值给变量使用示例// Console.ReadLine() 是有返回值的方法返回string类型string name Console.ReadLine(); // 将方法返回的结果用户输入赋值给name变量五、方法的调用重点分静态方法方法定义后必须调用才能执行否则方法体中的代码不会执行。目前重点学习静态方法带static的调用方式。静态方法的调用方式2种// 前提方法是static静态方法且与调用代码在同一个类Program中 // 方式1类名.方法名()规范写法明确指定类 Program.Test();// 调用Test方法会执行方法体中所有代码打印“范冰冰” // 方式2直接写方法名()简化写法可省略类名前提是同个类 Test();// 与Program.Test()效果一致可省略类名 // 调用Test2方法循环打印10次“赵薇” Test2();调用注意事项调用方法时小括号不能省略即使无参数如Test错误正确为Test()方法调用时会执行方法体中所有代码执行完毕后回到调用方法的位置继续执行后续代码若方法有参数调用时必须传递对应数量、对应类型的实参结合上面参数案例理解。六、方法的参数重点进阶核心复用关键参数是方法定义时的“输入项”通过传递不同的实参让同一个方法实现不同的功能核心遵循“形参与实参一一对应”原则。参数类型主要分为4种结合实战案例重点掌握均为静态方法的参数用法。1. 单个参数基础核心语法// 定义方法名(参数类型 形参名) public static void 方法名(参数类型 形参名) { // 方法体中使用形参实现功能 }实战案例// 定义一个静态、无返回值、带一个string类型参数的方法 // name形参接收调用时传递的字符串实参 public static void Test(string name) { // 形参name在方法体中使用循环打印10次实参的值 for (int i 0; i 10; i) { Console.WriteLine(name); } } // 调用带单个参数的方法3种调用方式实参类型必须与形参一致 static void Main(string[] args) { // 方式1直接传递字符串常量实参张娜拉 Test(张娜拉);// 实参类型为string与形参string name一致 Test(邓论); // 方式2传递变量变量类型需与形参一致 string name 郑爽; Test(name);// 变量name是string类型作为实参传递 // Test(749); // 错误形参是string类型实参是int类型类型不匹配 }关键注意实参的类型、数量必须与形参完全对应否则会报语法错误如形参是string实参不能是int。2. 多个参数常用当方法需要多个输入项时可定义多个形参形参之间用逗号分隔调用时按顺序传递对应实参。实战案例// 定义带两个参数int count、string name实现“指定次数打印指定姓名” public static void Test1(int count, string name) { // 形参count控制循环次数形参name控制打印内容 for (int i 0; i count; i) { Console.WriteLine(name); } } // 调用带多个参数的方法实参顺序、类型、数量必须与形参一致 static void Main(string[] args) { // 实参1100int类型对应形参count实参2房祖名string类型对应形参name Test1(100, 房祖名); }关键注意多个参数调用时实参顺序必须与形参顺序一致如形参是count在前、name在后实参不能颠倒。3. 对象类型参数进阶参数不仅可以是基础类型int、string也可以是自定义对象类型如class类的对象传递的是对象的引用内存地址。实战案例// 第一步定义自定义类Dog引用类型 public class Dog { public string Name { get; set; } // 狗的姓名属性 public int Age { get; set; } // 狗的年龄属性 } // 第二步定义带对象类型参数的方法形参是Dog类型 public static void Test2(Dog d1) { // 方法体中使用对象参数的属性d1是Dog对象可访问其Name和Age for (int i 0; i 10; i) { Console.WriteLine(d1.Name : d1.Age); } } // 第三步调用带对象参数的方法实参是Dog类的对象 static void Main(string[] args) { // 先创建Dog对象并赋值 Dog d1 new Dog() { Name 高市早苗, Age 50 }; // 传递Dog对象作为实参形参d1接收该对象的引用 Test2(d1); }关键注意传递对象参数时传递的是对象的引用方法体中修改对象的属性会影响原对象与引用类型的特性一致。4. 默认参数简化调用定义形参时可给形参设置默认值调用方法时若不传递该实参则使用默认值若传递实参则使用传递的值。核心规则默认参数必须写在所有非默认参数的后面不能把默认参数放在前面调用时默认参数可省略非默认参数必须传递。实战案例// 定义带三个参数第三个参数lj是默认参数默认值为劣迹明星 // 注意默认参数lj放在最后前面是两个非默认参数count、name public static void Test4(int count, string name, string lj 劣迹明星) { for (int i 0; i count; i) { Console.WriteLine(name 是 lj); } } // 调用带默认参数的方法两种调用方式 static void Main(string[] args) { // 方式1不传递默认参数使用定义时的默认值lj 劣迹明星 Test4(10, 张默); // 仅传递前两个非默认参数输出张默是劣迹明星 // 方式2传递默认参数使用传递的值lj 榜样明星 Test4(10, 韩红, 榜样明星); // 传递三个实参输出韩红是榜样明星 }七、方法、类和对象的关系核心关联方法、类和对象是C#面向对象编程的核心三者层层关联、相互依赖结合本笔记已学案例Dog类、Test系列方法具体关系如下1. 核心关系总纲类是模板对象是类的实例方法是类/对象的行为功能载体。简单来说类规定了对象有哪些属性和可执行的方法对象是类的具体实现方法则封装了具体的功能通过类静态方法或对象非静态方法调用。2. 具体关联结合笔记案例细化类与对象模板与实例的关系笔记中的Dog类就是一个抽象模板它定义了对象的属性Name、Age规定了“狗”这类对象的共同特征而d1 new Dog() { Name 高市早苗, Age 50 }是Dog类的具体对象是模板的实例化拥有Dog类定义的所有属性是“具体的一只狗”。 类似的Program类也是一个模板它定义了Test、Test1、Test2等静态方法规定了该类可执行的功能。类与方法包含与被包含的关系所有方法都必须封装在类的内部不能脱离类单独存在。笔记中所有方法Test、Test1、Test2、Test4都定义在Program类中Dog类也可新增方法如Dog类可添加Eat()方法描述狗的进食行为。 类通过包含方法明确了自身静态方法或其对象非静态方法能实现的功能——比如Program类包含Test2方法就规定了该类可调用Test2方法实现“打印Dog对象信息”的功能。对象与方法调用与被调用的关系对于非静态方法对象是方法的调用主体需通过“对象.方法名()调用对于静态方法笔记重点无需创建对象可通过“类名.方法名()调用但本质上仍是依赖类的定义。 结合笔记案例Test2方法的形参是Dog对象调用时需传递d1Dog对象作为实参方法体中通过d1.Name、d1.Age访问对象的属性实现打印功能——这体现了“方法依赖对象获取数据对象依赖类拥有属性类依赖方法实现功能”的闭环关系。3. 通俗类比类 “手机模板”对象 “具体的某部手机”方法 “手机的功能打电话、发消息”模板规定了手机有哪些功能具体手机才能调用这些功能。八、完整实战案例含所有参数类型带详细注释namespace _04方法的参数 { internal class Program { static void Main(string[] args) { // 1. 调用带单个参数的方法 Test(张娜拉);// 实参张娜拉string类型对应形参name Test(邓论); // Test(749);// 错误形参是string实参是int类型不匹配 string name 郑爽; Test(name);// 实参变量namestring类型 // 2. 调用带多个参数的方法按顺序传递实参 Test1(100, 房祖名);// 实参1100int实参2房祖名string // 3. 调用带对象类型参数的方法 Dog d1 new Dog() { Name 高市早苗, Age 50 }; Test2(d1);// 实参Dog对象d1 // 4. 调用带默认参数的方法 Test4(10, 张默); // 不传递默认参数使用默认值劣迹明星 Test4(10, 韩红, 榜样明星);// 传递默认参数使用实参值榜样明星 } // 1. 带单个参数的静态方法无返回值 // name形参string类型接收实参 public static void Test(string name) { for (int i 0; i 10; i) { Console.WriteLine(name); } } // 2. 带多个参数的静态方法无返回值 // count形参1int控制循环次数name形参2string控制打印内容 public static void Test1(int count, string name) { for (int i 0; i count; i) { Console.WriteLine(name); } } // 3. 带对象类型参数的静态方法无返回值 // d1形参Dog类型接收Dog对象 public static void Test2(Dog d1) { for (int i 0; i 10; i) { Console.WriteLine(d1.Name : d1.Age); } } // 4. 带默认参数的静态方法无返回值 // count非默认参数name非默认参数lj默认参数默认值劣迹明星 public static void Test4(int count, string name, string lj 劣迹明星) { for (int i 0; i count; i) { Console.WriteLine(name 是 lj); } } } // 自定义Dog类用于对象类型参数案例 public class Dog { public string Name { get; set; } public int Age { get; set; } } }九、易错点提醒高频踩坑新增参数相关方法名命名错误未遵循大驼峰命名法则如写成test正确应为Test方法调用时遗漏小括号如Test错误正确应为Test()定义方法后忘记调用方法仅定义不调用方法体中的代码永远不会执行混淆形参和实参把定义方法时的形参当成调用方法时的实参或反之静态方法调用错误未加类名不同类时或误将非静态方法按静态方法调用后续会讲解非静态方法无返回值方法赋值给变量如string res Test();错误Test方法是void类型不能赋值参数类型/数量不匹配如形参是string实参传int或形参有2个实参只传1个均会报错多个参数顺序颠倒调用带多个参数的方法时实参顺序与形参顺序不一致导致逻辑错误默认参数位置错误将默认参数放在非默认参数前面如Test4(int count, string lj 劣迹明星, string name)错误对象参数使用错误未创建对象就传递给方法如Test2(null);会导致空引用异常混淆类、对象、方法的关系误以为方法可脱离类存在或对象可脱离类创建如未定义Dog类直接创建Dog d1 new Dog();会报错。十、核心总结方法核心封装功能代码减少重复实现复用可通过返回值传递结果通过参数实现灵活适配方法定义修饰符 static静态 返回值类型 大驼峰方法名 (参数列表) 方法体静态方法调用同个类中可直接写方法名()或类名.方法名()必须调用才会执行关键区分形参定义方法时、实参调用方法时两者类型、数量、顺序需完全匹配返回值void无返回值不能赋值其他类型有返回值需用return可赋值参数类型重点掌握4种——单个参数、多个参数、对象参数、默认参数默认参数必须放在最后对象参数传递的是对象引用方法体中修改对象属性会影响原对象类、对象、方法的核心关联类是模板含属性、方法对象是类的实例方法是类/对象的功能载体三者相互依赖、缺一不可。