1. 配列とセットの比較
1. 配列では要素の型を宣言しますが、コレクションでは要素の型を宣言しません。これは、コレクションで使用されるすべての要素がオブジェクトとして格納されるためです。配列のサイズは固定されており、増減することはできませんが、コレクション クラスは必要に応じてサイズを動的に調整できます。
2. 要素の取得方法が異なります。
2. 梱包と開梱
1. ボックス化は、値型が参照型に変換されるときに発生します。
object obj =1;
このステートメント行は、整数定数 1 をオブジェクト型の変数 obj に割り当てます。ご存知のとおり、定数 1 は値型です
。 、値の型はスタックに配置する必要があります。オブジェクトは参照型であるため、ヒープに配置する必要があります。
値の型をヒープに配置するには、ボックス化操作を実行する必要があります。
以上がボックス化のために行う操作ですが、ボックス化操作を行う際には必然的に
ヒープ上のメモリ空間を申請し、スタック上の値型データを適用したヒープのメモリ空間にコピーする必要があり
、確実にメモリとメモリを消費します。 CPUリソースの。
2. 参照型が値型に変換されるときにボックス化解除が発生します
object objValue =4;
int value =(int)objValue;
上記の 2 行のコードはボックス化操作を実行し、整数定数 4 を参照
型オブジェクト変数 objValue; を実行し、アンボックス操作を実行して、ヒープ上に格納されている参照変数 objValue を
ローカルの整数値型変数 value に格納します。
アンボックス操作の実行処理はボックス化操作の逆で、ヒープ上に格納された
参照型の値を値型に変換し、値型の変数に代入します。
3. 梱包と開梱の手順
4. テスト コードの図 (ArrayList と汎用 List<T> の比較)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace Test01
{
class Student
{
}
class Teacher
{
}
class Program
{
static void Main(string[] args)
{
TestList();
}
public static void TestList()
{
//非泛型的情况
ArrayList stus = new ArrayList();
stus.Add(new Teacher()); //存入Teacher类
for (int i = 0; i < stus.Count; i++)
{
//Student s = (Student)stus[i]; //强制转成Student类会报错
//需要写一个判断是否为Student类,是的话才能放入
if (stus[i] is Student)
{
Student s = (Student)stus[i];
}
}
//泛型List<>
List<Student> list = new List<Student>(); //只收Student类型
//list.Add(new Teacher()); //无法放入,会报错
list.Add(new Student());
List<Student> list = new List<Student>();
list.Add(new Student());
}
}
}
1. ジェネリックを含むコレクションは、特定の型変換エラーを回避するために使用され、固有のものです。
2. Teacher クラスと Student クラスをコレクションに含める必要がある場合は、ArrayList を使用できます。