二、方法中的参数类型

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?

C# 方法中的参数类型的更多相关文章

  1. 如何将C++中的SOCKADDR_IN*参数类型转换成C#中的参数类型

    将C++中的参数类型SOCKADDR_IN*映射为C#中的IntPtr参数类型的示例代码如下: IntPtr ptrSockaddr = new IntPtr(); //ip地址 sockaddr_i ...

  2. JAVA方法中的参数用final来修饰的原因

    JAVA方法中的参数用final来修饰的原因   很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的 ...

  3. python-函数中的参数类型和可变参数解析

    最近,在学习python,天天抱着廖雪峰的教材苦练,https://www.liaoxuefeng.com/ 但廖老毕竟是如此的才华盈溢,我这等小辈真是读起来教程都有些费力. 关于python-函数中 ...

  4. ajax 方法的使用以及方法中各参数的含义

    由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...

  5. C++中的参数类型

    C++中的参数类型 数组 数组是相同类型数据的集合.引入数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数据间的联系.许多好的算法都与 ...

  6. java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同

    java  重写你可以这么理解    因为   方法名和参数类型个数相同  所以这就是重写了    然后  因为是重写  所以  返回值必须相同

  7. ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解

    转自 ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解   ArcGIS Engine中总调用IFeatureCla ...

  8. spring mvc中的控制器方法中的参数从哪里传进来?

    编写控制器方法的时候很奇怪,spring是怎么知道你控制器方法的参数类型,并且注入正确的对象呢? 比如下面这样 @RequestMapping(value="/register", ...

  9. Python中函数参数类型和参数绑定

    参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...

随机推荐

  1. Mybatis学习笔记14 - 动态sql之foreach标签

    一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...

  2. iframe高度自适应,自适应子页面高度

    html <iframe id="mainFrame" name="mainFrame" scrolling="no" src=&qu ...

  3. ubuntu 16.04下搜狗输入法不能输入中文解决

    之前一段时间正常使用的搜狗输入法突然无法输出中文(具体现象是,可以呼出搜狗输入法界面,但是候选词列表无显示),解决之后记录下来,希望能为同样遇到这个问题的人提供参考.同时附linux下常见软件崩溃问题 ...

  4. jquery中beforeSend和complete的使用 --- 提高用户体验&&设置请求头

    beforeSend方法的用户主要有下面几个: 第一:用于在发送ajax请求之前设置请求头 即作为前端,如果我们希望在发送数据之前设置请求头,就可以像下面这么做: beforeSend: functi ...

  5. Fedora14 mount出现错误时解决办法【亲测有效】

    挂载时出现了如上图所示问题,看第一条英语提示,我刚开始以为是文件权限不够,改了权限之后,依旧存在这样的问题, 于是,我上网查阅了一些资料: 在解决之前,先让我们一起来了解一下nfs: NFS最大功能就 ...

  6. pat06-图5. 旅游规划(25)

    06-图5. 旅游规划(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该 ...

  7. 谷歌添加百度翻译提示Google已将百度翻译标记为恶意程序并阻止安装,怎么办

    进入谷歌浏览器的设置, 显示高级设置——隐私设置下七个选项中的第四个选项(启用针对网上诱骗和恶意软件的防护功能)把勾去掉,然后将百度翻译的CRX拖动到chrome的安装插件页面, 修改chrome的限 ...

  8. MyEclipse 比较常用的快捷键

    Ctrl+D: 删除当前行 Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编 ...

  9. StringMVC入门案例

    1.首先要引入jar包 <!--引入beans节点--> <dependency> <groupId>org.springframework</groupId ...

  10. Maven,SVN,快捷键,数据库等

    1.Eclipse中Maven的搭建: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven 下载地址: http://maven. ...