C#方法的定义与调用,方法的参数传递 方法的定义与调用模块1方法核心概念原注释逐句拆解必懂核心前提// 都是在Program里面去定义和调用重点说明当前所有方法的定义Test、Test2和调用Main方法中调用都在Program类内部这是C#中最基础的方法使用场景——方法定义在类中调用也在类的方法Main方法中。1.1 实参与形参原注释代码实操核心区分原注释原文//hello world 实参:在调用方法传递的实际的值//实参: 在调用方法传递的实际的值//形参在定义方法时候小括号里面(int a) a就是形参形式上参数。核心定义逐词拆解结合原代码实参实际参数定义调用方法时传递给方法的“具体数值/变量”是实际参与方法运算的数据原代码示例Console.WriteLine(hello world);中hello world就是实参——调用Console.WriteLine()方法时传递的实际值方法会打印这个具体的字符串关键细节实参必须有具体的值且数据类型要和方法定义中的形参类型一致后续带参数方法会重点讲通俗理解实参就是“实际给的东西”比如去商店买东西你给店员的“钱”就是实参店员方法接收钱实参后给你商品执行功能。形参形式参数定义定义方法时写在方法名后面小括号里的“变量”是方法接收外部数据的“占位符”没有具体的值只负责接收实参传递过来的值原注释示例//(int a,int b,) 参数列表 中int a、int b就是形参——方法定义时声明“我需要接收两个int类型的数据用a和b来表示”关键细节形参只有在方法被调用、接收实参后才有具体的值方法执行结束后形参就会被释放不再存在通俗理解形参就是“商店店员的手”用来接收你给的钱实参没有钱的时候手只是一个“占位”接收钱后手才有用。实参与形参的关系核心调用方法时实参的值会“传递”给对应的形参形参接收值后在方法体中使用形参的名字可以自定义但数据类型必须和实参匹配比如实参是字符串形参也必须是string类型。1.2 方法的返回值原注释代码实操原注释原文//返回值:是方法的具体结果//Console.ReadLine() 有结果的方法// string name Console.ReadLine();核心定义逐词拆解结合原代码返回值方法执行完成后返回给“调用者”的“具体结果”相当于方法执行后的“产出物”有返回值的方法示例原注释示例Console.ReadLine()就是有返回值的方法——该方法执行后会接收用户在控制台输入的内容把这个内容字符串作为返回值返回代码演示string name Console.ReadLine();—— 把Console.ReadLine()方法的返回值用户输入的字符串赋值给string类型变量name后续可以使用name变量关键细节有返回值的方法必须在定义时指定“返回值类型”比如string、int且方法体中必须用return关键字返回对应类型的值。无返回值的方法示例原代码中的Test()、Test2()方法都是无返回值的方法——方法执行后只做事情打印内容不返回任何结果关键细节无返回值的方法定义时用void关键字表示后续模块2会详细讲方法体中不需要return或只写return; 表示结束方法易错点无返回值的方法不能赋值给变量比如string s Test();会报错因为它没有返回结果。1.3 方法的核心作用原注释逐句拆解原注释原文//方法:把相关功能的代码添加一个方法体里面以后有需要相关功能时候只需要调用方法即可减少代码的重复率。可以定义方法时候带参数在调用的时候把实参传递方法里面形参可以通过形参实现不同功能。方法也可以通过返回值把方法结果拿到其他地方去使用。核心作用逐点细化结合原代码① 减少代码重复率核心作用原代码示例Test2()方法中循环10次打印“赵薇”如果没有方法每次需要打印10次“赵薇”都要写一遍for循环有了Test2()方法只需要调用Test2()就能执行循环打印不用重复写代码通俗理解方法就像“预制菜”提前把“炒好的菜”代码功能做好后续需要吃的时候用功能直接加热调用方法即可不用重新炒菜写代码。② 实现功能复用通过参数实现不同功能定义方法时可以带形参调用时传递不同的实参就能让同一个方法执行不同的逻辑举例补充贴合原代码逻辑如果定义一个带参数的方法Test3(int n)循环n次打印“赵薇”调用Test3(5)就打印5次调用Test3(10)就打印10次一个方法实现多种效果。③ 通过返回值实现结果复用有返回值的方法执行后的结果可以被赋值给变量拿到其他地方使用实现结果的复用原注释示例string name Console.ReadLine();拿到用户输入的name后可以在后续代码中使用name比如打印、判断就是返回值的作用。④ 使代码结构更清晰把不同的功能拆分成不同的方法比如打印“范冰冰”放在Test()循环打印放在Test2()代码分工明确便于阅读和修改。1.4 方法的核心组成必背原注释原文//方法包含: 1方法的定义 2方法的调用所有方法的使用都必须满足“先定义、后调用”二者缺一不可方法定义相当于“提前预制菜”把功能代码写好存放在类中方法调用相当于“加热预制菜”执行方法中的代码实现具体功能易错点只定义方法不调用方法中的代码永远不会执行比如只写public static void Test(){}不写Test()调用就不会打印“范冰冰”只调用方法不定义会报错系统找不到该方法。模块2方法的定义核心重点原代码逐行拆解原注释原文//1定义方法//public 方法修饰符一般定义公共的//static 静态的方法(目前使用static) 不写static 非静态方法//void 方法的返回值无返回值 不能赋值给一个变量//Test 方法名字 符合大驼峰命名规则//(int a,int b,) 参数列表//{} 方法体原代码方法定义示例public static void Test() { ... }、public static void Test2() { ... }以下逐部分拆解语法、规范和细节。2.1 方法定义的完整语法必背贴合原代码// 完整语法格式对应原注释 修饰符 static(可选) 返回值类型 方法名(参数列表) { 方法体; // 具体的功能代码 }结合原代码Test()方法逐部分拆解每一个组成部分public static void Test() // 方法定义的头部 { Console.WriteLine(范冰冰); // 方法体 }2.2 各组成部分详细说明逐点细化贴合原注释① 方法修饰符public原注释原文//public 方法修饰符一般定义公共的作用控制方法的访问范围决定其他类能不能访问这个方法常用修饰符public公共的最常用—— 整个项目都能访问原代码中Test()、Test2()用public修饰所以能在Main方法中调用其他修饰符了解private私有只能在当前类内部访问、internal内部只能在当前项目访问易错点如果方法用private修饰比如private static void Test()虽然能在Program类内部的Main方法中调用但其他类无法访问一般定义方法用public方便调用。② static静态关键字原注释原文//static 静态的方法(目前使用static) 不写static 非静态方法作用标记方法为“静态方法”静态方法属于“类”不属于“对象”原代码示例Test()、Test2()都是静态方法带static所以调用时可以直接用类名.方法名Program.Test()或省略类名Test()非静态方法不写static属于“对象”调用时必须先new一个对象再用对象.方法名后续会讲原代码暂不涉及关键细节Main方法是静态方法static void Main()静态方法只能调用静态方法如果Test()不写staticMain方法调用时会报错原代码核心规范。③ 返回值类型void原注释原文//void 方法的返回值无返回值 不能赋值给一个变量作用指定方法执行后返回的结果类型void表示“无返回值”原代码示例Test()、Test2()的返回值类型都是void所以方法执行后只打印内容不返回任何结果不能赋值给变量比如string s Test(); 会报错有返回值的类型补充如果方法有返回值需要把void换成具体的类型比如string、int并在方法体中用return返回对应类型的值示例补充public static int Add(int a, int b) { return a b; } —— 返回值类型是int方法执行后返回ab的结果可以赋值给int变量int sum Add(1,2); sum的值是3。④ 方法名Test、Test2原注释原文//Test 方法名字 符合大驼峰命名规则命名规范必须遵循大驼峰命名法——首字母大写后续每个单词首字母也大写比如Test、Test2、PrintInfo命名要求见名知意比如Test2()方法用于循环打印“赵薇”可以命名为PrintZhaoWei()一眼就能知道方法的功能禁止写法不能用拼音比如Dayin()、数字开头比如1Test()、小写开头比如test()、特殊符号。⑤ 参数列表()原注释原文//(int a,int b,) 参数列表作用用于接收调用方法时传递的实参小括号内可以写0个、1个或多个形参原代码示例Test()、Test2()的参数列表都是空的()内没有内容表示调用这两个方法时不需要传递任何实参参数列表语法补充多个形参用逗号分隔格式为“数据类型 形参名”比如(int a, int b)——表示接收两个int类型的实参分别用a和b表示易错点参数列表中形参的“数据类型”不能省略比如不能写(a, b)必须写(int a, int b)多个形参之间的逗号后面不要加多余的空格规范写法int a, int b。⑥ 方法体{}内的代码原注释原文//{} 方法体作用存放方法的具体功能代码方法被调用时会顺序执行方法体中的所有代码原代码示例Test()方法体Console.WriteLine(范冰冰);—— 执行打印“范冰冰”的功能Test2()方法体for循环10次每次打印“赵薇”—— 执行循环打印的功能关键细节方法体必须用大括号{}包裹大括号要成对出现左括号后换行右括号单独一行格式规范方法体中可以写任意合法的C#代码打印、循环、判断等易错点方法体不能为空吗可以为空比如public static void Test() {}调用时会执行但没有任何效果方法体中的代码必须符合语法规范比如循环要写完整语句要加分号。2.3 原代码中两个方法的完整拆解巩固理解示例1Test()方法无参数、无返回值、静态方法public static void Test() // 方法头部 { Console.WriteLine(范冰冰); // 方法体打印“范冰冰” }拆解public公共修饰符、static静态方法、void无返回值、Test方法名大驼峰、()无参数、方法体执行打印功能。示例2Test2()方法无参数、无返回值、静态方法public static void Test2() { for (int i 0; i 10; i) { Console.WriteLine(赵薇); } }拆解和Test()方法的头部完全一致方法体是for循环i从0到9共10次每次循环打印“赵薇”执行后会连续打印10次“赵薇”。模块3方法的调用核心实操原代码逐行拆解原注释原文//2方法调用://如果方法是static 使用类名打点去调用//如果方法是没有static 使用对象.调用前提先new 一个对象//Program.Test();// 调用方法的时候会把方法里面全部执行一遍; //Test();// 可以把类名省掉//方法一定要去调用核心原则方法必须调用才能执行静态方法和非静态方法的调用方式不同原代码只涉及静态方法的调用。3.1 静态方法的调用方式原代码重点原代码中Test()、Test2()都是静态方法带static调用方式有两种逐行拆解// 原代码调用示例Main方法中 Program.Test();// 调用方法的时候会把方法里面全部执行一遍 Test();// 可以把类名省掉 Test2();方式1类名.方法名()规范写法推荐代码Program.Test();拆解Program类名Test()方法定义在Program类中所以用类名Program来指定“调用哪个类中的方法”.点用于连接类名和方法名固定语法Test()方法名必须和定义的方法名完全一致大小写敏感比如Test()不能写成test()()必须写即使方法没有参数比如Test()不能写成Test;方法调用是一条语句必须以分号结束。执行效果调用Program.Test()后会执行Test()方法体中的所有代码——打印“范冰冰”。方式2直接写方法名()简化写法仅在同一类中可用代码Test();、Test2();拆解因为Test()、Test2()和Main方法调用者都在Program类中所以可以省略类名Program直接写方法名调用本质和Program.Test()完全一样只是写法更简洁推荐在同一类中使用这种写法。执行效果Test()执行Test()方法体打印“范冰冰”Test2()执行Test2()方法体循环10次打印“赵薇”。3.2 方法调用的核心细节必记贴合原代码① 调用方法时会顺序执行方法体中的所有代码比如调用Test2()会先执行for循环的初始化int i 0再判断i 10成立则打印“赵薇”i自增直到i 10循环结束方法执行完毕② 方法可以多次调用比如在Main方法中写Test(); Test(); 会打印两次“范冰冰”③ 方法调用的顺序按代码书写顺序执行比如Main方法中先写Test()再写Test2()会先打印“范冰冰”再打印10次“赵薇”④ 易错点1方法名写错比如把Test()写成Test1()会报错系统找不到该方法⑤ 易错点2忘记写括号比如把Test()写成Test会报错语法错误⑥ 易错点3只定义方法不调用方法体中的代码永远不会执行原注释重点//方法一定要去调用。3.3 非静态方法的调用补充对比理解原注释原文//如果方法是没有static 使用对象.调用前提先new 一个对象虽然原代码没有非静态方法但结合注释补充便于区分// 1. 定义非静态方法不写static public void Test3() { Console.WriteLine(非静态方法); } // 2. 调用非静态方法必须先new对象 Program p new Program(); // new一个Program对象 p.Test3(); // 用对象.方法名()调用关键细节非静态方法属于“对象”不属于“类”所以必须先通过new关键字创建对象比如Program p new Program();再用对象p调用方法p.Test3()易错点非静态方法不能直接用类名调用比如Program.Test3(); 会报错必须用对象调用。模块4常见易错点汇总考试/作业高频贴合原代码1. 方法定义时static遗漏或多余Main方法是静态方法只能调用静态方法如果Test()不写staticMain方法调用会报错如果非静态方法写了static调用时用对象调用会报错。2. 方法名命名不规范不用大驼峰比如test()、用拼音、数字开头不符合规范考试会扣分。3. 方法调用时忘记写括号比如Test; 会报错必须写Test()。4. 只定义方法不调用方法体中的代码永远不会执行比如只写public static void Test(){}不调用不会打印“范冰冰”。5. 无返回值方法赋值给变量比如string s Test(); 会报错因为void表示无返回值不能赋值。6. 参数列表语法错误形参遗漏数据类型比如(a, b)、多个形参之间用分号分隔比如int a; int b都会报错。7. 方法体大括号遗漏或不配对比如public static void Test() Console.WriteLine(范冰冰); 会报错必须用{}包裹方法体。8. 非静态方法调用方式错误非静态方法直接用类名调用比如Program.Test3();会报错必须先new对象再用对象调用。模块5完整可运行代码可直接复制运行对照学习using System; // 必须添加否则Console.WriteLine会报错 class Program { static void Main(string[] args) { Console.WriteLine(hello world);//hello world 实参:在调用方法传递的实际的值 // 方法调用静态方法同一类中可省略类名 Program.Test();// 方式1类名.方法名()规范写法 Test();// 方式2直接写方法名()简化写法 Test2();// 调用Test2()循环打印10次“赵薇” // 补充非静态方法调用演示 Program p new Program(); p.Test3(); } // 方法定义1无参数、无返回值、静态方法 public static void Test() { Console.WriteLine(范冰冰); } // 方法定义2无参数、无返回值、静态方法 public static void Test2() { for (int i 0; i 10; i) { Console.WriteLine(赵薇); } } // 补充非静态方法无参数、无返回值 public void Test3() { Console.WriteLine(非静态方法调用成功); } }方法的参数传递核心前提所有方法均为静态方法带static定义在Program类中调用时可直接写方法名同一类中省略类名参数传递的核心逻辑——调用方法时将实参的值或对象地址传递给形参形参接收后在方法体中使用。模块1带一个参数的静态方法Test方法1.1 方法定义逐行拆解语法规范逐部分拆解重点关注参数相关public static void和之前无参方法一致公共修饰符静态无返回值void表示方法执行后不返回任何结果不能赋值给变量Test方法名遵循大驼峰命名法见名知意推测功能是打印传入的姓名string name核心形参string形参的数据类型决定了调用方法时传入的实参必须是string类型字符串name形参名遵循小驼峰命名法首字母小写仅在当前方法体内部可用用于接收调用时传递的实参值关键形参的数据类型必须明确不能省略比如不能写Test(name)必须写Test(string name)。方法体for循环10次每次打印形参name的值——形参name的值由调用方法时传递的实参决定。1.2 方法调用3种实参传递方式逐行拆解核心逻辑调用带参方法时实参的类型必须和形参类型完全一致否则会报错实参的值会传递给形参方法体中使用的是形参接收后的实参值。方式1直接传递字符串字面量作为实参最常用代码Test(张娜拉);、Test(邓论);实参张娜拉、邓论都是string类型字符串用双引号包裹和形参string name的类型一致执行过程调用Test(张娜拉)时将实参张娜拉的值传递给形参name此时方法体中name 张娜拉循环10次打印“张娜拉”调用Test(邓论)时将实参邓论传递给形参name循环10次打印“邓论”关键每次调用传递不同的实参形参的值就会不同方法执行的结果也会不同实现“一个方法多种效果”。方式2传递变量作为实参实参是变量需保证类型一致代码string name 郑爽; Test(name);步骤1定义string类型变量name赋值为郑爽变量的类型必须和形参类型一致都是string步骤2调用Test(name)时传递的实参是变量name本质是将变量name的值郑爽传递给形参name执行效果和Test(郑爽)完全一致循环10次打印“郑爽”优势当实参值需要多次使用、或需要修改时用变量作为实参更灵活比如修改name的值为杨幂再调用Test(name)就会打印10次“杨幂”。错误示例注释中的报错情况代码// Test(749);注释原因报错报错原因形参name是string类型字符串而实参749是int类型整数实参类型和形参类型不匹配核心注意形参是什么类型就必须传入什么类型的实参不能随意传递其他类型比如形参是int实参不能是string形参是string实参不能是int。1.3 核心总结单参数方法1. 带参方法定义在方法名后括号内添加“数据类型 形参名”形参类型决定实参类型2. 实参传递可传递字面量如张娜拉、变量如name只要类型和形参一致即可3. 形参作用域仅在当前方法体内部可用方法执行结束后形参被释放不影响外部变量。模块2带多个参数的静态方法Test1方法2.1 方法定义逐行拆解多参数语法逐部分拆解重点关注多参数规范public static void无返回值静态方法和之前一致Test1方法名大驼峰命名功能是“按指定次数打印指定姓名”int count, string name核心多形参多形参语法多个形参之间用逗号分隔每个形参都必须明确“数据类型形参名”不能省略任何一个的类型形参顺序int count第一个形参接收“打印次数”、string name第二个形参接收“打印姓名”形参顺序固定调用时实参顺序必须和形参顺序一致形参类型count是int类型接收整数控制循环次数name是string类型接收姓名控制打印内容各自对应不同类型的实参。方法体for循环循环次数由形参count决定每次循环打印形参name的值——实现“次数不定、名字不定”的需求原注释核心需求。2.2 方法调用多实参传递顺序必须匹配实参传递100int类型、房祖名string类型两个实参用逗号分隔顺序和形参完全一致第一个实参对应第一个形参count第二个实参对应第二个形参name执行过程将实参100传递给形参count实参房祖名传递给形参namefor循环执行100次i从0到99每次打印“房祖名”最终输出100次“房祖名”。关键易错点实参顺序不能颠倒比如Test1(房祖名, 100); 会报错——第一个实参是string形参第一个是int类型不匹配实参个数不能多也不能少比如Test1(100); 少一个实参、Test1(100, 房祖名, 5); 多一个实参都会报错实参类型必须和对应形参一致比如Test1(100, 房祖名); 会报错——第一个实参是string形参count是int。2.3 核心总结多参数方法1. 多形参定义多个形参用逗号分隔每个形参必须有明确的类型和名称2. 实参传递实参个数、顺序、类型必须和形参完全匹配一一对应3. 核心优势解决“多个不确定值”的需求比如次数、姓名都不确定一个方法实现更灵活的功能。模块3传递对象类型参数的静态方法Test2方法核心前提先定义Dog类引用类型再定义接收Dog对象作为参数的方法传递的实参是Dog类的对象引用类型。3.1 先定义Dog类引用类型逐行拆解public class Dog定义公共的Dog类引用类型类名大驼峰public string Name { get; set; }、public int Age { get; set; }Dog类的两个公共属性用于存储狗的姓名string和年龄int关键Dog是引用类型创建的Dog对象如d1存储在堆空间变量存储的是对象的内存地址。3.2 Test2方法定义接收对象类型参数逐部分拆解重点关注对象参数public static void无返回值静态方法Test2方法名功能是“打印Dog对象的姓名和年龄10次”Dog d1核心对象类型形参形参类型Dog引用类型表示该形参只能接收Dog类的对象作为实参形参名d1小驼峰本质是一个Dog类型的变量用于接收调用时传递的Dog对象存储对象的内存地址原注释重点// 传递参数可以是任意类型 传递对象类型——说明方法的参数类型不仅可以是int、string等基本类型也可以是自定义的类引用类型。方法体for循环10次通过形参d1访问Dog对象的属性d1.Name、d1.Age打印“姓名:年龄”。3.3 方法调用传递Dog对象作为实参步骤1创建Dog对象并赋值对象初始化器方式Dog d1 new Dog() { Name高斯早苗,Age 50};new Dog()创建Dog对象堆空间d1是Dog类型变量栈空间存储对象的内存地址给对象的Name属性赋值“高斯早苗”Age属性赋值50。步骤2调用Test2(d1)传递对象作为实参实参是d1Dog类型变量存储对象地址形参是Dog d1接收对象地址参数传递逻辑引用类型传递将d1存储的对象内存地址传递给形参d1此时两个d1实参变量、形参变量指向堆空间中的同一个Dog对象执行效果循环10次打印“高斯早苗:50”。关键补充如果在Test2方法中修改对象的属性比如d1.Name 小白外部的d1对象属性也会被修改——因为两者指向同一个对象引用类型传递的特性。3.4 核心总结对象类型参数1. 参数类型可以是自定义类引用类型形参类型必须和实参的对象类型一致比如形参是Dog实参必须是Dog对象2. 引用类型参数传递传递的是对象的内存地址形参和实参指向同一个对象3. 方法体中可通过形参访问/修改对象的属性修改后会影响外部对象。模块4带默认参数的静态方法Test4方法4.1 方法定义逐行拆解默认参数语法逐部分拆解重点关注默认参数public static void无返回值静态方法Test4方法名功能是“按指定次数打印‘姓名是标签’”int count, string name, string lj劣迹明星核心默认参数前两个形参count、name普通形参没有默认值调用时必须传递实参第三个形参string lj劣迹明星默认参数语法是“数据类型 形参名默认值”原注释解读默认参数的核心逻辑——调用方法时如果给默认参数传递实参形参就用实参的值如果不传递实参形参就用定义时设置的默认值劣迹明星核心规范原注释重点// 默认参数只能写在最后面——多个形参中默认参数必须放在所有普通形参无默认值的后面不能放在前面或中间错误示例不规范public static void Test4(int count, string lj劣迹明星, string name) —— 默认参数lj放在了普通参数name前面会报错。方法体for循环count次每次打印“name是lj”lj的值由调用时是否传递实参决定。4.2 方法调用两种情况不传递默认参数、传递默认参数情况1不传递默认参数使用默认值代码Test4(10, 张默);实参传递10对应count、张默对应name不传递第三个实参默认参数lj形参取值count10name张默lj使用定义时的默认值劣迹明星执行效果循环10次每次打印“张默是劣迹明星”。情况2传递默认参数覆盖默认值代码Test4(10, 韩红, 榜样明星);实参传递10count、韩红name、榜样明星lj传递了第三个实参形参取值count10name韩红lj使用传递的实参值榜样明星覆盖默认值执行效果循环10次每次打印“韩红是榜样明星”。4.3 核心总结默认参数方法1. 默认参数语法形参后加“默认值”默认值必须是该类型的合法值比如string类型默认值可以是、劣迹明星不能是int类型的102. 调用规则默认参数可传可不传不传则用默认值传则用实参值3. 关键规范默认参数必须放在所有普通参数的后面核心易错点4. 优势减少方法重载的麻烦比如不需要单独定义“两个参数”“三个参数”的多个方法调用更灵活。模块5所有带参方法核心对比表格汇总模块6常见易错点汇总考试/作业高频1. 实参类型与形参类型不匹配比如给string类型的形参传递int类型实参Test(749);会报错2. 多参数调用时实参顺序颠倒比如Test1(房祖名, 100); 形参顺序是countint、namestring实参顺序颠倒导致类型不匹配报错3. 多参数调用时实参个数多或少比如Test1(100); 少传一个实参报错4. 默认参数位置错误默认参数没有放在最后面比如Test4(int count, string lj劣迹明星, string name)报错5. 传递对象参数时未创建对象比如Test2(null); 或Test2(); 未传递Dog对象报错6. 形参未指定数据类型比如Test(name) 代替 Test(string name)报错7. 调用默认参数方法时跳过普通参数传递默认参数比如Test4(10, , 榜样明星); 不能跳过前两个必传参数报错。模块7完整可运行代码可直接复制运行对照学习namespace _4方法的定义和调用 { internal class Program { // 都是在Program里面去定义和调用 static void Main(string[] args) { Console.WriteLine(hello world);//hello world 实参:在调用方法传递的实际的值 //实参: 在调用方法传递的实际的值 //形参在定义方法时候小括号里面(int a) a就是形参形式上参数。 //返回值:是方法的具体结果 //Console.ReadLine() 有结果的方法 // string name Console.ReadLine(); //方法:把相关功能的代码添加一个方法体里面以后有需要相关功能时候只需要调用方法即可 //减少代码的重复率。可以定义方法时候带参数在调用的时候把实参传递方法里面形参可以通过形参实现不同功能 //方法也可以通过返回值把方法结果拿到其他地方去使用。 //方法包含: 1方法的定义 2方法的调用 //2方法调用: //如果方法是static 使用类名打点去调用 //如果方法是没有static 使用对象.调用前提先new 一个对象 Program.Test();// 调用方法的时候会把方法里面全部执行一遍, Test();// 可以把类名省掉 //方法一定要去调用 Test2(); } //1定义方法 //public 方法修饰符一般定义公共的 //static 静态的方法(目前使用static) 不写static 非静态方法 //void 方法的返回值无返回值 不能赋值给一个变量 //Test 方法名字 符合大驼峰命名规则 //(int a,int b,) 参数列表 //{} 方法体 public static void Test() { Console.WriteLine(范冰冰); } public static void Test2() { for (int i 0; i 10; i) { Console.WriteLine(赵薇); } }namespace _5方法的参数 { internal class Program { static void Main(string[] args) { //调用方法 把实参值传递了形参 Test(张娜拉);// 张娜拉 属于实 Test(邓论); // Test(749);//参数是什么类型 决定传入实参类型 string name 郑爽; Test(name);//传递一个变量 //调用俩个参数Test1方法 Test1(100, 房祖名); //调用test2方法 Dog d1 new Dog() { Name高斯早苗,Age 50}; Test2(d1); // 调用Test4 有默认参数的方法 Test4(10, 张默); //不传默认参数的情况 默认参数值是定义时候写的值 Test4(10, 韩红, 榜样明星);// 如果默认参数默认参数值就是传递值 } //定义一个静态的 无返回值的 带一个参数的方法 //name 行参 public static void Test(string name) { for (int i 0; i 10; i) { Console.WriteLine(name); } } //要求次数也是不定 名字也是不定需要传递多个参数 public static void Test1(int count,string name) { for (int i 0; i count; i) { Console.WriteLine(name); } } // 传递参数可以是任意类型 传递对象类型 public static void Test2(Dog d1) { for (int i 0; i 10; i) { Console.WriteLine(d1.Name :d1.Age); } } // 传递三个参数 个数 姓名 默认值是劣迹姓名 //lj 这个形参有一个默认值。如果传递实参就是实参的值不穿的实参lj就是默认值 // 默认参数只能写在最后面 public static void Test4(int count,string name,string lj劣迹明星) { for (int i 0; i count; i) { Console.WriteLine(name是lj); } } } // 定义类 public class Dog { public string Name { get; set; } public int Age { get; set; } } }