zoukankan      html  css  js  c++  java
  • C# 方法中的参数类型

    二、方法中的参数类型

    1. 值参数

    值参数是指不带修饰符只带数据类型的形参。

    值参数在使用值向方法传递参数时,编译程序会把实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改内存中实参的值。

    调用该方法时,系统会为每一个值类型的形参分配一个新的内存空间,然后将对应的实参的表达式运算的值复制到该内存空间中。

    示例:

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

    namespace Test
    {
        class Program
        {
            static void Swap(int x, int y)  // 定义值参数
            {
                int temp = x;
                x = y;
                y = temp;
            }
            static void Main(string[] args)
            {
                int i = 1, j = 2;
                Console.WriteLine("调用Swap之前:a = {0}、b = {1}", i, j);
                Swap(i, j);
                Console.WriteLine("调用Swap之后:a = {0}、b = {1}", i, j);
                Console.ReadLine();
            }
        }
    }

    运行结果:
     
    调用Swap之前:a = 1、b = 2
    调用Swap之后:a = 1、b = 2在调用Swap方法前后,实参变量i和j的值并没有交换,这说明在方法中更改参数的值不会影响到这个方法之外的变量。

    2. 引用型参数

    引用型参数是指带ref修饰符的形参。

    当使用引用型参数向方法传递形参时,实际上传递的是指向原变量的指针,即引用参数和原变量保存的是同一个地址,这样,在方法中对参数所做的任何修改都会改变原变量的值。

    示例:

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

    namespace Test
    {
        class Program
        {
            static void Swap(ref int x, ref int y) // 定义引用型参数
            {
                int temp = x;
                x = y;
                y = temp;
            }
            static void Main(string[] args)
            {
                int i = 1, j = 2;
                Console.WriteLine("调用Swap之前:a = {0}、b = {1}", i, j);
                Swap(ref i, ref j);  // 调用Swap方法时,要对实参使用ref修饰符
                Console.WriteLine("调用Swap之后:a = {0}、b = {1}", i, j);
                Console.ReadLine();
            }
        }
    }

    运行结果:

    调用Swap之前:a = 1、b = 2
    调用Swap之后:a = 2、b = 1在调用Swap方法前后,实参变量i和j的值进行了交换,这说明在使用形参为引用型参数的方法中,改变参数的值会影响到这个方法之外的变量。

    3. 输出参数

    输出参数是指带out修饰符的形参。

    out修饰符表示该引用参数是用于输出的,而且调用该参数时不需要对参数进行初始化。输出型参数用于传递方法返回的数据。

    与引用型参数类似,输出型参数也不开辟新的内存空间。

    示例:

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

    namespace Test
    {
        class Program
        {
            class classTest
            {
                private int a, b;
                public classTest(int a, int b)
                {
                    this.a = a;
                    this.b = b;
                }
                public int Myclass(out int c)   // 输出参数
                {
                    c = a * b;                  // out参数的返回值
                    return a + b;               // 方法的返回值
                }
            }
            static void Main(string[] args)
            {
                int d=3;  // 也可以不赋值
                int c=6;  // 也可以不赋值
                classTest classTest1 = new classTest(4, 5);
                d = classTest1.Myclass(out c);
                Console.WriteLine("执行方法得到的返回值:d = {0}",d);
                Console.WriteLine("返回参数的值:c = {0}", c);
                Console.ReadLine();
            }
        }
    }

    运行结果:
     
    执行方法得到的返回值:d = 9
    返回参数的值:c = 20使用out关键字可以根据需要返回多个值。其中d使用的是方法的返回值,而c使用的使用的是out参数的返回值。

    4. 数组型参数

    数组型参数是指带params修饰符的形参。

    如果形参表中包含了数组型参数,则该数组型参数在列表中必须位于最后,而且它必须是一维数组类型,比如,类型string[]和string[][]都可以作为数组型参数,而string[,]则不能。

    注意:数组型参数不能有ref和out修饰符。

    示例:

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

    namespace Test
    {
        class Program
        {
            static string Message(string name, params string[] args) // args为形数数组
            {
                string msg = name;
                for (int i = 0; i < args.Length; i++)
                {
                    msg += " " + args[i];
                }
                return msg;
            }
            static void Main(string[] args)
            {
                Console.WriteLine(Message("LiPing"));                      // 不传值
                Console.WriteLine(Message("LiPing", "Hi"));                // 传一个值
                Console.WriteLine(Message("LiPing", "Hi", "How are you?"));// 传多个值
                Console.ReadLine();
            }
        }
    }

    运行结果:
     
    LiPing
    LiPing Hi
    LiPing Hi How are you?

  • 相关阅读:
    linux kernel的一些参数设
    多个会话引起唯一键冲突时(enq:TX-row lock contention,mode=4)
    位图索引冲突引发TX锁争用时,则等待enq:TX-row lock conention.
    多个会话修改相同行时(enq: TX-row lock contention,mode=6)
    设置Libevent库
    Oracle INITRANS和MAXTRANS
    基于事件的开源网络库—libevent:应用介绍
    巧妙的用IN替代关联后去从
    Error creating bean with name 'com.you.user.dao.StudentDaoTest': Injection of autowired dependencies
    java.lang.IllegalStateException: Failed to load ApplicationContext
  • 原文地址:https://www.cnblogs.com/melao2006/p/4239281.html
Copyright © 2011-2022 走看看