最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#引用類型作為方法的參數(shù)分析

 更新時(shí)間:2014年11月06日 14:57:17   投稿:shichen2014  
這篇文章主要介紹了C#引用類型作為方法的參數(shù)分析,以實(shí)例的形式較為詳細(xì)的分析了參數(shù)的傳值問題,需要的朋友可以參考下

本文實(shí)例分析了C#引用類型作為方法的參數(shù)。分享給大家供大家參考。具體如下:

在c#或java中,參數(shù)傳遞都是傳遞的參數(shù)本身的值,

對(duì)于值類型,傳遞的是值本身。

對(duì)于引用類型,定義引用類型變量的時(shí)候,一個(gè)是在棧中的變量,存儲(chǔ)的是一個(gè)指針,指向在堆中分配的對(duì)象實(shí)例的地址,當(dāng)然,如果對(duì)象沒有實(shí)例化,給null值的時(shí)候例外。

傳遞引用類型變量的時(shí)候,傳遞的也是值,

但它的值是內(nèi)存地址,地址指定堆中的對(duì)象。

所以當(dāng)我們?cè)诜椒ㄖ懈淖儗?duì)象內(nèi)容的時(shí)候,我們外圍 的引用類型變量操作的對(duì)象也發(fā)生了變化,因?yàn)樗麄冎赶虻氖峭粋€(gè)。

但是如果我們?cè)诓僮鞯姆椒ㄖ袑?duì) 對(duì)象進(jìn)行了新的實(shí)例化,則就會(huì)在堆中新生成一個(gè)對(duì)象,和原來的就是兩個(gè)不同的對(duì)象了,在操作的方法結(jié)束,這個(gè)對(duì)象如果沒有特別處理,就沒有變量指向它了,它就會(huì)被銷毀。

示例:

復(fù)制代碼 代碼如下:
new Thread(() =>
{
try
{
StringBuilder sb = null;
//addline(ref sb);
addline(sb);
rtb_log.InvokeIfRequired(()=> rtb_log.AppendText(sb.ToString()+"\r\n"));
}
catch (Exception ex)
{
rtb_log.InvokeIfRequired(() => rtb_log.AppendText(ex.Message + "\r\n"));
}
finally { if (conn != null && conn.State == ConnectionState.Open) conn.Close(); }
}).Start();
void addline( StringBuilder sb)
{
if (sb == null) sb = new StringBuilder();
sb.Append("hello world!");
}

調(diào)用時(shí)會(huì)發(fā)生 對(duì)象空引用的異常。

原因是因?yàn)樵诜椒ㄖ羞M(jìn)行了對(duì)象的初始化,但是外圍的sb和方法中的sb是兩個(gè)不同的變量,在方法中分配了對(duì)象實(shí)例后,外圍 的sb指定的還是null.

如果想解除這個(gè)異常,有幾個(gè)方法,第一個(gè)是對(duì)對(duì)象進(jìn)行有效初始化,不要置為null值,如果這里可以直接new StringBuilder()。不要在方法內(nèi)部再實(shí)例化。第二個(gè)是如果對(duì)象在外圍無法初始化,像接口對(duì)象,需要延遲到方法中進(jìn)行初始化的,可以使用返回值的方式或者是ref參數(shù)的方法。

例如:

復(fù)制代碼 代碼如下:
void addline(ref StringBuilder sbx)
{
if (sbx == null) sbx = new StringBuilder();
sbx.Append("hello world!");
}

 
或者
復(fù)制代碼 代碼如下:
StringBuilder addline2(StringBuilder sbx)
{
if (sbx == null) sbx = new StringBuilder();
sbx.Append("hello world!");
return sbx;
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C# 實(shí)現(xiàn)簡(jiǎn)單打印的實(shí)例代碼

    C# 實(shí)現(xiàn)簡(jiǎn)單打印的實(shí)例代碼

    C# 實(shí)現(xiàn)簡(jiǎn)單打印的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • C#泛型的使用案例

    C#泛型的使用案例

    這篇文章介紹了C#泛型的使用案例,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • DevExpress之ChartControl創(chuàng)建Drill-Down樣式的Title實(shí)例

    DevExpress之ChartControl創(chuàng)建Drill-Down樣式的Title實(shí)例

    這篇文章主要介紹了DevExpress之ChartControl創(chuàng)建Drill-Down樣式的Title實(shí)現(xiàn)方法,以實(shí)例形式講述了創(chuàng)建Drill-Down樣式的Title原理與實(shí)現(xiàn)過程,需要的朋友可以參考下
    2014-10-10
  • 基于NPOI用C#開發(fā)的Excel以及表格設(shè)置

    基于NPOI用C#開發(fā)的Excel以及表格設(shè)置

    這篇文章主要為大家詳細(xì)介紹了基于NPOI用C#開發(fā)的Excel以及表格設(shè)置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C# List<T> Contains<T>()的用法小結(jié)

    C# List<T> Contains<T>()的用法小結(jié)

    本篇文章主要是對(duì)C#中List<T> Contains<T>()的用法進(jìn)行了總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • C# DataTable的詳細(xì)用法分享

    C# DataTable的詳細(xì)用法分享

    在項(xiàng)目中經(jīng)常用到DataTable,如果DataTable使用得當(dāng),不僅能使程序簡(jiǎn)潔實(shí)用,而且能夠提高性能,達(dá)到事半功倍的效果,現(xiàn)對(duì)DataTable的使用技巧進(jìn)行一下總結(jié)
    2013-11-11
  • c#語言使用Unity粒子系統(tǒng)制作手雷爆炸

    c#語言使用Unity粒子系統(tǒng)制作手雷爆炸

    這篇文章主要為大家介紹了Unity的粒子系統(tǒng)由粒子發(fā)射器、粒子動(dòng)畫器、粒子渲染器組成,通過使用一或兩個(gè)紋理多次繪制,創(chuàng)造一個(gè)混沌的效果,通過復(fù)習(xí)粒子系統(tǒng)做一個(gè)手雷和實(shí)彈投擲現(xiàn)場(chǎng)
    2022-04-04
  • C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字的效果實(shí)例

    C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字的效果實(shí)例

    這篇文章主要給大家介紹了關(guān)于C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字效果的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 簡(jiǎn)介C#讀取XML的兩種方式

    簡(jiǎn)介C#讀取XML的兩種方式

    在程序中訪問進(jìn)而操作XML文件一般有兩種模型,分別是使用DOM(文檔對(duì)象模型)和流模型,使用DOM的好處在于它允許編輯和更新XML文檔,可以隨機(jī)訪問文檔中的數(shù)據(jù),可以使用XPath查詢
    2013-03-03
  • Unity實(shí)現(xiàn)游戲存檔框架

    Unity實(shí)現(xiàn)游戲存檔框架

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)游戲存檔框架,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01

最新評(píng)論

静乐县| 涿鹿县| 纳雍县| 长沙县| 忻州市| 邵阳市| 区。| 屏东市| 尚志市| 永登县| 南川市| 高雄市| 通州市| 江西省| 枣阳市| 乐清市| 华容县| 新平| 宁南县| 彭水| 鄂尔多斯市| 象州县| 龙里县| 雷山县| 尉氏县| 怀化市| 依兰县| 噶尔县| 分宜县| 吴桥县| 南部县| 广南县| 安图县| 当涂县| 北辰区| 广水市| 微博| 华宁县| 乡宁县| 郯城县| 石台县|