.NET 基础 一步步 一幕幕[面向对象之方法、方法…
2018-06-23 23:45:54来源:未知 阅读 ()
方法、方法的重载、方法的重写、方法的递归
方法:
将一堆代码进行重用的一种机制。
语法:
[访问修饰符] 返回类型 <方法名>(参数列表){
方法主体;
}
返回值类型:如果不需要写返回值,返回类型写void。
[访问修饰符] void <方法名>(){
方法主体;
}
如果需要写返回值,返回类型写需要返回的类型:
例如返回string类型:
[访问修饰符] string <方法名>(){
方法主体;
}
方法名:Pascal 每个单词的首字母都大些。其余字母小写
参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不省略。
方法写好后,如果想要被执行,必须要调用。
方法的调用语法:类名.方法名(参数);
代码展示:
static void Main(string[] args) { //计算两个整数之间的最大值 //调用有返回值的方法 int max = Program.GetMax(66, 88); //调用没有有返回值的方法 Write(); Console.WriteLine(max); Console.ReadKey(); } /// <summary> /// 计算两个整数之间的最大值并且将最大值返回 /// </summary> /// <param name="n1">第一个整数</param> /// <param name="n2">第二个整数</param> /// <returns>将最大值返回</returns> public static int GetMax(int n1, int n2) { return n1 > n2 ? n1 : n2; } /// <summary> /// 没有返回值的方法 /// </summary> public static void Write() { Console.WriteLine("计算结束。。。"); }
运行结果:
方法的练习:
static void Main(string[] args) { //读取输入的整数 //多次调用(如果用户输入的是数字,则返回,否则提示用户重新输入) Console.WriteLine("请输入一个数字"); string input = Console.ReadLine(); int number = GetNumber(input); Console.WriteLine(number); Console.ReadKey(); } /// <summary> /// 这个方法需要判断用户的输入是否是数字 /// 如果是数字,则返回 /// 如果不是数字,提示用户重新输入 /// </summary> public static int GetNumber(string s) { while (true) { try { int number = Convert.ToInt32(s); return number; } catch { Console.WriteLine("请重新输入"); s = Console.ReadLine(); } } }
运行结果:
方法的重载
概念:方法的重载指的就是方法的名称相同给,但是参数列表不同。
参数不同,分为两种情况
1)、如果参数的个数相同,那么参数的类型就不能相同。
2)、如果参数的类型相同,那么参数的个数就不能相同。
***方法的重载跟返回值没有关系
代码展示:
static void Main(string[] args) { M(); M(1, 2); double b = M(0.1, 0.3); Console.WriteLine(b); M(1,2,3); string s = M("1", "2"); Console.WriteLine(s); //Console.WriteLine 也是方法的重载(可以F12进方法看看) Console.WriteLine(1); Console.WriteLine(1.4); Console.WriteLine(true); Console.WriteLine('c'); Console.WriteLine("123"); Console.WriteLine(5000m); Console.ReadKey(); } public static void M() { Console.WriteLine("无参数的方法!!!"); } public static void M(int n1, int n2) { int result = n1 + n2; Console.WriteLine(result); } public static double M(double d1, double d2) { return d1 + d2; } public static void M(int n1, int n2, int n3) { int result = n1 + n2 + n3; Console.WriteLine(result); } public static string M(string s1, string s2) { return s1 + s2; }
运行结果:
Console.WriteLine 源代码一部分(详情F12进方法自行查看):
方法的重写
“重写”父类方法就是修改它的实现方式或者说在子类中对它进行重新编写。
重写必须发生在继承基础之上
1、重写父类的方法要用到override关键字(具有override关键字修饰的方法是对父类中同名方法的新实现)
2、要重写父类的方法,前提是父类中该要被重写的方法必须声明为virtual或者是abstract类型。给父类中 要被重写的方法添加virtual关键字表示可以在子类中重写它的实现。(注意:C#中的方法默认并不是virtual类型的,因此要添加virtual关键字才能够被重写)
3、virtual关键字用于将方法定义为支持多态,有virtual关键字修饰的方法称为“虚拟方法”
[访问修饰符] virtual [返回类型] 方法名(参数列表)
{
//虚拟方法的实现,该方法可以被子类重写
}
代码展示:
namespace inheritDemo2 { class Employee { public virtual void EmpInfo() { Console.WriteLine("用virtual关键字修饰的方法是虚拟方法"); } } class DervEmployee : Employee { public override void EmpInfo() { base.EmpInfo();//base关键字将在下面拓展中提到 Console.WriteLine("该方法重写base方法"); } } class Test { static void Main(string[] args) { DervEmployee objDervEmployee = new DervEmployee(); objDervEmployee.EmpInfo(); //注意:objDervEmployee派生类的实例是赋给Employee类的objEmployee的引用, // 所以objEmployee引用调用EmpInfo()方法时 还是调用DervEmployee类的方法 Employee objEmployee = objDervEmployee; objEmployee.EmpInfo(); } } }
拓展:base关键字用于从子类中访问父类成员。即使父类的方法在子类中重写,仍可以使用base关键字调用。 而且,在创建子类实例时,可以使用base关键字调用父类的构造函数。使用base关键字只能访问父类的构造.
方法的递归
方法自己调用自己。(注意:可是这个方法体里面必须有一个条件,可以使这个递归停下来的条件,要不然就成了死循环,出不了这个方法.)
代码展示:
static void Main(string[] args) { TellStory(); Console.ReadKey(); } public static int i = 0; public static void TellStory() { Console.WriteLine("从前有座山"); Console.WriteLine("山里有座庙"); Console.WriteLine("庙里有个老和尚和小和尚"); Console.WriteLine("有一天,小和尚哭了,老和尚给小和尚讲了一个故事"); i++; if (i >= 10) { return; } TellStory(); }
运行结果:
总结:
方法:将一堆代码进行重用的一种机制。
方法的重载:方法的重载指的就是方法的名称相同给,但是参数列表不同。
方法的重写: “重写”父类方法就是修改它的实现方式或者说在子类中对它进行重新编写。
方法的递归:方法自己调用自己。
本篇就到这里了,最后打个小广告:QQ群: .NET 一步步一幕幕 群号:590170361 (加群备注:博客园看到的)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:OOP应用:实体类
- css与javascript重难点,学前端,基础不好一切白费! 2020-06-11
- HTML基础教程_1 2020-06-09
- HTML基础02 2020-06-09
- HTML基础01 2020-06-07
- [03]HTML基础之行内标签 2020-06-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash