亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

對于值類型,傳遞的是值本身。

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

傳遞引用類型變量的時候,傳遞的也是值,

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

所以當(dāng)我們在方法中改變對象內(nèi)容的時候,我們外圍 的引用類型變量操作的對象也發(fā)生了變化,因為他們指向的是同一個。

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

示例:

復(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)用時會發(fā)生 對象空引用的異常。

原因是因為在方法中進(jìn)行了對象的初始化,但是外圍的sb和方法中的sb是兩個不同的變量,在方法中分配了對象實例后,外圍 的sb指定的還是null.

如果想解除這個異常,有幾個方法,第一個是對對象進(jìn)行有效初始化,不要置為null值,如果這里可以直接new StringBuilder()。不要在方法內(nèi)部再實例化。第二個是如果對象在外圍無法初始化,像接口對象,需要延遲到方法中進(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;
}

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

相關(guān)文章

  • C#刪除文件目錄或文件的解決方法

    C#刪除文件目錄或文件的解決方法

    本篇文章是對C#中如何刪除文件目錄或文件的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#設(shè)計模式之職責(zé)鏈模式示例詳解

    C#設(shè)計模式之職責(zé)鏈模式示例詳解

    這篇文章主要給大家介紹了關(guān)于C#設(shè)計模式之職責(zé)鏈模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • WPF如何自定義ProgressBar滾動條樣式

    WPF如何自定義ProgressBar滾動條樣式

    這篇文章主要給大家介紹了關(guān)于WPF如何自定義ProgressBar滾動條樣式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用WPF具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • WPF實現(xiàn)類似ChatGPT逐字打印效果的示例代碼

    WPF實現(xiàn)類似ChatGPT逐字打印效果的示例代碼

    前一段時間ChatGPT類的應(yīng)用十分火爆,這類應(yīng)用在回答用戶的問題時逐字打印輸出,像極了真人打字回復(fù)消息,本文就來利用WPF模擬一下這種逐字打印的效果吧
    2023-08-08
  • C#創(chuàng)建Windows服務(wù)的圖文教程

    C#創(chuàng)建Windows服務(wù)的圖文教程

    本文主要介紹了C#創(chuàng)建Windows服務(wù)的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C#圖表算法之最短路徑

    C#圖表算法之最短路徑

    本文詳細(xì)講解了C#圖表算法之最短路徑,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#處理猜拳問題的簡單實例(非窗體)

    C#處理猜拳問題的簡單實例(非窗體)

    下面小編就為大家?guī)硪黄狢#處理猜拳問題的簡單實例(非窗體)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C# 判斷字符為空的6種方法的效率實測對比

    C# 判斷字符為空的6種方法的效率實測對比

    本文主要介紹了C#中判斷字符是否為空的方法,并實測對比各種方法的執(zhí)行效率,最后推薦大家使用IsNullOrEmpty,效率和易用性比較均衡。
    2016-05-05
  • C# JavaScriptSerializer序列化時的時間處理詳解

    C# JavaScriptSerializer序列化時的時間處理詳解

    這篇文章主要為大家詳細(xì)介紹了C# JavaScriptSerializer序列化時的時間處理詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#實現(xiàn)NPOI的Excel導(dǎo)出詳解

    C#實現(xiàn)NPOI的Excel導(dǎo)出詳解

    這篇文章主要介紹了C#實現(xiàn)NPOI的Excel導(dǎo)出的示例代碼,文中的實現(xiàn)過程講解詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01

最新評論