人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

第14章 數(shù)組[《.net框架程序設(shè)計(jì)》讀書(shū)筆記](méi)

第14章 數(shù)組[《.net框架程序設(shè)計(jì)》讀書(shū)筆記](méi)

更新時(shí)間:2022-09-21 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

第十四章 數(shù)組.

內(nèi)容摘要:

本章討論了數(shù)組的方方面面,對(duì)于這種常用類(lèi)型進(jìn)行深入研究。



一、 數(shù)組簡(jiǎn)介

三種類(lèi)型:一維數(shù)組、多維數(shù)組、交錯(cuò)數(shù)組(jagged aray)

l 一維數(shù)組:

Int32[] myIntegers;

myIntegers = new Int32[100];

l 多維數(shù)組:

Int32[,] myIntegers;

myIntegers = new Int32[100,100];

l 交錯(cuò)數(shù)組:交錯(cuò)數(shù)組不受CLS支持

Point[][] myPolygons = new Point[3][];

myPolygons[0] = new Point[10];

myPolygons[1] = new Point[20];

myPolygons[2] = new Point[30];

二、 System.Array

請(qǐng)參考.net framework sdk中相關(guān)描述

三、 數(shù)組轉(zhuǎn)型

l 兩數(shù)組必須有同樣的維數(shù)

l 兩數(shù)組中元素類(lèi)型間存在隱式或顯式轉(zhuǎn)換

l 除使用Array.Copy()方法外,不允許將值類(lèi)型數(shù)組轉(zhuǎn)換為其他類(lèi)型數(shù)組(Array.Copy方法會(huì)根據(jù)需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換或裝箱操作)

Array.Copy()方法能夠執(zhí)行的類(lèi)型轉(zhuǎn)換如下:

l 將值類(lèi)型轉(zhuǎn)換為引用類(lèi)型,將Int32轉(zhuǎn)換為Object

l 將引用類(lèi)型轉(zhuǎn)換為值類(lèi)型,將Object轉(zhuǎn)換為Int32

l 拓寬(widen)CLR基類(lèi)型,如將Int32轉(zhuǎn)換為Double



下面這個(gè)示例提供了一個(gè)反面教材(切勿效仿,后果自負(fù)!)了值類(lèi)型的裝換:

using System;

//自定義一個(gè)值類(lèi)型,該類(lèi)型可以與Int32進(jìn)行互轉(zhuǎn)換

struct MyAge

{

private Int32 m_nAge;



public MyAge(Int32 nAge)

{

this.m_nAge = nAge;

}



//轉(zhuǎn)換操作符

public static implicit operator MyAge(Int32 nAge)

{

return new MyAge(nAge);

}



public static explicit operator Int32(MyAge age)

{

return age.ToInt32();

}



public Int32 ToInt32()

{

return m_nAge;

}



public override string ToString()

{

return "Age : " + m_nAge;

}

}



public class ArrayTest

{

public static void Main()

{

Int32[] arrInt = new Int32[10];

for(int i = 0; i < arrInt.Length; i ++)

{

arrInt[i] = i;

}



MyAge[] arrAge = new MyAge[arrInt.Length];

Array.Copy(arrInt, arrAge, arrInt.Length);



foreach(MyAge age in arrAge)

{

Console.WriteLine(age.ToString());

}

}

}



/*運(yùn)行結(jié)果

未處理的異常: System.ArrayTypeMismatchException: 不能將源數(shù)組類(lèi)型分配給目標(biāo)數(shù)組

類(lèi)型。

at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationA

rray, Int32 destinationIndex, Int32 length)

at System.Array.Copy(Array sourceArray, Array destinationArray, Int32 length)



at ArrayTest.Main()



*/

注:1、上述代碼是不能運(yùn)行的。雖然為值類(lèi)型定義了轉(zhuǎn)換操作,但仍不滿足上述轉(zhuǎn)換條件,可見(jiàn)自定義的轉(zhuǎn)換操作不被Array.Copy()認(rèn)可。

2、上述代碼中涉及到類(lèi)型轉(zhuǎn)換操作符的應(yīng)用,請(qǐng)參考讀書(shū)筆記第九章 方法

四、 數(shù)組傳遞與返回

注意事項(xiàng):

