.NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法、方法的重载、方法的重写、方法的递归
方法:
将一堆代码进行重用的一种机制。
语法:
[访问修饰符] 返回类型 <方法名>(参数列表){
方法主体;
}
返回值类型:如果不需要写返回值,返回类型写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 (加群备注:博客园看到的)
.NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]的更多相关文章
- .NET 基础一步步一幕幕[面向对象前言]
面向对象前言 2017年的第一篇博文,好久不写博文了,赶紧补上,感觉在以前的<.NET 基础一步步一幕幕>系列博客中,简短的小知识点已经介绍的差不多的(PS:如果还有别的基础知识点我没有介 ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...
- .NET 基础 一步步 一幕幕[面向对象之静态、非静态]
静态.非静态 先来看一段代码来区分静态与非静态: using System; using System.Collections.Generic; using System.Linq; using Sy ...
- .NET 基础 一步步 一幕幕[面向对象之new、this关键字]
经常会有人问:小伙子,有没有对象啊,要不要大叔我帮你介绍一个啊,小伙子会说:大叔,不用我自己new一个就好了.(PS:活该你没有对象) 上边当然是一个段子咯,程序员那会没有对象,自己new一个就有了啊 ...
- .NET 基础 一步步 一幕幕[面向对象之堆、栈、引用类型、值类型]
堆.栈.引用类型.值类型 内存分为堆和栈(PS:还有一种是静态存储区域 [内存分为这三种]),值类型的数据存储在栈中,引用类型的数据存储在堆中. 堆.栈: 堆和栈的区别: 栈是编译期间就分配好的内存空 ...
- .NET 基础 一步步 一幕幕 [前言]
.NET 基础 一步步 一幕幕 [前言部分] 本人小白一枚,虽然说从去年就开通博客了,到现在也没有写多少东东,虽然工作了,也没有更好得总结.故此重新祭出博客园法宝,修炼技术,争取早日走上大神之位. 故 ...
- .NET 基础一步步一幕幕[方法、结构、枚举]
方法.结构.枚举 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值,写void 方法名:P ...
- .NET基础 一步步 一幕幕[循环、逻辑语句块]
循环.逻辑语句块 好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...
随机推荐
- WPF做12306验证码点击效果
一.效果 和12306是一样的,运行一张图上点击多个位置,横线以上和左边框还有有边框位置不允许点击,点击按钮输出坐标集合,也就是12306登陆的时候,需要向后台传递的参数. 二.实现思路 1.获取验证 ...
- python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)
类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...
- springmvc SSM shiro redis 后台框架 多数据源 代码生成器
A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单 下载地址 ; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类 ...
- [转载]SQL语句中的日期计算
1. 本月的第一天SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2. 本月的最后一天SELECT dateadd(ms,-3,DATEADD( ...
- 关于MJRefresh的下拉加载数据bug
当没有更多数据的时候显示NoMoreData 我的理解是先结束刷新再显示没有更多 今天之前一直没发现有问题 贴之前的代码 [self.collectionView reloadData]; [self ...
- Android 微信第三方登录(个人笔记)
今天在写微信登录,花了半天时间搞定.然后写下自己的笔记,希望帮助更多的人...欢迎各位指教. 微信授权登录,官方说的不是很清楚.所以导致有一部分的坑. 微信注册应用平台的应用签名,下载 微信签名生成工 ...
- SymmetricDS 快速和灵活的数据库复制
开始谈谈开源的SymmetricDS,谈谈实际使用中,遇到的一些问题和解决办法.持续更新: SymmetricDS 快速和灵活的数据库复制 实际使用 和 埋过的坑 (一)知识篇 SymmetricDS ...
- SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效
只要根据错误提示,找到相应文件夹下的\obj\Debug文件夹下的 相应名字.csproj.FileListAbsolute.txt, 打开并删除含有'<<<<<< ...
- Linux监控工具介绍系列——vmstat
说来惭愧,玩Linux这么久了,居然没有玩转vmstat这个命令,对很多指标的具体意义都有点模糊不清,花了点时间好好学习.整理一下这个命令的相关资料.因为这个命令确实比较重要,而且频繁用到. 命令 ...
- Quartz
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...