文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
.NET频道
 资讯动态   ASP.NET   C#   ADO.NET   VC.NET   VB.NET   .NET Framework   WebService
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> C# >> 文章正文
c#中通过值和引用传递参数c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数
c#中通过值和引用传递参数
c#中通过值和引用传递参数c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数
c#中通过值和引用传递参数c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数

    在 C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请使用 ref 或 out 关键字。为简单起见,本主题的示例中只使用了 ref 关键字。有关 ref 和 out 之间的差异的信息,请参见、使用 ref 和 out 传递数组。

本主题包括下列章节:

  • 传递值类型参数
  • 传递引用类型参数

它还包括以下示例:

示例 演示 是否使用 ref 或 out
1 通过值传递值类型
2 通过引用传递值类型
3 交换值类型(两个整数)
4 通过值传递引用类型
5 通过引用传递引用类型
6 交换引用类型(两个字符串)

传递值类型参数

值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数值,必须使用 ref 或 out 关键字通过引用传递该参数。为了简单起见,以下示例使用 ref。

示例 1:通过值传递值类型

下面的示例演示通过值传递值类型参数。通过值将变量 myInt 传递给方法 SquareIt。方法内发生的任何更改对变量的原始值无任何影响。

// PassingParams1.cs 
using System;
class PassingValByVal
...{
    static void SquareIt(int x)
    // The parameter x is passed by value.
    // Changes to x will not affect the original value of myInt.
    ...{
        x *= x;
        Console.WriteLine("The value inside the method: {0}", x);
    }
    public static void Main()
    ...{
        int myInt = 5;
        Console.WriteLine("The value before calling the method: {0}",
           myInt);
        SquareIt(myInt);   // Passing myInt by value.
        Console.WriteLine("The value after calling the method: {0}",
           myInt);
    }
}

输出

The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 5

代码讨论

变量 myInt 为值类型,包含其数据(值 5)。当调用 SquareIt 时,myInt 的内容被复制到参数 x 中,在方法内将该参数求平方。但在 Main 中,myInt 的值在调用 SquareIt 方法之前和之后是相同的。实际上,方法内发生的更改只影响局部变量 x。

示例 2:通过引用传递值类型

下面的示例除使用 ref 关键字传递参数以外,其余与“示例 1”相同。参数的值在调用方法后发生更改。

// PassingParams2.cs 
using System;
class PassingValByRef
...{
    static void SquareIt(ref int x)
    // The parameter x is passed by reference.
    // Changes to x will affect the original value of myInt.
    ...{
        x *= x;
        Console.WriteLine("The value inside the method: {0}", x);
    }
    public static void Main()
    ...{
        int myInt = 5;
        Console.WriteLine("The value before calling the method: {0}",
           myInt);
        SquareIt(ref myInt);   // Passing myInt by reference.
        Console.WriteLine("The value after calling the method: {0}",
           myInt);
    }
}

输出

The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 25

代码讨论

本示例中,传递的不是 myInt 的值,而是对 myInt 的引用。参数 x 不是 int 类型,它是对 int 的引用(本例中为对 myInt 的引用)。因此,当在方法内对 x 求平方时,实际被求平方的是 x 所引用的项:myInt。

示例 3:交换值类型

更改所传递参数的值的常见示例是 Swap 方法,在该方法中传递 x 和 y 两个变量,然后使方法交换它们的内容。必须通过引用向 Swap 方法传递参数;否则,方法内所处理的将是参数的本地副本。以下是使用引用参数的 Swap 方法的示例:

static void SwapByRef(ref int x, ref int y)
...{
    int temp = x;
    x = y;
    y = temp;
}

调用该方法时,请在调用中使用 ref 关键字,如下所示:

SwapByRef (ref i, ref j);
 

[1] [2] 下一页  


[1] [2] 下一页

c#中通过值和引用传递参数c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 进入论坛讨论

    相关文章
    一个相当独立的通用分页控件c#源码
    病毒及流氓软件自我复制的简单实现
    C#中Dispose和Close的区别
    详细解说C#里使用指针
    C#:从资源文件里加载文件
    利用C#实现分布式数据库查询
    C#.NET windows控件实现水印
    C#纯数学方法递归实现货币数字转换中文
    c#中什么情况下用Convert.ToInt32?
    是Attribute,还是Property?
    使用 Flex 上传文件
    基于.Net平台唯一运行实例C#代码实现
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 本站原创文章,转载时请注明出自文谷及作者姓名
    ③在本网BBS上发表言论者,文责自负。
    ④如您因版权等问题需要与本网联络,请在30日内联系 。
    c#中通过值和引用传递参数c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数
    c#中通过值和引用传递参数c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数2007-1-28 12:09:24c#中通过值和引用传递参数

    全站热点
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷论坛
    Tel: 0577-65690019      E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2008 wengu.com 文谷 All Rights Reserved
    浙ICP备05000327号