l 為獲得對(duì)數(shù)組元素的深拷貝,要求每個(gè)元素都實(shí)現(xiàn)ICloneable接口。需要注意的是應(yīng)在適當(dāng)時(shí)候使用深拷貝操作(詳情請(qǐng)參見(jiàn)《c# primer》p185)

l 返回?cái)?shù)組引用的方法若不含數(shù)組元素應(yīng)該返回一個(gè)包含0個(gè)元素的數(shù)組而不是null

l 不在方法中返回類(lèi)型內(nèi)部的數(shù)組引用,而是重新構(gòu)造一個(gè)深拷貝的數(shù)組返回。

五、 創(chuàng)建下限非0的數(shù)組

使用Array.CreateInstance()方法:

public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds);

elementType : 要?jiǎng)?chuàng)建的 Array 的 Type。

lengths : 一維數(shù)組,它包含要?jiǎng)?chuàng)建的 Array 的每個(gè)維度的大小

lowerBounds : 一維數(shù)組,它包含要?jiǎng)?chuàng)建的 Array 的每個(gè)維度的下限(起始索引)。



六、 快速數(shù)組訪問(wèn)

要點(diǎn):

l 使用非安全的代碼

l 使用指針訪問(wèn)數(shù)組

l 可進(jìn)行非安全數(shù)組操作的元素為數(shù)值基元類(lèi)型、Boolean、枚舉類(lèi)型或字段為上述類(lèi)型的結(jié)構(gòu)類(lèi)型,或字段為上述結(jié)構(gòu)類(lèi)型的結(jié)構(gòu)類(lèi)型……(遞歸定義的結(jié)構(gòu)類(lèi)型)

如下面例程所示:

using System;



public class ArrSafe

{

unsafe public static void Main() //此處表明使用非安全代碼

{

Int32[] arr = new Int32[]{1,2,3,4,5};

fixed(Int32 *element = arr) //使用指針訪問(wèn)

{

for(Int32 i = 0; i < arr.Length; i ++)

{

Console.WriteLine(element[i]);

}

}

}

}

七、 重新調(diào)整數(shù)組的長(zhǎng)度

l 使用如下方法獲取創(chuàng)建新的數(shù)組長(zhǎng)度(請(qǐng)參見(jiàn).net framework sdk中的詳細(xì)描述)

創(chuàng)建使用從零開(kāi)始的索引、具有指定 Type 和長(zhǎng)度的一維 Array。

[C#] public static Array CreateInstance(Type, int);

創(chuàng)建使用從零開(kāi)始的索引、具有指定 Type 和維長(zhǎng)的多維 Array。維的長(zhǎng)度在一個(gè) 32 位整數(shù)數(shù)組中指定。

[C#] public static Array CreateInstance(Type, params int[]);

創(chuàng)建使用從零開(kāi)始的索引、具有指定 Type 和維長(zhǎng)的多維 Array。維的長(zhǎng)度在一個(gè) 64 位整數(shù)數(shù)組中指定。

[C#] public static Array CreateInstance(Type, params long[]);

創(chuàng)建使用從零開(kāi)始的索引、具有指定 Type 和維長(zhǎng)的二維 Array。

[C#] public static Array CreateInstance(Type, int, int);

創(chuàng)建具有指定下限、指定 Type 和維長(zhǎng)的多維 Array。

[C#] public static Array CreateInstance(Type, int[], int[]);

創(chuàng)建使用從零開(kāi)始的索引、具有指定 Type 和維長(zhǎng)的三維 Array。

[C#] public static Array CreateInstance(Type, int, int, int);



l 然后使用Array.Copy()方法,將原來(lái)的數(shù)組拷貝到新數(shù)組中

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 桐柏县| 扬州市| 灵武市| 开平市| 巨鹿县| 郸城县| 湘乡市| 文昌市| 隆回县| 垫江县| 兖州市| 西丰县| 新宾| 泉州市| 三江| 鱼台县| 沙洋县| 游戏| 永新县| 奉贤区| 仙桃市| 明星| 巴里| 和龙市| 雷州市| 红河县| 甘肃省| 陇西县| 五原县| 温宿县| 五常市| 伊宁市| 梅州市| 富锦市| 滨州市| 宝山区| 融水| 南城县| 通辽市| 玉树县| 望城县|