C#基础⑧——方法(函数、重载、out、ref)

简介: 比喻成职能。比喻成一个生产自行车老板,一个地方专门放螺丝,一个地方专门放轮,一个地方专门放车链子,需要组装什么就从那个仓库里面拿就行了。各司其职。

d83de4f37ca1c565e9ee1befffc7824b.png


一、什么是方法(函数)?


函数就是将一堆代码进行重用的一种机制(就是将重复使用的的代码放在一个方法里,谁想用调就行了。)


比喻成职能。比喻成一个生产自行车老板,一个地方专门放螺丝,一个地方专门放轮,一个地方专门放车链子,需要组装什么就从那个仓库里面拿就行了。各司其职。


二、使用方法有什么好处呢?


便于修改、增加可读性、可重用、封装


三、语法:


访问修饰符 static 返回类型 方法名(参数列表)


四、实战演练


①、请用户输入两个数,判断两数的最大值

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("请输入第一个数");                    //输入第一个数
        int number1 = Convert.ToInt32(Console.ReadLine());    //接收用户输入内容,并转换为int类型
        Console.WriteLine("请输入第二个数");                    //输入第二个数
        int number2 = Convert.ToInt32(Console.ReadLine());    //接收并转换为int类型
        int max =  Show(number1, number2);                    //调用Show()这个方法,有两个返回值
        Console.WriteLine("最大的数是:{0}", max);             //输出结果
        Console.ReadKey();
    }
    /// <summary>
    /// 此方法用来比较两个数的大小,返回的是最大值
    /// </summary>
    /// <param name="num1">用来比较的第一个数</param>
    /// <param name="num2">用来比较的第二个数</param>
    /// <returns>返回的是最大值</returns>
    public static int Show(int num1, int num2)               //static静态方法,方法名Show,有参数有返回值
    {
        int number=num1> num2 ? num1 : num2;                //判断两个数的大小
        return number;                                      //返回结果
    }
}


②、从一个整数数组中取出最大的整数、最小整数、总和、平均值

class Program
{
    static void Main(string[] args)
    {
        int[] nums = new int[] { 1,2,3,4,5,6};        //定义一个int类型的数组nums
        ArrayNumbers(nums);                           //调用ArrayNumbers这个有参数的方法,
        Console.ReadKey();    
    }
    public static void ArrayNumbers(int[] num)        //方法
    {
        int max = int.MinValue;                       //定义一个变量max,用于判断最大值
        int min = int.MaxValue;                       //定义一个变量min,用于判断最小值
        int sum = 0;                                  //定义一个整数变量,初始值为0
        for (int i = 0; i < num.Length; i++)          //遍历num这个数组
        {
            if (num[i] > max)                         //如果遍历的这个值>最大值
            {
                max = num[i];                         //把这个值赋给变量max
            }
            if (num[i] < min)                         //如果遍历的这个值<最大值
            {
                min = num[i];                         //把这个值赋给变量min
            }
            sum += num[i];                            //求和
        }
        Console.WriteLine("最大值为:{0},最小值为{1},和为{2},平均分为{3}", max, min, sum, sum / num.Length);     //在控制台输出结果
    }
}


③、计算一个整数数组的所有元素的和


class Program
{
    static void Main(string[] args)
    {
        int[] nums = new int[] { 1, 2, 3, 4, 5, 6 };         //定义一个整型数组nums
        int sum = ArraySum(nums);                            //调用方法ArraySum
        Console.WriteLine("和为:{0}",sum);                  //在控制台输出结果
        Console.ReadKey();           
    }
    public static int ArraySum(int[] num)                   //有返回值的整型方法
    {
        int sum = 0;                                        //变量,求和
        for(int i = 0; i < num.Length; i++)                 //遍历num这个数组
        {
            sum += num[i];                                  //对数组元素的和进行累加
        }
        return sum;                                         //返回
    }
}


④、数组里面都是人的名字,分割成:例如:贝拉|爱德华|雅各布……

class Program
{
    static void Main(string[] args)
    {        
        string[] names = new string[] { "贝拉", "爱德华", "雅各布","安妮" };   //string类型数组names
        ArrayNames(names);                                                   //调用ArrayNames这个方法
        Console.ReadKey();                                                   
    }
    public static void ArrayNames (string[] name)                             //方法
    {
        string str = "";                                                      //定义一个string类型变量,用于盛放添加字符之后的字符串
        for (int i = 0; i < name.Length-1; i++)                               //遍历数组,
        {
            str += name[i] + "|";                                            //循环给每个元素后面加“|”
        }
        Console.WriteLine(str+name[name.Length-1]);                          //输出变换后的字符串
    }
}


⑤、将一个整数数组的每一个元素进行如下的处理


如果元素是正数则将这个位置的元素的值+1;

如果元素是负数则将这个位置的元素的值-1;

如果元素是0,则不变

class Program
{
    static void Main(string[] args)
    {
        int[] nums = new int[] { 1, 2, 3, 4, 5, 6 };        //定义一个int型变量nums
        ArrayNumber(nums);                                  //调用ArrayNumber这个方法
        Console.ReadKey();
    }
    public static void ArrayNumber(int[] num)               //方法
    {
        for(int i = 0; i< num.Length; i++)                  //遍历进行判断
        {
        if(num[i] > 0)                                      //如果这个元素>0
        {
            num[i]++;                                       //+1
        }
        if (num[i] < 0)                                     //如果这个元素<0
        {
            num[i]--;                                       //—1
        }                
        }
        for (int i = 0; i < num.Length; i++)                //遍历数组num
        {
            Console.Write(num[i] + "\t");                   //在控制台输出结果
        }
    }            
}


⑥、将一个字符串数组的元素的顺序进行反转


