IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity学习之C#基础11——方法、方法重载 -> 正文阅读

[游戏开发]Unity学习之C#基础11——方法、方法重载

?1.什么是方法?

2.语法:

?在自定义方法时,我们需要注意的是,返回的数据必须与返回值类型兼容。比如返回值类型是float类型,我们就可以返回float类型也可以返回int类型。比如下面的一段代码:

        public float addOp(int a, int b)
        {
            int c = a + b;
            return c;
        }

*return后面的语句不再执行。

*没有返回值的方法也可以写return,不过后面不能又任何东西。

3.返回值类型:

4.参数:

?

?下面我们来做一个实例:

利用控制台做一个类似系统右下角的日历。达到下面的效果:

?自己尝试制作完,可以参考一下下面的代码。

        public static int startYear = 1999;
        public static int startWeekDay = 5;
        public static int getTotalDays(int year)
        {
            int yearStep = startYear;
            int yearDays = 0;
            for (int i = year - startYear; i >= 0; i--)
            {
                if (yearStep % 4 == 0)
                {
                    yearDays += 366;
                }
                else
                {
                    yearDays += 365;
                }
                yearStep++;
            }
            return yearDays;
        }
        public static int getCertainMDay(int year, int mouth)
        {
            int dayNum = 0;
            switch (mouth)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    {
                        dayNum = 31;
                        break;
                    }

                case 4:
                case 6:
                case 9:
                case 11:
                    {
                        dayNum = 30;
                        break;
                    }
                case 2:
                    {
                        if (year % 4 == 0)
                        {
                            dayNum = 29;
                            break;
                        }
                        else
                        {
                            dayNum = 28;
                            break;
                        }

                    }
                default:
                    break;

            }
            return dayNum;
        }
        public static int getFirstDayInWeekDay(int year)
        {
            if (year == 1999)
            {
                return startWeekDay;
            }
            else
            {
                int totalDays = getTotalDays(year - 1);
                int outDaysNum = totalDays % 7;
                if (outDaysNum + 8 - startWeekDay > 7)
                {
                    outDaysNum = outDaysNum - 7;
                }
                return outDaysNum + startWeekDay;
            }

        }
        public static void showDate(int year)
        {
            int startWeekDay = getFirstDayInWeekDay(year);
            int beginDay = getFirstDayInWeekDay(year), endDay = 0;
            for (int i = 0; i < 12; i++)
            {
                Console.WriteLine("当前年份为:" + year + " 当前月份为:" + (i + 1));
                Console.WriteLine("周一\t周二\t周三\t周四\t周五\t周六\t周日");
                int step7 = 0;
                string dateLine = "";
                bool firstLineFlag = true;
                for (int i1 = 0; i1 < getCertainMDay(year, i + 1); i1++)
                {
                    //初始几个日期
                    if (beginDay != 0 && firstLineFlag == true)
                    {
                        for (int i3 = 0; i3 < beginDay - 1; i3++)
                        {
                            dateLine = dateLine.Insert(dateLine.Length, "    \t");
                        }
                        for (int i4 = 0; i4 < 8 - beginDay; i4++)
                        {
                            string str1 = (i4 + 1) >= 10 ? (i4 + 1).ToString() + "  \t" : (i4 + 1).ToString() + "   \t";
                            dateLine = dateLine.Insert(dateLine.Length, str1);
                        }
                        dateLine = dateLine.Insert(dateLine.Length, "\n");
                        i1 += (8-beginDay);
                        firstLineFlag = false;
                    }

                    //中部几排日期
                    if (step7 == 7)
                    {
                        dateLine = dateLine.Insert(dateLine.Length, "\n");
                        step7 = 0;
                    }
                    string str2 = (i1 + 1) >= 10 ? (i1 + 1).ToString() + "  \t" : (i1 + 1).ToString() + "   \t";
                    dateLine = dateLine.Insert(dateLine.Length, str2);
                    step7++;


                }//每月天数循环
                endDay = (getCertainMDay(year, i + 1) + (beginDay - 1)) % 7;
                beginDay = endDay+1;
                Console.Write(dateLine+"\n\n");
            }//月循环


        }

上面是方法的简单了解,下面我们来思考一个问题,writeline方法是如何做到输出不同类型的值的呢?

        static void Main(string[] args)
        {
            Console.WriteLine(getSecondByDaysHoursAndMinutes(2, 1.5f, 37));
            //下面我们制作一个通过天、小时、分钟,获得总秒数的小程序。
            static float getSecondByDaysHoursAndMinutes(float day, float hour, float minute)
            {
                return minute * 60 + hour * 60 * 60 + day * 24 * 60 * 60;
            }
        }

5.上面的一串代码,用于根据天数、小时数、分钟数来计算总秒数。如果我想计算小时数和分钟数而得出总秒数,或者是单独的计算多少分钟或是多少小时得到的总秒数等。

这样,我们需要写很多方法借用很多方法名,从而使程序员需要记住多个方法。

那么怎么解决这个问题呢?——重载方法。

?

static void Main(string[] args)
        {
            Console.WriteLine(getSecondByTimes(2.1F, 1.5F, 37.1F));
            //下面我们制作一个通过天、小时、分钟,获得总秒数的小程序。           

        }
        public static float getSecondByTimes(float day, float hour, float minute)
        {
            return minute * 60 + hour * 60 * 60 + day * 24 * 60 * 60;
        }
        public static float getSecondByTimes(float day)
        {
            return day * 24 * 60 * 60;
        }
        public static double getSecondByTimes(double hour)
        {
            return hour * 60 * 60;
        }
        public static float getSecondByTimes(int minute)
        {
            return minute * 60;
        }

这是一个简单的例子。

6.递归:

不用循环做一个阶乘的方法?

        static void Main()
        {
            Console.WriteLine(getFactorial(3));
        }
        public static int getFactorial(int num)
        {
            if (num <= 1)
            {
                return num;
            }
            return num * getFactorial(num - 1);
        }

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:33:04  更:2021-09-18 10:33:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:46:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码