C#学习教程之四分析

阿里 阅读:254 2021-04-01 10:03:12 评论:0

                 方法又称函数,是由对象或类执行计算或操作的成员。方法是最基本和最重要的函数成员,其他的函数成员(属性、索引器、构造函数等)都是以方法为基础来实现的,本质上都是方法。

               C#声明方法的基本形式:

               [特殊]

               [修饰符] [返回类型] [方法名]([形式参数列表]){

               [方法体];

              }

               //相关说明:【特性】----可选、【修饰符】------可选、 【返回类型】、【方法名】--------必须

               【形式参数列表】------可选、【方法体】------必须


静态方法与实例方法区别?方法是否使用static 关键字。


方法参数:

     一、按值传递参数

  值参数是通过将实参的值复制到形参,来实现按值传递到方法,也就是我们通常说的按值传递。

  方法被调用时,CLR做如下操作:

  1、在托管堆栈中为形参分配空间;

  2、将实参的值复制到形参。

  这个太常用了,按值传递参数,是复制一份,因此不影响原来参数的值。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
 
 
namespace Hello_World 
{ 
   public  class Conversion 
    { 
       public static void Main() { 
       //方法参数:值参数 
           int i = 1; 
           int j = 2; 
           int k = Plus(i, j); 
           Console.WriteLine(i);   //输出 1 
           Console.WriteLine(j);   //输出 2 
           Console.WriteLine(k);   //输出 5 
 
           Console.ReadKey(); 
 
         
       } 
       public static int Plus(int i, int j) 
       { 
           i = i + 1; 
           j = j + 1; 
           return i + j; 
       }       
 
    } 
} 

      效果截图:

 二、按引用传递参数 -- 关键字ref

  和前面的“按值传递”相对应的是按引用传递。顾名思义,这里传递的不在是值,而是引用。注意这里不是传递一个复制品了,而是将真实的自己传到方法中供方法玩弄。

  注意点:

  1、按引用传递的参数,系统不再为形参在托管栈中分配新的内存。

  2、此时,形参名其实已经成为实参名的一个别名,它们成对地指向相同的内存位置。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
 
 
namespace Hello_World 
{ 
   public  class Conversion 
    { 
       public static void Main() { 
       //方法参数:值参数 
           int i = 1; 
           int j = 2; 
           int k = Plus(ref i, ref j); 
           Console.WriteLine(i);   //输出 2 
           Console.WriteLine(j);   //输出 3 
           Console.WriteLine(k);   //输出 5 
 
           Console.ReadKey(); 
 
         
       } 
       public static int Plus(ref int i, ref int j) 
       { 
           i = i + 1; 
           j = j + 1; 
           return i + j; 
       }       
 
    } 
}
效果截图: 

     

 三、输出参数 - 关键字out

  输出参数和引用参数有一定程度的类似,输出参数可用于将值从方法内传递到方法外,实际上就相当于有多个返回值。要使用输出参数只需要将引用参数的ref关键字替换为out关键字即可。但又一点必须注意,只有变量才有资格作为输出参数,文本值和表达式都不可以,这点要谨记。

  注意两个问题:

  1、编译器允许在方法中的任意位置、任意时刻读取引用参数的值。

  2、编译器禁止在为输出参数赋值前读取它。

  这意味着输出参数的初始值基本上是没意义的,因为它在使用前要被赋予新的值。因此想通过输出参数将值传入方法的路是行不通的。

相关源代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
 
 
namespace Hello_World 
{ 
   public  class Conversion 
    { 
       static void Main(string[] args) 
       { 
           int i = 1; 
           int j = 2; 
           int k = Plus(i, out j);      //实参前也要加out关键字 
           Console.WriteLine(i);   //输出 1 
           Console.WriteLine(j);   //输出 100 
           Console.WriteLine(k);   //输出 102 
 
           Console.ReadKey(); 
       } 
       public static int Plus(int i, out int j)    //形参钱要加ref关键字 
       { 
           i = i + 1; 
           j = 100; 
           return i + j; 
       }     
 
    } 
}

效果截图:

 四、参数数组 - 关键字params

public class Program 
    { 
        static void Main(string[] args) 
        { 
            int count1 = Plus(1);       //输出 1 
            Console.WriteLine(count1); 
 
            int count2 = Plus(1, 2, 3);//输出 6 
            Console.WriteLine(count2); 
 
            int count3 = Plus();    //输出 0  参数数组本身可选,没传入值也不会出错 
            { 
                Console.WriteLine(count3); 
            } 
 
            Console.ReadKey(); 
        } 
 
        public static int Plus(params int[] values) 
        { 
            int count = 0; 
            foreach (int i in values) 
            { 
                count = count + i; 
            } 
            return count; 
        } 
    }


方法重载

             方法的签名构成:由方法的名称和它的每一个形参的类型和种类组成。

             在同一个类中,必须保证每一个方法的签名都是唯一的。但是,在同一个类中允许存在许多多个名称相同,但签名方法不同的方法,这就是方法重载。




声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号