{”我“,”是“,“好人”}{”好人“,”是“,”我“}。第i个和第length-i-1个进行交换


class Program
{
    static void Main(string[] args)
    {
        string[] str = new string[] { "我", "是", "好人" };          //定义一个string类型变量
        ArrayForr(str);                                             //调用ArrayForr这个方法
        Console.ReadKey();
    }
    public static void ArrayForr(string[] num)                      //static静态方法,无返回值
    {
        Array.Sort(num);                                            //Array类,用于对数组元素进行排序
        for (int i = 0; i < num.Length; i++)
        {
            Console.Write(num[i] + "\t");                           //在控制台输出结果
        }
    }
}


五、ref和out传参的区别


 

out

ref

赋初值(方法体内)

必须

不一定(方法内赋初值了,Main可不赋初值;方法内没赋初值,Main必须赋初值)

调用时采用的值

方法内传来的

方法内赋初值:采用方法内的值           方法内没赋初值:采用Main函数的

调用

方法名(out 参数)

方法名(ref 参数)



①、out的传参:


20201211080805773.png


20201211082003230.png


②、ref的传参:


第一种情况:方法体内没有赋初值

20201211080805827.png

第二种情况:方法体内赋初值了

20201211080805835.png


六、方法的重载


一同二不同(方法名相同,参数个数不同,类型也不同)

①、判断输入的一个数是不是质数


//质数,除了1和它自身外,不能被其他自然数整除的数
Console.WriteLine("请输入一个数");                   //在控制台提示输入数字
int numb = Convert.ToInt32(Console.ReadLine());     //接收用户输入的内容
bool result = ZhiShu(numb);                         //定义bool类型的变量,接收调用ZhiShu方法传回来的内容
string shu = result == true ? "是质数" : "不是质数"; //判断是不是质数
Console.WriteLine(shu);                             //在控制台输出
Console.ReadKey();
public static bool ZhiShu(int number)
{
  for (int i = 2; i < number; i++)               //for循环,2是最小的质数
  {
    if (number % i == 0)                       //如果输入的这个数和i整除=0
    {
      return false;                          //则返回false,不是质数
    }
  }
  return true;                                   //否则,返回true,是质数
}


②、用方法实现int类型,找最大值,最小值


int[] numbers = { 1, 2, 3, 4, 5, 6, 7 };      //定义numbers数组并且赋初值
int max;                                      //最大值
int min;                                      //最小值
FirstNumber(numbers, out max, out min);      //调用FirstNumber方法,
Console.WriteLine("最大值为{0}", max);        //输出最大值结果
Console.WriteLine("最小值为{0}", min);        //输出最小值结果
Console.ReadKey();
public static void FirstNumber(int[] nums, out int first, out int last)
{
  first = int.MinValue;                    //最大值
  last = int.MaxValue;                     //最小值
  for (int i = 0; i < nums.Length; i++)    //for循环
  {
    if (nums[i] > first)                 //如果数字>最大值
    {
      first = nums[i];                 //最大值
    }
    if (nums[i] < last)                  //如果数字<最大值
    { 
      last = nums[i];                  //最小值
    } 
  }
}


③、实现MyTryParse功能,找最大值,最小值

Console.WriteLine("请输入一个数字");
string strNumber = Console.ReadLine();
int num;
bool result = Program.MyTryParse(strNumber, out num);
bool result1 = int.TryParse(strNumber, out num);
public static bool MyTryParse(string s, out int result)   //此方法中有out参数,所以需要给它赋初值
{
  result = 0;
  try                                                   //try catch语句
  {
    result = Convert.ToInt32(s);   
    return true;
  }
  catch
  {
    return false;
  }
}


④、用户只能输入0到100之间的数写一个方法,否则提示超出范围


Console.WriteLine("请输入1-100之间数字");      //提示用户输入
bool result = GetNumber(Console.ReadLine());  //接收用户输入内容,调用GetNumber方法判断输入是否在范围内
if (result )                                 //如果范围为true
{
  Console.WriteLine("在范围内");            //在范围内
}
else                                         //否则
{
  Console.WriteLine("不在范围内");          //不在范围内
} 


public static bool GetNumber(string str)    //判断用户输入的数字范围是否正确
{
  int number = OutNumber(str);            //调用OutNumber方法,判断输入
  if (number >= 0 && number < 100)        //如果输入的数字在0-100之间
  {
  return true;    //则返回true
  }
  else                //否则
  {
  return false;   //返回false
  }
}


public static int OutNumber(string s)          //此方法中有out参数,所以需要给它赋初值
{
  while (true)
  {
    try               //try catch语句
    {
      int number = Convert.ToInt32(s);   //将接收到的内容转换为int类型                
      return number;                     //如果可以转换为int类型,则返回数值
    }
    catch                                  //如果报异常
    {
      Console.WriteLine("输入错误,请重新输入");
      s = Console.ReadLine();
    }
  }
}

2020121108112238.png

相关文章
|
2月前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
298 0
|
1月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
116 65
|
10天前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
13天前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
40 3
|
25天前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
1月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
40 1
|
1月前
|
C#
C#的方法的参数传递
C#的方法的参数传递
17 0
|
1月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
46 0
|
2月前
|
C#
C#一分钟浅谈:Lambda 表达式和匿名方法
本文详细介绍了C#编程中的Lambda表达式与匿名方法,两者均可用于定义无名函数,使代码更简洁易维护。文章通过基础概念讲解和示例对比,展示了各自语法特点,如Lambda表达式的`(parameters) =&gt; expression`形式及匿名方法的`delegate(parameters)`结构。并通过实例演示了两者的应用差异,强调了在使用Lambda时应注意闭包问题及其解决策略,推荐优先使用Lambda表达式以增强代码可读性。
43 8
|
3月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
81 0