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

C#中的數組作為參數傳遞所引發(fā)的問題

 更新時間:2016年03月30日 11:34:02   作者:一飛·張  
這篇文章主要介紹了C#中的數組作為參數傳遞所引發(fā)的問題 的相關資料,需要的朋友可以參考下

原則:盡可能控制對數據的修改,如果可以預測某個數據不會或不應該被改變,就要對其控制,而不要期望使用這個數據的調用者不會改變其值。

如果參數在使用過程中被意外修改,將會帶來不可預知的結果,而且這種錯誤很難被檢查到,所以我們在設計方法參數的時候,要充分考慮傳遞引用類型參數或者引用方式傳遞引用類型參數可能帶來的后果。

如果一個數據在傳遞過程中不能被改變,就要在構建這個對象的時候就使其值(字段或屬性)不被改變。

一、對于簡單的參數的控制

1、值類型參數傳遞

這種情況因為傳遞的是參數的副本,不影響原始值,不需要控制。

2、引用類型參數傳遞

a、由值類型組成的數據結構

需要將字段設置為只讀,屬性只有get。賦值只能通過構造方法進行。

b、包含引用類型字段的數據結構

這種情況是遞歸的,需要保證字段為readonly,屬性為get的同時,引用類型字段所使用類型也滿足該要求。

public class SuperClass
{
private readonly int _no;
private readonly SubClass _tag;
public int NO
{
get{ return _no;}
}
public SubClass Tag
{
get{ retirn _tag;}
}
public SuperClass(int no,SubClass tag)
{
_no=no;
_tag=tag; 
}
}
public class SubClass
{
private readonly int _field;
public int Field
{
get{ return _field;}
}
public SubClass(int field)
{
_field=field;
}
}

二、對于復雜引用類型參數傳遞的控制

所謂復雜,是參數是數組或集合類型,或者參數包含這些類型數據,這種情況下上面的方法不能保證參數數據不被修改,因為即使對象為只讀的,但是對象中的數組或集合字段(屬性)還是可以修改的。

1、集合參數(包含集合字段的引用參數也一樣)

.net 4.5以前版本可以使用不包含修改集合元素方法的接口來代替具體集合類型。例如使用IEnumerable<T>接口代替List<T>。4.5版本可以直接使用IReadOnlyCollection接口或實現該接口的集合類型。

2、數組參數

沒有好的辦法保護數組類型參數不被修改,所以盡量避免使用數組類型作為方法參數,除非用到可選參數時候。

三、理解上面的東西需要區(qū)分清楚一下概念的區(qū)別

1、值類型和引用類型的區(qū)別

2、值傳遞和引用傳遞(ref和out)的區(qū)別

3、傳遞引用類型參數和引用傳遞(ref和out)引用類型參數的區(qū)別 [這一點最容易混淆]

區(qū)別在于使用該參數過程中為該引用新建了對象的情況下,前者不影響原始值,后者影響原始值,示例:

void FunA(MyClass a)
{
a=new MyClass("A");
}
void FunB(ref MyClass a)
{
a=new MyClass("B");
}
void Test()
{
  MyClass a=new MyClass("A"); 
FunA(a); 
Print(a); //a還是原始的對象 TEST
FunB(ref a);
Print(a); //a變?yōu)樾聦ο?B
}

記住一條原則:

值類型傳遞的是值的副本,引用類型傳遞的是對象引用,所以值參數的修改不影響原始值,引用類型的修改影響原始值;值傳遞的參數構建不影響原始值,引用傳遞(ref和out)影響原始值。

以上內容是小編給大家介紹的C#中的數組作為參數傳遞所引發(fā)的問題 ,希望對大家有所幫助!

相關文章

  • Unity3d射箭小游戲實現示例

    Unity3d射箭小游戲實現示例

    這篇文章主要為大家介紹了Unity3d射箭小游戲實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • C#實現改變DataGrid某一行和單元格顏色的方法

    C#實現改變DataGrid某一行和單元格顏色的方法

    這篇文章主要介紹了C#實現改變DataGrid某一行和單元格顏色的方法,主要涉及DataGrid控件的添加與使用、數據源的綁定、單元格與行的獲取等操作。需要的朋友可以參考下
    2014-09-09
  • C#使用MathNet生成矩陣并打印矩陣元素

    C#使用MathNet生成矩陣并打印矩陣元素

    MathNet.Numerics中提供了線性代數、微積分、特殊函數、概率論、隨機函數、插值、最優(yōu)化等一系列功能,是.net技術中首選的數值計算包,本文給大家介紹了C#如何使用MathNet生成矩陣并打印矩陣元素,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2023-12-12
  • C#字符串String及字符Char的相關方法

    C#字符串String及字符Char的相關方法

    這篇文章介紹了C#字符串String及字符Char的相關方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C# 模擬瀏覽器并自動操作的實例代碼

    C# 模擬瀏覽器并自動操作的實例代碼

    這篇文章主要介紹了C# 模擬瀏覽器并自動操作的實例代碼,文中講解非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • automation服務器不能創(chuàng)建對象 解決方法

    automation服務器不能創(chuàng)建對象 解決方法

    本文主要介紹如何解決“automation服務器不能創(chuàng)建對象”錯誤,從而解決Visual Studio.Net不能正常使用的問題,需要的朋友可以參考下。
    2016-06-06
  • C# 結合 Javascript 測試獲取天氣信息

    C# 結合 Javascript 測試獲取天氣信息

    本文將介紹如何使用 C# 并結合 JavaScript 獲取天氣信息,獲取的數據來源于360瀏覽器首頁數據,對C# 獲取天氣信息示例代碼感興趣的朋友一起看看吧
    2024-08-08
  • C# 實現FTP客戶端的小例子

    C# 實現FTP客戶端的小例子

    這篇文章主要介紹了C# 如何實現FTP客戶端,文中實例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#利用PrintDocument定制打印單據的小例子

    C#利用PrintDocument定制打印單據的小例子

    這篇文章主要給大家介紹了關于C#利用PrintDocument定制打印單據的小例子,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • WPF中ImageBrush常用方式介紹

    WPF中ImageBrush常用方式介紹

    這篇文章介紹了WPF中ImageBrush的常用方式,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

柳州市| 黄石市| 洮南市| 东阳市| 黔东| 二连浩特市| 大石桥市| 集安市| 商河县| 孝义市| 慈利县| 德庆县| 定西市| 陵川县| 嘉善县| 焉耆| 南投县| 奎屯市| 浦东新区| 米脂县| 古蔺县| 黄陵县| 汕尾市| 个旧市| 达拉特旗| 琼中| 济阳县| 蒙山县| 客服| 长春市| 天台县| 聊城市| 雷州市| 灵璧县| 卢湾区| 茌平县| 合作市| 黄梅县| 建昌县| 云浮市| 白河县|