1.什么是方法

各种语言都有方法的概念,有的语言称其为函数或者过程。

一个方法时把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个csharp程序至少有一个带有Main方法的类。

如:Start、Update等,要使用一个方法,您需要:

  • 定义方法
  • 调用方法

2.为什么使用方法

使用方法可以提高代码的可重用性和可维护性(代码层次结构更清晰)。

3.语法

定义方法

[访问修饰符] [可选修饰符] 返回类型 方法名称(参数列表)
{
    //方法体
    return 结果;
}
  • 方法表示一个功能,方法名称首字母大写

  • 返回值:功能的结果

  • 类型:数据类型 void空返回值

  • 有返回值的方法,return关键字必须写

  • 无返回值的方法,return关键字可以不写

  • 参数列表中的参数叫做形参

  • 参数:方法调用者传递给方法定义者的信息

调用方法

方法名称(参数);
  • 参数叫做实参,实参与形参要一一对应(类型、顺序、个数)
  • 指定参数的过程叫做传参

如何调用内置方法

1.看名字猜功能,看方法描述信息

2.看参数(看类型、看名称、看描述)

3.看返回值(类型)

4.看文档

5.真实环境测试

4.写方法

一个方法就做一个事情,保证方法最大程度的复用。

实例

在控制台打印日历表

using System;

namespace Calendar
{
    class Program
    {
        static void Main(string[] args)
        {
            //调用年份方法
            ShowYear(2021);
        }

        /// <summary>
        /// 显示年份
        /// </summary>
        /// <param name="year">年份</param>
        private static void ShowYear(int year)
        {
            for(int i = 1; i <= 12; i++)
            {
                ShowMonth(year, i);
                Console.WriteLine();
            }

        }

        /// <summary>
        /// 显示月份
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        private static void ShowMonth(int year, int month)
        {
            //打印表头
            Console.WriteLine($"{year}年{month}月");
            Console.WriteLine("日\t一\t二\t三\t四\t五\t六");


            //获取每月的第一天是星期几,根据星期数显示\t
            int week = GetWeekByDay(year, month, 1);
            for (int i = 0; i < week; i++)
            {

                Console.Write("\t");
            }

            //获取当月的总天数(在同一行显示)
            int days = CalDays(year, month);
            for (int i = 1; i <= days; i++)
            {
                Console.Write(i + "\t");
                //每周六换行
                if (GetWeekByDay(year, month, i) == 6)
                    Console.WriteLine();
            }
        }

        /// <summary>
        /// 根据年月日计算星期几
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        /// <param name="day">日</param>
        /// <returns>星期几</returns>
        private static int GetWeekByDay(int year,int month,int day)
        {
            DateTime dt = new DateTime(year, month, day);
            return (int)dt.DayOfWeek;
        }

        /// <summary>
        /// 根据年份和月份获取天数
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        /// <returns>天数</returns>
        private static int CalDays(int year,int month)
        {
            int days = 0;
            switch (month)
            {
                case 2:
                    days = IsLeapYear(year) ? 29 : 28;
                    break;
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    days = 31;
                    break;

                case 4:
                case 6:
                case 9:
                case 11:
                    days = 30;
                    break;


            }

            return days;
        }
        /// <summary>
        /// 判断输入的年份是否为闰年
        /// </summary>
        /// <param name="year">输入年份</param>
        /// <returns>True代表闰年,false代表平年</returns>
        private static bool IsLeapYear(int year)
        {
            return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
        }
    }


}

5.方法重载

含义

方法相同,但参数列表不同

作用

减少调用者的及一辆

适用性

在不同条件下,解决同一类问题

