.net中以传引用的方式 向方法中传参数

CLR(CommonLanguageRuntime)公共语言运行时,允许以传引用而非传值的方式传递参数。在C#中,这是用关键字 out 和ref来做到的。

从CLR角度来看,这两个关键字没什么区别,生成的IL代码都是一样的。但是C#编译器是将这两个关键字区别对待的,而且这个区别决定了由哪个方法负责初始化所引用的对、象。如果方法的参数用out关键字来标记,表明不指望调用者在调用方法之前初始化对象。被调用的方法不能够读取out标记的参数的值,而且在函数返回前必须给该参数写入值。

相反,使用ref标记传入的参数,调用者必须在调用方法前初始化参数值,被调用的方法可以读取/写入值。

对于out和ref,引用类型和值类型的行为迥然有异。先看一看 为值类型使用out和ref:

public  sealed class progran{

public static void Main(){

int32 x;//x没有实例化初始值

GetVal(out x);

} 

private static void GetVal(out int32 V){

v=10;//该方法返回值前必须给V初始化值

}

}
public  sealed class progran{

public static void Main(){

int32 x;
x=100;//x必须给初始值
GetVal(ref x);

} 

private static void GetVal(ref int32 V){

int32 obj;
obj=V;//该方法可以读取并使用参数值
V=obj+10;//该方法可以修改,写入值

}

}
时间: 2024-08-08 13:54:28

.net中以传引用的方式 向方法中传参数的相关文章

在vs2015中使用附加进程的方式调试IIS中的页面

发布网站至IIS-附加到进程调试 Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务. 一:发布项目. 1.点击启动项目右键发布,选择自定义. 2.填写配置文件名称 3.选择File System,选择目标路径. 4.选择Debug模式 5.最后预览点击发布. 二:配置IIS. 1Windows7中IIS的配置 开始==>控制面板==>程序和功能 如下图所示: 点击[打开或关闭Win

jq中连续删除的操作;以及js中连续删除的操作;jq方法中如何写循环。

jq中连续删除的操作 采用的是用父节点的来进行删除,不能直接利用$(XXX)来回去父节点来进行删除.存在逻辑上的错误. js中的连续删除 和jq中删除是一个道理,同样实在利用父节点去删除子节点.获取当前单击元素的父节点.利用来删除子节点. 至于寻找祖先中的哪一个,就要看,要删除的什么内容了. jq方法中如何写循环. jq中写循环,一般应该用each进行循环.但是利用for循环也是可以.但是有一个需要注意的地方.for循环不能在jq中的方法中出现,不会执行.也就是说,在jq中需要去写一个新的方法,

本地向服务器上传文件的方式-FTP工具上传

笔者负责的一个研究生会的项目,向服务器端传项目代码,用到了FTP工具,这里总结下: FTP方式的步骤: 1,服务器端配置好FTP,(若没有,可网上下载一个服务器端安装的FTP).停止服务后,可以配置账户名称,账户密码,端口(21),欢迎信息,退出信息,及客户端的权限,具体如下图, 2 客户端的FTP配置,笔者使用的FlashEXP5,曾经也用过8UFTP,感觉前者更专业点.具体步骤是点击连接>quick connect 3输入与服务器FTP一致的账户名和密码及IP即可,端口默认21,点击conn

函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在屏幕上

#include <stdio.h> void fun(char *s, int a, double f) { /**********found**********/ FILE* fp;//定义文本文件类型 char ch; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", s, a, f); fclose(fp); fp = fopen("file1.txt&q

Java中传值和传引用

今天看了Java中的传值和传引用,对于这一块开始的时候不太能理解,通过查阅其他几篇blog,将自己的理解记录下来: 比较好的几篇blog:http://blog.csdn.net/houpuhope/article/details/7449377; 首先对于传值和传引用需要有一个初步的理解就是,通过传值的方式传进来的参数修改了,对原变量并没有什么影响: 而,通过传引用的方式修改的,原变量值也跟着改变.下面进行详细的解析: 1.对于基本类型Java是按照传值传递的: public class Te

关于Java传值&amp;传引用的一道题

<pre name="code" class="java">public class JavaTestDemo1 { public static void main(String[] args) { Integer v1 = new Integer(1); Integer v2 = v1; doSomething(v2); System.out.println(v2); System.out.println(v1 == v2); System.out.p

asp 调用 vb(activex dll) ,参数传递(传引用)需要注意

今天上午测试 vb 与 c(dll) 之间交互,传递参数的时候,没遇到什么太大的问题. 下午在asp中调用vb(activex dll)时, 在asp代码中传参数到 vb(dll)中时,遇到问题了. 上午写 vb 与 c(dll)的时候,vb 传参数到c(dll)的时候,默认就传引用, 除非在vb中显示的使用 byval. 下午写 asp 与 vb(dll)的时候,asp传参数到 vb(dll)的时候,默认传值,而我需要按引用传过去. 在 vb(dll)中,我显示的申请参数的类型: byref

java传递参数是传值还是传引用

这个问题,网上一查越看越迷糊,纠结完了先总结下 先看个栗子: 1 public class Example { 2  3     public void change(String str1, StringBuffer sbr1, char[] ch1, int a) { 4         str1 = "world"; 5         sbr1.append("world"); 6         ch1[0] = 'g'; 7     } 8  9    

深刻理解C#的传值调用和传引用调用

传值调用和传引用调用是几乎所有主流语言都会涉及到的问题,下面我谈谈我对C#中传值调用和传引用调用的理解. 1. 一般对C#中传值调用和传引用调用的理解 如果传递的参数是基元类型(int,float等)或结构体(struct),那么就是传值调用. 如果传递的参数是类(class)那么就是传引用调用. 如果传递的参数前有ref或者out关键字,那么就是传引用调用. 验证示例的代码如下: view sourceprint? 01    using System; 02 03    public cla