[转] c# 的传递参数值传递与传递引用的区别,ref与out区别
值传递
C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效。
但是要注意,当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会修改对象的值,这种现象不能当做引用传递
引用传递
引用传递是对象本身传递给方法,当在方法中对对象做修改时,退出方法后修改是有效的,在C#中引用传递需要在参数类型前加关键字 ref ,但是ref 的参数变量在使用前必须被初使化,可有时通过引用传递的变量初值是没意义的,这容易产生混淆,这时在C#中有另一关键字 out ,out 与 ref 关键字使用时效果一样,但是out关键字对变量可以不初使化,但是out关键字的变量在方法中必须给分配一个值,否则编译会不通过。
class Program
{
static void Main(string[] args)
{
var v = new Values();
int i = 10;
int j;
Console.WriteLine(v.a);
Method.Update(v, ref i, out j);
Console.WriteLine(string.Format("v.a={0}", v.a));
Console.WriteLine(string.Format("i={0}", i));
Console.WriteLine(string.Format("j={0}", j));
Console.ReadKey();
}
}
public class Values
{
public int a = 10;
}
public class Method
{
public static void Update(Values v, ref int i, out int j)
{
v.a = 20;
i = 20;
j = 20;
}
}
输出值:10。
v.a= 20
i=20
j=20
[转] c# 的传递参数值传递与传递引用的区别,ref与out区别的更多相关文章
- java方法强制传递引用参数(做为返回值),改变被传递参数值。
Java传递参数分为2种: 值类型,Java里面也叫简单类型,这种参数类型的传递的是它的副本拷贝: 引用类型,传递的是对象引用地址,如果在方法内改变该参数对象属性即是对原引用对象的改变:如果不想这样传 ...
- c# 的传递参数值传递与传递引用的区别,ref与out区别
值传递 C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效. 但是要注意,当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会 ...
- Java值传递以及引用的传递、数组的传递!!
转(http://blog.csdn.net/niuniu20008/article/details/2953785) 许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递. 与其 ...
- JAVA参数没有引用传递,只有值传递
原文章地址:http://www.cnblogs.com/clara/archive/2011/09/17/2179493.html 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性, ...
- JavaScript传递变量:值传递?引用传递?
今天在看 seajs-2.2.1/src/util-events.js源码,里面有段代码不是很理解: var events = data.events = {} // Bind event seajs ...
- C++ 值传递、址传递、引用传递
一.值传递 int func(int p) 值传递会在栈中开辟一块空间 p,使得p和实参的a 同值. 此时你在函数func里面对p进行任何操作都不会对原值a产生任何影响.因为a 和p本就就是两个变 ...
- 关于intent传递对象后是传递的对象的地址还是对象的拷贝?
var intent = Intent(activity,SingleColorControlActivity::class.java); var bundle = Bundle()// bundle ...
- asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别
asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别(一) HttpUtility.UrlEncode 方法: 对 ...
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
随机推荐
- WKInterfaceTable实例化出现的一系列
让我摆一个姿势,缓慢伸出我的右手,面向swift,做"欲扶眼镜"状!!! 正题 闲话不想说了,实例化WKInterfaceTable的时候会报错,实例化代码如下: let row ...
- [转载][QT][SQL]sql学习记录4_sqlite约束
转载自:定义以及示例请见 : http://www.runoob.com/sqlite/sqlite-constraints.html SQLite 约束 约束是在表的数据列上强制执行的规则.这些是用 ...
- POJ2987 Firing 【最大权闭合图】
POJ2987 Firing Description You've finally got mad at "the world's most stupid" employees o ...
- Tornado之架构概述图
一.Tornado之架构概述图 二.Application类详细分析: #!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "S ...
- Tornado部署与运行
运行多个Tornado实例 网页响应不是特别的计算密集型处理多个实例充分利用 CPU多端口怎么处理4.使用Supervisor监控Tornado进程安装(注意看是否需要指定使用python2版本) s ...
- cargo rust 包管理工具
1. 安装 yum 或者官方提供的包,比较简单 curl -sSL https://static.rust-lang.org/rustup.sh | sh 2. 帮助命令 cargo --help U ...
- IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件
IMP-00013: only a DBA can import a file exported by another DBA 处理方法:在给目标环境的用户赋予dba权限,或者细粒度一些,赋予imp_ ...
- jsp转向,exception
jsp要像servlet那样转向时可以得 <jsp:forward page="Counter.jsp"> <jsp:param name="parma ...
- bzoj1087互不侵犯King(状压)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1087 简单的状压dp.但是wa了好几发.注意long long. 注意0和0的连边.而且不能 ...
- Linq 分组(group by)后列变行
表一: 表二: 已知表一的List,想得到表二的结果: var query = from c in t.AsEnumerable() group c by new { pingming = c.Fie ...