C#:面向过程:方法进阶:重载和可选参数

更多
2020年03月13日 22点52分 作者:叶飞 修改

重载(overload)


引入:两个数相加,三个数相加,四个数相加……

可以使用同一个方法名,配以不同的参数“组合”(个数/类型/次序/传递方式ref)。但注意:

  • 仅是参数名不同
  • 仅是返回值不同

不能认为是方法的重载。

        static void grow(){}
        //static int grow(){return -1;}         //不能通过返回类型区分
        static void grow(int age){}
        static void grow(string name){}
        //static void grow(string sname) { }    //不能通过参数名区分
        static void grow(string name, int age){}
        static void grow(int age, string name){}


可选(optional)参数

生活场景:“老程,帮我买瓶水”

  • 默认500ml瓶装矿泉水,不需要每次都说;
  • 但有时候想换个口味或者其他原因,需要的是380ml矿泉水或者大罐装肥宅快乐水

开发中的例子:生成一个随机数组,默认:10个元素,以0开头,元素值最大间距5以内。

假设没有这个语法……

static void ExampleMethod(int required, int optionalInt=default(int), string description="Optional Description")
{
    Console.WriteLine("{0}: {1} + {2} = {3}",
        description, required, optionalInt, required+optionalInt);
}

理解可选:调用时可以选择:写或者不写


在调用的时候,参数可写可不写

grow("陈元");     //可选参数不写
static void grow(string name, int age = 18) { }

为了避免模糊,可以指定参数:

grow("陈元", 89);   //89会是age
grow("陈元", score: 89);    //89指定给了score
static void grow(string name, int age = 18, int score = 80) { }

注意:可选和非可选参数之间能构成“重载”


可选参数放在末尾

默认值必须是“编译时”确定的:常量、字面值、default()表达式、new ValueType……

ExampleMethod(10);//所有可选参数都不另外赋值(使用默认值)
ExampleMethod(10,2);//最后一个可选参数不另外赋值
ExampleMethod(12,description:"Addition with zero:");
//编译器无法通过类型来确定究竟是哪一个参数使用默认值,所以需要指定!

注意:default(int) 意思是取int的默认值               //TODO: 用于泛型




作业


  • 定义一个生成数组的方法:int[] GetArray(),其元素随机生成从小到大排列。利用可选参数控制:
    • 最小值min(默认为1)
    • 相邻两个元素之间的最大差值gap(默认为5)
    • 元素个数length(默认为10个)
  • 实现二分查找,方法名BinarySeek(int[] numbers, int target):
    • 传入一个有序(从大到小/从小到大)数组和数组中要查找的元素
    • 如果找到,返回该元素所在的下标;否则,返回-1




  • ------------------------------------------------

    作业

    1. 定义一个生成数组的方法:int[] GetArray(),其元素随机生成从小到大排列。利用可选参数控制:
    2. 最小值min(默认为1)
      • 相邻两个元素之间的最大差值gap(默认为5)
      • 元素个数length(默认为10个)
    3. 实现二分查找,方法名BinarySeek(int[] numbers, int target):
      • 传入一个有序(从大到小/从小到大)数组和数组中要查找的元素
      • 如果找到,返回该元素所在的下标;否则,返回-1

    ------------------------------------------------





    方法 函数 重载 可选参数
    赞: 37 踩: 0

    打赏
    已收到打赏的 帮帮币

    你的 打赏 非常重要!
    为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
    没有“帮帮币”,作者无法发布新的文章。

    全系列阅读
    评论 / 0

    锋利的C#


    C#语法基础

    包括C#语法面向过程部分,即:变量赋值、分支循环和函数封装等,以及面向对象部分:即封装、继承、多态、值/引用类型、装箱拆箱等各部分

    C#进阶

    包括C#语言特有(或领先)的语言特性,比如泛型、Linq、Lambda、异步方法等,以及一些常用类库,如集合、I/O等

    面向对象

    C#语法中面向对象部分内容:即封装、继承、多态、值/引用类型、接口、抽象类、Object、装箱拆箱等……

    全部
    关键字



    帮助

    反馈