.Net基础07

方法的调用

namespace _01方法的调用
{
    class Program
    {
        //字段 属于类的字段 (C#中没有全局变量这一说)
        public static int _number = 10;//使用静态变量模拟 全局变量
        static void Main(string[] args)
        {
            int a = 3;
            int res = Test(a);//传参 a是实参
            Console.WriteLine(res);
            Console.WriteLine(a); //输出 3
            Console.WriteLine(_number);  //输出 10
            Console.ReadKey();
        }
        public static int Test(int a)  //a是形参
        {
            Console.WriteLine(_number); //输出 10
            a = a + 5;
            return a;
        }
        public static void TestTwo() //该方法未调用
        {
            Console.WriteLine(_number); //说明_number 可以被访问到
        }
    }
}
结果.png

我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,管Test()函数称之为被调用者。

  • 如果被调用者想要得到调用者的值:
    1)、传递参数。
    2)、使用静态字段来模拟全局变量。

  • 如果调用者想要得到被调用者的值:
    1)、返回值

  • 不管是实参还是形参,都是在内存中开辟了空间的。

  • 方法的功能一定要单一。
    GetMax(int n1,int n2)
    方法中最忌讳的就是出现提示用户输入的字眼。

  • 小练习

static void Main(string[] args)
{
    //写一个方法 判断一个年份是否是闰年
    bool result = isRunNian(Convert.ToInt32(Console.ReadLine()));
    Console.WriteLine(result);
    Console.ReadKey();
}

/// <summary>
/// 判断给定的年份是否是闰年
/// </summary>
/// <param name="year">年份</param>
/// <returns>结果</returns>
public static bool isRunNian(int year)
{
    bool b = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
    return b;
}
结果.png

out参数

如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组
但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,
我们可以考虑使用out参数。
out参数就侧重于在一个方法中可以返回多个不同类型的值。

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

namespace _03out参数
{
    class Program
    {
        static void Main(string[] args)
        {
            //写一个方法 求一个整数数组中的 最大值最小值 总和 平均值
            int[] numbers = {1,3,4,5,74,43,23,21,5};

            int[] res = GetMaxMinSumAvg(numbers);
            Console.WriteLine("最大值{0},最小值{1},总和{2},平均值{3}", res[0], res[1], res[2], res[3]);

            int max = 0;
            int min = 0;
            int sum = 0;
            int avg = 0;
            Test(numbers, out max, out min, out sum, out avg);
            Console.WriteLine("使用了out 参数 最大值{0},最小值{1},总和{2},平均值{3}", max, min, sum, avg);

            Console.ReadKey();
        }

        /// <summary>
        /// 求一个 数组中的 最大值最小值 总和 平均值
        /// </summary>
        /// <param name="nums">最大值最小值 总和 平均值 一次排列的数组</param>
        /// <returns>结果数组</returns>
        public static int[] GetMaxMinSumAvg(int[] nums)
        {
            int[] result = new int[4];
            //假设 res[0] 最大值 res[1] 最小值 res[2] 总和 res[3] 平局值
            result[0] = nums[0];
            result[1] = nums[0];
            result[2] = 0;

            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] > result[0])
                {
                    result[0] = nums[i];
                }
                if (nums[i] < result[1])
                {
                    result[1] = nums[i];
                }
                result[2] += nums[i];
            }
            result[3] = result[2] / nums.Length;

            return result;    
        }

        /// <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 参数要求在方法的内部必须为其赋值
            max = nums[0];
            min = nums[0];
            sum = 0;

            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] > max)
                {
                    max = nums[i];
                }
                if (nums[i] < min)
                {
                    min = nums[i];
                }
                sum += nums[i];
            }
            avg = sum / nums.Length;
        }
    }
}
结果.png

ref参数

能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
ref参数要求在方法外必须为其赋值,而方法内可以不赋值。

例子.png
运行结果.png
  • 小练习
class Program
{
    static void Main(string[] args)
    {
        //使用方法来交换两个 int类型的变量
        int a = 10;
        int b = 30;
        ExChange(ref a, ref b);

        Console.WriteLine("a = {0}, b = {1}",a ,b);
        Console.ReadKey();
        
    }
    public static void ExChange(ref int a, ref int b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
}
结果.png

params可变参数

将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
params可变参数必须是形参列表中的最后一个元素。

例子.png

方法的重载

概念:方法的重载指的就是方法的名称相同给,但是参数不同
参数不同,分为两种情况
1)、如果参数的个数相同,那么参数的类型就不能相同。
2)、如果参数的类型相同,那么参数的个数就不能相同。
方法的重载跟返回值没有关系。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(M(10, 20));
        Console.WriteLine(M(10, 20, 30));
        Console.WriteLine(M(2.0, 4.6));
        Console.WriteLine(M("WQE", "DF"));

        Console.ReadKey();
    }
    public static int M(int n1, int n2)
    {
        return n1 + n2;
    }
    public static int M(int n1, int n2, int n3)
    {
        return n1 + n2 + n3;
    }
    public static double M(double n1, double n2)
    {
        return n1 + n2;
    }
    public static string M(string s1, string s2)
    {
        return s1 + s2;
    }
结果.png

往期回顾

图文无关.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容