6.相关代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Day4
{
    class Program
    {
        //方法
        static void Main1(string[] args)
        {
            //方法的调用者
            Fun1();
            bool re = Login();

            //实参与形参 要一一对应(类型、顺序、个数)
            //实参
            Fun2(10, "ok");

            //使用API
            //调用[使用] 别人做好的功能[方法]
            string str = "我爱UNITY";
            //方法:表示功能
            //定义方法 --- 做功能
            //调用方法 --- 使用功能
            //返回值:做方法的人 告诉 用方法的人的结果
            //参数: 用方法的人告诉做方法的人的信息


            /*如何调用方法
             * 1.看名字猜功能,看方法描述信息
             * 2.看参数(看类型、看名称、看描述)
             * 3.看返回值(类型) 
             * 4.看文档
             */

            //真实环境测试
            //将英文字符串转为小写
            string strResult = str.ToLower();
            //将英文字符串转为大写
            string strResult2 = strResult.ToUpper();
            //查找指定字符(参数)在此字符串(str)中的索引(位置的编号)
            int index = str.IndexOf('T');
            //在字符串的指定位置插入字符串
            string str2 = str.Insert(2,"csharp和");
            //在字符串的指定位置删除指定数量的字符串
            string str3=  str2.Remove(2, 3);
            //替换字符串中的指定字符串或char
            string str4 = str.Replace("UNITY","csharp");
        }

        //方法定义者
        //方法:表示一个功能
        //返回值:功能的结果 
        //        方法定义者 告诉 方法调用者的结果
        //类型:数据类型 void 空返回值
        private static bool Login()
        {
            Console.WriteLine("登录");
            //“并非所有的代码路径都有返回值”
            //方法体中缺少return关键字
            return true;//返回 数据;
            //有返回值的方法,return关键字必须写

        }
        private static void Fun1()
        {
            Console.WriteLine("Fun1");
            //无返回值方法,return关键字可以不写
            return; // 退出方法
            Console.WriteLine("return后面的语句不再执行");
        }

        //传递参数
        //参数:方法调用者 传递给  方法定义者的信息
        //      方法定义者 要求   方法调用者必须提供的信息
        private static void Fun2(int a,string b)//形参
        {
            Console.WriteLine(a);//?
        }

        private static void Main2()
        {
            int result = Add(5, 5);
        }

        //两个整数相加的功能
        private static int Add(int num1, int num2)
        {
            return num1 + num2;
        }


        //练习 定义打印年历的方法
        /*
         * 1.定义显示年历的方法
         * {
         *      调用12此显示月历
         * }
         * 2.显示月历的方法
         * {
         *      (1)显示表头 日\t一\t...
         *       (2)计算1号星期数,根据星期数显示\t
         *      (3)计算当月天数(在一行显示日)
         *       (4)每周6换行
         * }
         * 3.计算星期数?
         * 4.根据年月份计算天数的方法
         * 5.判断闰年的方法
         */

        private static void Main3() 
        {
            ShowCalendar(2021);
        }
        /// <summary>
        /// 显示日历
        /// </summary>
        /// <param name="year">年份</param>
        private static void ShowCalendar(int year)
        {
            for(int i = 1; i <= 12; i++)
            {
                GetMonth(year, i);
                Console.WriteLine();
            }
        }
        /// <summary>
        /// 月份
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        private static void GetMonth(int year,int month)
        {
            //显示表头
            Console.WriteLine("{0}年{1}月", year, month);
            Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
            //计算1号星期数,根据星期数显示\t
            int dayOfWeek = GetWeekByData(year, month, 1);
            for(int i = 0; i < dayOfWeek; i++)
            {
                Console.Write("\t");
            }
            //计算当天月数(在一行显示日)
            int days = CalculateDays(year, month);
            for (int i = 1; i <= days; i++)
            {
                Console.Write(i+"\t");
                //每周六换行
                if(GetWeekByData(year,month,i) == 6)
                    Console.WriteLine();
            }
        }
        /// <summary>
        /// 计算星期数
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        /// <param name="day">日</param>
        /// <returns>星期数</returns>

        private static int GetWeekByData(int year,int month,int day)
        {
            DateTime dt = new DateTime(year, month, day);
            int week = (int)dt.DayOfWeek;
            return week;

        }
        /// <summary>
        /// 计算月份天数
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        /// <returns>天数</returns>
        private static int CalculateDays(int year,int month)
        {
            //如果月份输入有误,返回0
            if (month < 1 || month > 12) return 0;
            //月份输入无误,判断天数
            switch (month)
            {
                case 2:
                    return IsLeapYear(year) ? 29 : 28;
                case 4:
                case 6:
                case 9:
                case 11:
                    return 30;
                default:
                    return 31;
            }
        }

        /// <summary>
        /// 根据年份判断是否为闰年
        /// </summary>
        /// <param name="year">年份</param>
        /// <returns>true为闰年,false为平年</returns>
        private static bool IsLeapYear(int year)
        {
            return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
        }

        /*练习
         * 1.根据分钟数,计算秒数的方法
         * 2.根据分钟数、小时数、计算秒数的方法
         * 3.根据分钟数、小时数、天数计算秒数的方法
         */

        static void Main()
        {
            int second = CalculationSecond(1,0,0);
        }

        /// <summary>
        /// 根据分钟计算秒数
        /// </summary>
        /// <param name="Minute">分钟</param>
        /// <returns>秒数</returns>
        private static int CalculationSecond(int Minute)
        {
            return Minute * 60;
        }
        /// <summary>
        /// 根据小时和分钟计算秒数
        /// </summary>
        /// <param name="Hour">小时</param>
        /// <param name="Minute">分钟</param>
        /// <returns>秒数</returns>
        private static int CalculationSecond(int Hour, int Minute)
        {
            return CalculationSecond(Hour * 60 + Minute);
        }
        /// <summary>
        /// 根据天数、小时和分钟计算秒数
        /// </summary>
        /// <param name="Day"></param>
        /// <param name="Hour"></param>
        /// <param name="Minute"></param>
        /// <returns></returns>
        private static int CalculationSecond(int Day, int Hour, int Minute)
        {
            return CalculationSecond(Day * 24 + Hour, Minute);
        }
    }
}

发表评论

邮箱地址不会被公开。 必填项已用*标注