Csharp/C#教程:C#引用类型作为方法的参数分析分享

本文实例分析了C#引用类型作为方法的参数。分享给大家供大家参考。具体如下:

在c#或java中,参数传递都是传递的参数本身的值,

对于值类型,传递的是值本身。

对于引用类型,定义引用类型变量的时候,一个是在栈中的变量,存储的是一个指针,指向在堆中分配的对象实例的地址,当然,如果对象没有实例化,给null值的时候例外。

传递引用类型变量的时候,传递的也是值,

但它的值是内存地址,地址指定堆中的对象。

所以当我们在方法中改变对象内容的时候,我们外围的引用类型变量操作的对象也发生了变化,因为他们指向的是同一个。

但是如果我们在操作的方法中对对象进行了新的实例化,则就会在堆中新生成一个对象,和原来的就是两个不同的对象了,在操作的方法结束,这个对象如果没有特别处理,就没有变量指向它了,它就会被销毁。

示例:

代码如下:newThread(()=>
{
try
{
StringBuildersb=null;
//addline(refsb);
addline(sb);
rtb_log.InvokeIfRequired(()=>rtb_log.AppendText(sb.ToString()+”rn”));
}
catch(Exceptionex)
{
rtb_log.InvokeIfRequired(()=>rtb_log.AppendText(ex.Message+”rn”));
}
finally{if(conn!=null&&conn.State==ConnectionState.Open)conn.Close();}
}).Start();
voidaddline(StringBuildersb)
{
if(sb==null)sb=newStringBuilder();
sb.Append(“helloworld!”);
}

调用时会发生对象空引用的异常。

原因是因为在方法中进行了对象的初始化,但是外围的sb和方法中的sb是两个不同的变量,在方法中分配了对象实例后,外围的sb指定的还是null.

如果想解除这个异常,有几个方法,第一个是对对象进行有效初始化,不要置为null值,如果这里可以直接newStringBuilder()。不要在方法内部再实例化。第二个是如果对象在外围无法初始化,像接口对象,需要延迟到方法中进行初始化的,可以使用返回值的方式或者是ref参数的方法。

例如:

代码如下:voidaddline(refStringBuildersbx)
{
if(sbx==null)sbx=newStringBuilder();
sbx.Append(“helloworld!”);
}
 
或者
代码如下:StringBuilderaddline2(StringBuildersbx)
{
if(sbx==null)sbx=newStringBuilder();
sbx.Append(“helloworld!”);
returnsbx;
}

希望本文所述对大家的C#程序设计有所帮助。

您可能感兴趣的文章:C#Main方法的传入参数研究C#从命令行读取参数的方法C#读取命令行参数的方法C#分析URL参数并获取参数和值对应列表的方法C#无限参数的写法C#传递参数到线程的方法汇总c#的params参数使用示例c#数据绑定之向查询中添加参数(.Net连接外部数据库)C#中的多线程多参数传递详解c#线程间传递参数详解c#委托把方法当成参数(实例讲解)深入解析C#中的命名实参和可选实参

标签: 引用类型 参数 方法

简单掌握Linux系统中fork()函数创建子进程的用法

Linux下C语言的fork()子进程函数用法及相关问题解析

上述就是C#学习教程:C#引用类型作为方法的参数分析分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/905879.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