http://bbs.csdn.net/topics/320214035

问题:

C#里非基础类型传参数都是以引用类型的方式,
那么换句话说,out和ref除了基础类型外,实际上没有任何意义?
是不是这么个意思?

答案:

对于引用类型来说
不加out和ref,你可以修改这个对象的属性
加了out和ref,你可以使这个变量指向一个新的对象~

实例:

看看下面别人发过的你就明白了

using System.Collections.Generic;
using System.Text;
using System; namespace ConsoleApplication1
{
class Value
{
public int i = ;
}
class Program
{
static void Main(string[] args)
{
Program t = new Program();
t.first();
}
public void first()
{
int i = ;
Value v = new Value(); 
v.i = ;
second(v, i); 
Console.WriteLine(v.i);//20
}
public void second(Value v, int i)
{
i = ; 
v.i = ; 
Value val = new Value();
v = val;//此处t被指向了val的地址,和原先的v断开了联系
Console.WriteLine(v.i + " " + i + " ");//15,0
}
}
} using System.Collections.Generic;
using System.Text;
using System; namespace ConsoleApplication1
{
class Value
{
public int i = ;
}
class Program
{
static void Main(string[] args)
{
Program t = new Program();
t.first();
}
public void first()
{
int i = ;
Value v = new Value(); 此时v.i=,i=
v.i = ;
second(ref v, i); 
Console.WriteLine(v.i);//20
}
public void second(ref Value v, int i)
{
i = ; 
v.i = ; 
Value val = new Value();
v = val;
Console.WriteLine(v.i + " " + i + " ");//15,0
}
}
}

附加说明:

out修饰的参数,可以用没有被初始化变量传递给函数,但在函数内必须被赋值。
ref修饰的参数,不可以用没有被初始化的实际参数。但在函数内可以不被赋值。

C# 关于out和ref的问题的更多相关文章

  1. .NET 基础一步步一幕幕[out、ref、params]

    out.ref.params out: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组. 但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候, 我们可以考虑使用 ...

  2. out和ref详解

    要想充分理解C# out和ref,必须先明确如下两个概念(对值类型与引用类型掌握比较好的,可以跳过"一.明确两个基本概念") 一.明确两个基本概念 值类型: 定义:通过值的方式来传 ...

  3. c#编程基础之ref、out参数

    引例: 先看这个源码,函数传递后由于传递的是副本所以真正的值并没有改变. 源码如下: using System; using System.Collections.Generic; using Sys ...

  4. C#中out和ref之间的区别【转】

    首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所 ...

  5. 通过一个实例重新认识引用类型,值类型,数组,堆栈,ref

    昨天在写代码时候遇到了一个问题,百思不得其解,感觉颠覆了自己对C#基础知识的认知,因为具体的情境涉及公司代码不便放出,我在这里举个例子,先上整个测试所有的代码,然后一一讲解我的思考过程: using ...

  6. 图解C#的值类型,引用类型,栈,堆,ref,out

    C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜 ...

  7. 异步方法不能使用ref和out的解决方法

    异常处理汇总-后端系列:http://www.cnblogs.com/dunitian/p/4523006.html 应用场景==>后端现在都是用异步方法,那么分页是必不可少的,于是就有了这个问 ...

  8. [C#]浅析ref、out参数

    转载:http://www.cnblogs.com/vd630/p/4601919.html#top 按引用传递的参数算是C#与很多其他语言相比的一大特色,想要深入理解这一概念应该说不是一件容易的事, ...

  9. C#基础-out与ref字段

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  10. C# out ref 重载

    今天看极客学院wiki时候看到了out,ref的介绍,之前对这个知识点没有深刻认识,所以就写了个小测试看了下,瞬间明白了. using System; using System.Collections ...

随机推荐

  1. 1strcat/strcpy应用

    分析下列程序输出 #include<iostream> #include<string.h> using namespace std; int main() { ]=]=&qu ...

  2. 跟我一起学习ASP.NET 4.5 MVC4.0(三)

    今天我们继续ASP.NET 4.5 MVC 4.0,前两天熟悉了MVC4.0在VS11和win8下的更新,以及MVC中的基础语法和几个关键字的使用.了解了这些就可以对MVC进一步认识,相信很多人都对M ...

  3. 怎么让wordpress用sqlite3 搭建轻量级博客系统

    wordpress 默认是用mysql作为数据库支持,这个对个人站长来说还是有点麻烦了些.特别是如果以后网站备份迁移就有点事多了. 之前用django开发自己的博客感觉其实用sqlite3作为数据库插 ...

  4. 基于GUI的简单聊天室02

    服务器端 与上一篇相比,加进了线程内部类,解决多个客户端连接时,服务器无法全部响应的问题. 利用List集合来装载客户端的对象. 还需要注意全局变量的应用. /** * 相比01,加进了线程内部类,解 ...

  5. XP停服务,卡巴当后盾——卡巴斯基反病毒软件2014(一年版)

    领取地址:http://xp.kaba365.com/3180000.asp 活动说明活动时间:2014年4月9日零时起赠送产品:卡巴斯基反病毒软件2014(一年版)激活码.赠送对象:中国大陆所有XP ...

  6. 亚马逊Kindle正式进入中国

    6月7日下午消息,亚马逊Kindle今天下午4点正式发售.其中,Kindle电子阅读器和Kindle Fire平板电脑同步销售.Paperwhite售价最低849元,Kindle Fire HD售价最 ...

  7. Final阶段第1周/共1周 Scrum立会报告+燃尽图 04

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2483] 版本控制:https://git.coding.net/liuyy08 ...

  8. net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法

    解决问题方法如下: 在dos下运行net  start mysql 不能启动mysql!提示发生系统错误 5:拒绝访问!切换到管理员模式就可以启动了.所以我们要以管理员身份来运行cmd程序来启动mys ...

  9. STM32 LSM6DSL 陀螺仪数据采集

    /************************************************************************************ * STM32 LSM6DS ...

  10. Windows自动执行java脚本

    1.打包 idea 1).File-Project Structure-Arifacts 2). 3). 4). 5). 目录位于  根目录/out\artifacts\ 2.Windows定时任务 ...