C#<基础知识>学习笔记(6)——【方法/函数】

(一)方法/函数的调用问题

被调用函数想要得到调用者的值:
  1. 传入参数;
  2. 使用静态字段来模拟全局变量;

C#中没有全局变量这个概念,但是使用静态字段来模拟全局变量;

在类和函数之间:

//字段, 属于类的字段
public static int _number = 10;
调用者得到被调用者的值
  1. 返回值;
  2. 使用out参数(详见下面)
  3. 数组例外

被调用函数的参数是形参,调用者传入的是实参;但是都是在内存中开辟空间的;

注意:
  1. 方法的功能一定要单一;
  2. 方法中最忌讳提示用户的字眼;因为这个东西只能用在控制台;

(二)out、ref 和 Params 参数的使用

(1)out参数的使用

一个方法中,返回多个相同类型的值,可以使用数组;当需要返回多个不同类型的值时,考虑使用out参数;

public static void Main(string[] args)
{
	int[] nums = {1, 2, 3, 78, 56, 45, 85};
	int max = 0; 	// 可以先不赋值
	int min = 0;	// 可以与被调用函数不同
	int sum = 0;
	int avg = 0;
	Test(nums, out max, out min, out sum, out avg);
	Console.WriteLine(max, min, sum, avg);
}


// 带out的参数是多余返回的值
public static viod Test(int[], 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;//不需要return
}

(2)ref参数的使用

ref 参数实现类似C++中取地址的作用,这样,在被调用函数中的操作,都是在实参上进行的操作,不用返回值,就可以在实参上发生变化;

要求方法外必须赋值,方法内可以不赋值;

 static void Main(string[] args)
        {
            int x = 0, y = 0;
            Console.WriteLine("请输入两个数字:");
            try
            {
                x = Convert.ToInt32(Console.ReadLine());
                y = Convert.ToInt32(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("输入错误!");
                return;
            }
            Exchange(ref x, ref y);
            Console.WriteLine(x);
            Console.WriteLine(y);

            
        }
        /// <summary>
        /// 这个函数实现交换两个int型的变量
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        public static void Exchange(ref int a, ref int b)
        {
            int temp = a;
            a = b;
            b = temp;
        }

(3)params参数的使用

params是可变参数;将实参列表中,与可变参数数组类型一致的元素都当做数组的元素处理;

 static void Main(string[] args)
 {
      Test("zhangSan", 99, 88, 56); 
 }
 // 下面的参数,既可以传数组,也可以传入多个int
 // 可变参数数组必须是形参列表中的最后一个;      
 public static void Test(string name, params int[] score)
 {
      int sum = 0;
      for (int i = 0; i < score.Length; i++)
      {
           sum += score[i];
      }
      Console.WriteLine("{0}的成绩是{1}", name, sum);
 }
  • 可变参数数组必须是形参列表中的最后一个;
  • 可变参数数组不能同时使用多个;

(三)方法的重载

方法的重载指的是方法的名称相同,但是参数不同;这样可以方便调用;在调用的时候,可以根据传入参数的差别调用不同的方法;

实际上Console.WritelLine()这个就使用了重载,这样可以打印不同类型的数据;

注意:
  1. 如果参数个数相同,则参数的类型不可相同;
  2. 参数类型相同,则参数的个数不能相同;
  3. 方法的重载和返回值没有关系;

(四)方法的递归

即是方法自己调用自己

注意:
  • 要有递归体;
  • 要有跳出递归的条件;不能无止境调用;
发布了34 篇原创文章 · 获赞 0 · 访问量 1000

猜你喜欢

转载自blog.csdn.net/forever_008/article/details/104046503
今日推荐