C#---第七课:方法的几个特性:方法的重载、out、ref、params

本文详细介绍了C#中的方法重载,包括参数个数、类型的不同要求,以及如何实现方法重载。接着讨论了out参数,解释了它如何允许方法返回多个值并修改原始变量。然后讲解了ref参数,通过它方法可以直接修改原始变量。最后,介绍了params关键字,用于传递可变数量的相同类型参数。这些特性增强了C#的灵活性和功能性。

1.方法的重载

方法的重载:一个方法可以有多个场景的应用。相当于一个方法名,但是有多个方法合并到一起的。

【 具体表现:】
1.如果参数个数相同,那么参数的类型不能相同
2.如果参数的类型相同,那么参数的个数就不能相同


1).方法重载基本使用


using System;

namespace first_space
{
    class CommonClass
    {

        static void Main()
        {
            //int sum = Special(1, 2);					// 当传递两个int时,函数支持
            string sum = Special("hello","_alien");		// 当传递两个string时,函数也支持
            Console.WriteLine("计算的结果为:{0}", sum);
            Console.ReadKey();
        }


        public static int Special(int a, int b)			// Special这个方法,可以传递两个int参数
        {
            int sum;
            sum = a + b;
            return sum;
        }

        public static string Special(string a, string b)// Special这个方法,可以传递两个string参数
        {
            string sum;

            sum = a + b;
            return sum;
        }
    }
}



2).方法重载的判断

在这里插入图片描述

【1情况:】

这种情况,函数名一样、参数个数相同、参数类型也相同。只有打印的样式不一样,不是方法重载。


【2情况:】

这种情况,函数名一样、参数个数相同,但参数类型不同。是方法重载。


【3情况:】

这种情况,函数名一样、参数个数相同、参数类型也相同。返回信息不一样,不是方法重载!


【4情况:】

这种情况,函数名一样、参数个数不相同、参数类型相同。是方法重载!



2.方法中的参数:out

out参数:在方法中,有时候我们希望返回的是多个参数,而且又包含多个不同的数据类型。如果通过原始的public static int Func(int a, int b) 这种方式定义方法,则方法名前面的int不能代表各个返回值的类型。

【 out参数解决的问题:】
1.方法结束时,最终return的多个值,不用一个一个的写出来了,只要是out 标注的形参,都默认return了
2.形参可以包含多个数据类型,方法定义的时候可以使用void func_name 代替了
3.形参传递给方法,最终执行的是原始的参数!!!



using System;

namespace out参数
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8 };
            int max = 0;
            int min = 0;
            int sum = 0;
            int avg = 0;
            bool b;
            string s;
            
            // 传递的形参如果有out,代表默认要返回的值
            // 此处虽然把max传递给方法,但代表test对max本身操作,而不是max的值操作!!!
            test(numbers, out max, out min, out sum, out avg, out b, out s);	
            Console.WriteLine(max);		
            Console.WriteLine(min);
            Console.WriteLine(sum);
            Console.WriteLine(avg);
        }
        /// <summary>
        /// 计算一个数组的最大值,最小值,总和,平均值
        /// </summary>
        /// <param name="nums">要计算的数组</param>
        /// <param name="max">多余返回的最大值</param>
        /// <param name="min"></param>
        /// <param name="sum"></param>
        /// <param name="avg"></param>
        public static void test(int[] nums, out int max, out int min, out int sum, out int avg, out bool b, out string s)
        {
            //out参数在方法内部必须为其赋值
            max = nums[0];
            min = nums[1];
            sum = 0;
            avg = 0;
            b = true;
            s = "qwe";
            for (int i = 0; i < nums.Length; i++)
            {
                if (max <= nums[i])
                {
                    max = nums[i];
                }
                if (min > nums[i])
                {
                    min = nums[i];
                }
                sum += nums[i];
            }
            avg = sum / nums.Length;

        }
    }
}






3.方法中的参数:ref

ref参数:在方法中,有时候我们将变量传递给方法,虽然只是将变量的值传递过去了。但是,有时候我们也希望将原始的变量也一起跟着改变。形参前加 ref ,代表将这个变量本身传递给方法去操作

【 ref参数解决的问题:】
1.将原始的变量经过方法的直接修改,且也能保留返回值的特性

// 未使用ref效果

int number = 10;

int n = Modify(number);
Console.WriteLine("n的值为:{0}",n);
Console.WriteLine("number的值为:{0}",number);
Console.ReadKey(true);


static int Modify(int n)
{
    n += 1;
    return n;
}


// n的值为:11
// number的值为:10


// 使用ref效果

int number = 10;

int n = Modify(ref number);			// 注意,在调用方法的时候,需要将参数前面加ref ,与方法的形参保持一致!!!
Console.WriteLine("n的值为:{0}",n);
Console.WriteLine("number的值为:{0}",number);
Console.ReadKey(true);


static int Modify(ref int n)
{
    n += 1;
    return n;
}


// n的值为:11
// number的值为:11



4.方法中的参数:params

params参数:有时候,需要传递给方法多个相同类型的参数,但又不想写死具体几个参数,则可以使用parmas设定形参。

【 params参数解决的问题:】
1.模拟数组,将相同类型的多个具体值,传递给某个方法。
2.如果方法有多个形参,parmas需要是最后一个形参。


int n = Modify(666, 1, 3, 5);			// 将666传递给了形参id,其余的数字传递给了数组n
Console.WriteLine("n的值为:{0}",n);
Console.ReadKey(true);

static int Modify(int id, params int[] n)	// parmas修饰的参数n,在最后一个
{
    int num = 0;
    for(int i = 0; i < n.Length; i++)
    {
        num += n[i];
    }
    Console.WriteLine("id的值为:{0}", id);
    return num;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-alien

您的鼓励,是我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值