方法、方法的重载、方法的重写、方法的递归

方法:

将一堆代码进行重用的一种机制。

语法:

[访问修饰符] 返回类型 <方法名>(参数列表){

方法主体;

}

返回值类型:如果不需要写返回值,返回类型写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 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]的更多相关文章

  1. .NET 基础一步步一幕幕[面向对象前言]

    面向对象前言 2017年的第一篇博文,好久不写博文了,赶紧补上,感觉在以前的<.NET 基础一步步一幕幕>系列博客中,简短的小知识点已经介绍的差不多的(PS:如果还有别的基础知识点我没有介 ...

  2. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  3. .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]

    构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...

  4. .NET 基础 一步步 一幕幕[面向对象之静态、非静态]

    静态.非静态 先来看一段代码来区分静态与非静态: using System; using System.Collections.Generic; using System.Linq; using Sy ...

  5. .NET 基础 一步步 一幕幕[面向对象之new、this关键字]

    经常会有人问:小伙子,有没有对象啊,要不要大叔我帮你介绍一个啊,小伙子会说:大叔,不用我自己new一个就好了.(PS:活该你没有对象) 上边当然是一个段子咯,程序员那会没有对象,自己new一个就有了啊 ...

  6. .NET 基础 一步步 一幕幕[面向对象之堆、栈、引用类型、值类型]

    堆.栈.引用类型.值类型 内存分为堆和栈(PS:还有一种是静态存储区域 [内存分为这三种]),值类型的数据存储在栈中,引用类型的数据存储在堆中. 堆.栈: 堆和栈的区别: 栈是编译期间就分配好的内存空 ...

  7. .NET 基础 一步步 一幕幕 [前言]

    .NET 基础 一步步 一幕幕 [前言部分] 本人小白一枚,虽然说从去年就开通博客了,到现在也没有写多少东东,虽然工作了,也没有更好得总结.故此重新祭出博客园法宝,修炼技术,争取早日走上大神之位. 故 ...

  8. .NET 基础一步步一幕幕[方法、结构、枚举]

    方法.结构.枚举 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值,写void 方法名:P ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

随机推荐

  1. 基于Entity Framework 6的框架Nido Framework

    随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门外汉. EF ...

  2. win server服务安装

    从一台机子的服务移到我的测试环境中: 1.copy 100pC上的服务目录(d:\...)到13PC中

  3. div错位/解决IE6、IE7、IE8样式不兼容问题

    IE6里DIV错位的问题    原文:chinafine 采用”FLOAT:LEFT“的DIV在IE8.IE7.都没问题,IE6下却向下移动,出现空白.这是因为,IE6采用的内核默认把DIV之间的距离 ...

  4. 【BZOJ-1055】玩具取名 区间DP

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1560  Solved: 907[Submit][Statu ...

  5. Codeforces Round #335 (Div. 2)

    水 A - Magic Spheres 这题也卡了很久很久,关键是“至少”,所以只要判断多出来的是否比需要的多就行了. #include <bits/stdc++.h> using nam ...

  6. Hadoop发行版本介绍

    前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...

  7. jboss jndi配置部分参数详解

    使用的是jboss7.1.1, jndi的配置在$JBOSS_HOME/standalone/configuration/standalone.xml中进行配置.配置jndi时有很多参数,解释下用到的 ...

  8. CustomProgressBar

    https://github.com/eltld/CustomProgressBar-master

  9. 一次library cache pin故障的解决过程

    内容如下: 今天接到同事的电话,说他的一个存储过程已经run了一个多小时了,还在继续run,他觉得极不正常,按道理说不应该run这么长时间. 我说那我去看一下吧. 这个库是一个AIX上的10.2.0. ...

  10. 关于Aspose对于Word操作的一些扩展及思考

    Aspose.word Aspose.Words是一款先进的类库,通过它可以直接在各个应用程序中执行各种文档处理任务.Aspose.Words支持DOC,OOXML,RTF,HTML,OpenDocu ...