社区
C#
帖子详情
c#中out的作用
tcdddd
2005-09-27 12:14:31
c#中传递参数除了ref还有out,看资料上介绍他们的主要区别就是,前者必须在调用函数之前初始化,后者必须在函数附值,但我觉得ref可以完成out的全部功能,如果需要的话只需在调用函数的时候初始化为null即可,那c#中加入out有什么特殊的用处吗?那位大哥给介绍一下,小弟不胜感激!
...全文
4701
31
打赏
收藏
c#中out的作用
c#中传递参数除了ref还有out,看资料上介绍他们的主要区别就是,前者必须在调用函数之前初始化,后者必须在函数附值,但我觉得ref可以完成out的全部功能,如果需要的话只需在调用函数的时候初始化为null即可,那c#中加入out有什么特殊的用处吗?那位大哥给介绍一下,小弟不胜感激!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
31 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tcdddd
2005-10-15
打赏
举报
回复
结贴喽
JackLucifer
2005-10-09
打赏
举报
回复
mark
LuckyBoy_Bob
2005-10-09
打赏
举报
回复
最简单的理解,相当C中的一个是传值,一个是传地址
Ivony
2005-10-09
打赏
举报
回复
我认为Ivony的例子里最后的Test( i )没有被声明过吧;
另外有一点:out/ref和传值参数之间可以看作函数重载的区别,但是仅仅out和ref的区别对IL是一样的,无法区分重载!
第二条神奇的分隔线下面的代码与上面的是在同一个类里面的,只不过下面的代码写在了某个函数里,我懒得虚构那个函数而已.....神奇的分隔线就是说省掉了一大堆东西.
LGame
2005-10-09
打赏
举报
回复
顶
iheshi
2005-10-08
打赏
举报
回复
http://iheshi.cnblogs.com/articles/132852.html
zhuxiaoke
2005-10-08
打赏
举报
回复
wagada()是正确的,
不行你可以写两个函数,查看IL代码,里面是一样的,我以前看过,好象都会编译成out(不是很确认)了
wagada
2005-10-08
打赏
举报
回复
我认为Ivony的例子里最后的Test( i )没有被声明过吧;
另外有一点:out/ref和传值参数之间可以看作函数重载的区别,但是仅仅out和ref的区别对IL是一样的,无法区分重载!
Ivony
2005-09-30
打赏
举报
回复
为了C#语言的编译检查,在值类型上这一点更能体现.
如:
int i;
int j = i;//Error,变量i没有被初始化。
实际上就是为了这个。
======神奇的分隔线=======
void Test( out int i )
{
int j = i;//Error,变量i没有被初始化。
}
又如:
void Test ( ref int i )
{
int j = i;//正确
}
//=========神奇的分隔线=========
int i;
Test ( i );//Error,变量i没有被初始化。
LMTZ
2005-09-30
打赏
举报
回复
①ref要求参数必须被初始化,out没有这个要求。
②ref参数可以被修改,也可以不被修改,但是out必须被赋值或者修改。
③ref参数值可以在任何时候被调用参数使用,而out参数值只能在被赋值后才可以被使用。
tcdddd
2005-09-30
打赏
举报
回复
Ivony()老兄举的例子不错,
biduan(笔端)同志说:在函数成员内部,引用参数被做为初始已赋值,输出参数视为初始未赋值
你俩是一个意思,一个给出理论,一个给出实践,不错,谢了
tcdddd
2005-09-30
打赏
举报
回复
biduan(笔端) 兄弟说:ref是引用参数,引用参数不创建新的存储位置,引用参数的值总与基础变量相同
out修饰的参数是输出参数,与那个对函数成员调用中当作“自变量”的变量在同一个位置,
参数的值总与基础变量相同
什么基础变量,自变量的,自变量是数学中的概念吧,编程当中我还没听说过呢,麻烦老兄给解释一下基础变量和自变量好吗?你这两句话兄弟是一点没看懂,我开始怀疑自己的智商了,赫赫。
「已注销」
2005-09-30
打赏
举报
回复
ref是引用参数,引用参数不创建新的存储位置,引用参数的值总与基础变量相同
out修饰的参数是输出参数,与那个对函数成员调用中当作“自变量”的变量在同一个位置,
参数的值总与基础变量相同
两个还是有区别的,上面说的赋值是一部分
在有:
在函数成员内部,引用参数被做为初始已赋值,输出参数视为初始未赋值
(2)引用参数在函数调用前必须明确赋值,输出参数在函数返回前必须已明确赋值
tcdddd
2005-09-29
打赏
举报
回复
高手在来说几句嘛
tcdddd
2005-09-28
打赏
举报
回复
另外:楼上的楼上……,不知道是几楼的楼上说:
我自己的迷惑: 当参数是对象类型的时候,不使用ref和out声明,向方法内传递的实际上是对象的引用,同样在方法内部修改对象,这时候ref和out的作用我感到很困惑。
我的理解是:
如果在函数体内不对参数开辟新的内存(即重新实例化),那么用不用out或ref是一样的(string类除外,好像string类的操作更像值类型);如果在函数内部要对参数重新实例化,就需要用ref或out了,因为如果不用ref或out的时候,参数实际上传的是对象引用的一个拷贝(就像c语言里船只真参数实际上也是传的指针的拷贝一样),对原来对象的操作就能对对象进行修改,如果要new一个实例的话,只是这个拷贝指向这块内存,而原来的对象引用还是指向原来的内存空间。况且参数的生存期只在函数体内,出了函数对他分配的内存也应该被回收。
tcdddd
2005-09-28
打赏
举报
回复
这位是肉动物同志,能给介绍一下,用out就比用ref写出来的程序更可靠,更容易维护呢??
兄弟刚接触c#两三个月,只懂皮毛!
gj121
2005-09-28
打赏
举报
回复
一楼的正确明了!
sarcophile
2005-09-28
打赏
举报
回复
楼主说说为什么不用指针?“也只不过多了...,要注意...而已”放弃了指针,不是为了写程序方便,而是为了写出来的程序更安全、健壮。
ref 和 out 也是一样,不是为了你方便或麻烦,而是让你写出来的程序更可靠,更容易维护
tcdddd
2005-09-28
打赏
举报
回复
赫赫,楼上和我想的一样,“使参数用途更明确”这才是真正的目的,我的意思是微软没必要这样做。因为本来都是很简单的东西,却使得大家不得不花很多时间去弄懂他们之间细微的差别。反正我是查了不少资料的,到最后他们之间还是那么一点差别,所以我感觉被骗了,就来论坛里和大家讨论一下,发发牢骚,赫赫。本来我发过另外一篇帖子,好像语言有点过激,第二天就被删了,5~~~~~!所以这次改的缓和了一点,谢谢大家的观点。既然微软的牛人在c#中加入out,应该有更好的道理吧,但我们要抱着怀疑的态度看待问题,以不至于太教条,尽信书则不如无书嘛。这帖子暂时还不结,欢迎高手接续给出自己的想法。
wagada
2005-09-28
打赏
举报
回复
楼上的说的有道理。举个例子:
public class ClsTest
{
public int intX;
public ClsTest()
{
intX = 0;
}
}
static void Func( ClsTest argClsTest )
{
argClsTest = new ClsTest();
argClsTest.intX = 7456;
}
static void Main(string[] args)
{
ClsTest m_cls = new ClsTest();
Func( m_cls );
Console.WriteLine( m_cls.intX );
}
返回的结果是0;如果Func使用了ref关键字,那么结果就变成了7456。
至于“用out就比用ref写出来的程序更可靠”,这个说法不对吧,out和ref都是表示参数使用引用传递的关键字,它们配合使用使参数用途更明确:ref,掉用方法前必须被初始化;out,调用方法里必须被初始化。举例就不用了吧,你很聪明的。
加载更多回复(11)
c#
基础知识巩固
c#
基础知识
中
的一些小知识点,如REF,OUT关键字,类型推断等等。
C#
中
out,ref的
作用
和区别
ref和out的区别在
C#
中
,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其
作用
也很像C
中
的指针变量。它们的区别是: 1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法
中
对其完成初始化。 2、使用ref和out时,在方法的...
C#
中
out的使用
C#
中
out的使用out的
作用
out的用法使用out注意的地方举例 out的
作用
用于一个函数传递多个返回值,这些返回值的类型可以不相同,也可以创建结构体或者一个类,或者使用静态变量达到类似的效果。 out的用法 out的使用需要在函数的定义,和函数的使用时使用out关键字 1.在书写函数时,如写方法test int test(int arg,out int value1,out double value2){ value1 = 1; value2 = 2.2; return arg; } 这样样
C#
中
的OUT
C#
中
的OUT
关于
C#
中
out参数的使用
关于
C#
中
out参数的使用 关于
C#
中
out参数的使用 out 关键字通过引用传递参数。 它让形参成为实参的别名,这必须是变量。 换而言之,对形参执行的任何操作都是对实参执行的。 它与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量。 下面介绍两个例子来加深理解out参数。 #1.使用out参数,计算一个数组的最大值,最小值,总和,平均值 using System; namespace out参数 { class Program { static void M
C#
110,556
社区成员
642,563
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章