C# ref 和out 的简单区别

 1 class Program
 2     {
 3        //ref 和out类似c++指针,当然也不能拿来直接当指针用,是能引用一些参数,但是不能直接作为地址来控制参数(大概意思)
 4         static void Main(string[] args)
 5         {
 6             int a, b;
 7             OutTest(out a, out b);
 8             Console.WriteLine("a={0},b={1}",a,b);
 9             //output a = 1;b = 2;
10
11             int c = 11, d = 22;
12             OutTest(out c, out d);
13             Console.WriteLine("a={0},b={1}", a, b);
14             //output c = 1;d = 2;
15
16             int m = 11, n = 22;
17             //RefTest(ref m, ref n);
18             RefTest(ref m, ref n);
19             Console.WriteLine("m={0},n={1}", m, n);
20             //output m = 22;n = 11;
21
22             Swap(m, n);
23             Console.WriteLine("m={0},n={1}", m, n);
24             //output m = 22;n = 11;
25         }
26
27         static void OutTest(out int x, out int y)
28         {
29             //方法体外可以不用对传出参数赋值
30             //方法体内,必须对传出的参数赋值,否则报错,例如:x=y;
31             //适用于多个返回值的函数
32             x = 1;
33             y = 2;
34         }
35
36         static void RefTest(ref int x, ref int y)
37         {
38
39             //方法体外,必须对参数赋值,否则报错
40             //方法体内,ref对参数可以赋值也可以不赋值
41             //适合引用原值,并对原值修改
42             int temp = x;
43             x = y;
44             y = temp;
45         }
46
47         static void Swap(int a, int b)
48         {
49             int temp = a;
50             a = b;
51             b = temp;
52         }
53     }
时间: 2024-07-30 10:19:23

C# ref 和out 的简单区别的相关文章

#define和typedef的简单区别及使用

/* ============================================================================ Name : TestDefine.c Author : lf Version : Copyright : Your copyright notice Description : #define和typedef的简单区别及使用 1 两者执行时间的差异 #define是宏定义,发生在预处理阶段,即编译之前. 它只进行简单而机械的替换,而不进

10 ref 和 out 之间的区别

(1) 两者都是按地址传递的,使用后都将改变原来的数值 (2) ref传进去的参数必须在调用前初始化,out不必 (3) ref传进去的参数在函数内部可以直接使用,而out不可 (4) ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值 (5) ref是有进有出,out是只出不进 string outString = "This is the original outString"; Console.WriteLine(outString); outMetho

Spring中Bean的命名问题及ref和idref之间的区别

一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查. Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此

[JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此时需要通过接口getBean(Class<T> requiredType)来获取Bean: 如果该Bean找不到则抛异常:NoSu

ref与out之间的区别整理 摘自与望楼http://blog.csdn.net/xiaoning8201/article/details/6893154

ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递. 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref传进去的参数必须在调用前初始化,out不必,即: int i; SomeMethod( ref i );//语法错误 SomeMethod( out i );//通过 2.ref传进去的参数在函数内部可以直接使用,而out不可: public void SomeMethod(ref int i)

(转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此时需要通过接口getBean(Class<T> requiredType)来获取Bean: 如果该Bean找不到则抛异常:NoSu

exec和source的简单区别

Linux种exec和.(Source)都可以同样来执行程序或者脚本,要区别二者区别,首先了解linux下的2种命令,内部命令和外部命令: 内部命令是特殊文件格式.def实现的. 外部命令是通过系统调用或者独立程序实现的. 其次shell执行脚本的时候有两种方式: 1.当前shell下执行 2.启动子shell在子shell种执行 当shell启动子shell时候,通过fork创建进程子进程,首先子进程会继承父进程的很多属性,而非共享,再复制了父进程数据之后,2者就基本没有关系了,简单表示就是

ref与out之间的区别整理

ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递. 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref传进去的参数必须在调用前初始化,out不必,即: int i; SomeMethod( ref i );//语法错误 SomeMethod( out i );//通过 2.ref传进去的参数在函数内部可以直接使用,而out不可: public void SomeMethod(ref int i)

Collection接口和Collections类的简单区别和讲解

这里仅仅进行一些简单的比较,如果你想要更加详细的信息话,请自己百度. 1.Collection: 是集合类的上层接口.本身是一个Interface,里面包含了一些集合的基本操作. Collection接口时Set接口和List接口的父接口 里面的常用操作有如下内容: 2.Collections Collections是一个集合框架的帮助类,里面包含一些对集合的排序,搜索以及序列化的操作. 最根本的是Collections是一个类哦. 下面是Collections类中的常用操作: 好吧,就先到这里