ArrayList是集合,又是类
这个怎么理解呢?
比如Add方法,把项添加到集合的末尾,而又是类,那就添加到类得末尾?啥意思
这个怎么理解呢?
比如Add方法,把项添加到集合的末尾,而又是类,那就添加到类得末尾?啥意思
解决方案 »
- 新人求助,谁能帮我看下这段代码哪儿错了
- 如何用正则表达式查找任意字符里出现?和'的表达式
- 公安系统内网的高原邮局谁接触过?要用ajax做自动发邮件的模块
- C# 控件如何随窗体变大而变大
- 请问:用<location>来允许用户不登录访问某些页面时,能否批量设置?
- 带Sqlite数据库的winform程序在其他电脑上连接不到数据库
- C#中提示"ExecuteNonQuery: CommandText"属性尚未初始化,各位大侠指点一下吧.
- 我的.net的命名空间里没有ResXResourceWriter这个类,请问怎么回事?
- 请问C#高手,C#一般用来开发什么类型的应用程序?
- Vista下使用VS2008编译.EXE的C#程序 出现错误"无法加载 DLL“api_clnt.dll”: 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志。 (异常来自 HRESULT:0x800736B1)"。
- 不能将项目中的依赖项“”复制到运行目录,因为他将改写引用“”
- 请问这个问题该怎么解决?
类是容器的范畴,ArrayList是一种类名,名字叫集合,每种类都有他的属性,如集合类可以逐个添加对象
类本身就像月饼模子,只用于创建月饼(对象或叫实例),我们只对对象操作(开吃月饼)。
作为称呼,我们有时很容易混淆,如我们叫这个学生,实际不是指整个学生的概念,而是指某个人的概念,而我们有时说“加到类的末尾”实际是"加到这个集合类的实例/对象的末尾”
list.Add("test");
ArrayList是一个类,其次,是一个集合类
list是类的一个对象,可以调用类中的方法,例如Add()
不过,好像ArrayList不建议常用了吧……建议使用List<T>
假如有三个学生,小强、小王、小李,他们是集合ArrayList的实例A中的成员,我想知道,
假如是数组的话,就是{小强,小王,小李}这种形式存在的,但是ArrayList是什么样式呢,
A是ArraList的对象,里面有构造函数,有成员方法,但小强,小王,小李是怎么样存在里面的呢?
以下为ArrayList代码,通过反编译器查看,看“private object[] _items;”
小强,小王,小李就在_items里面。
[Serializable, ComVisible(true), DebuggerDisplay("Count = {Count}"), DebuggerTypeProxy(typeof(ArrayListDebugView))]
public class ArrayList : IList, ICollection, IEnumerable, ICloneable
{
// Fields
private const int _defaultCapacity = 4;
private object[] _items;
private int _size;
[NonSerialized]
private object _syncRoot;
private int _version;
private static readonly object[] emptyArray;
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size] = value;
this._version++;
return this._size++;
}private void EnsureCapacity(int min)
{
if (this._items.Length < min)
{
int num = (this._items.Length == 0) ? 4 : (this._items.Length * 2);
if (num < min)
{
num = min;
}
this.Capacity = num;
}
}public virtual int Capacity
{
get
{
return this._items.Length;
}
set
{
if (value != this._items.Length)
{
if (value < this._size)
{
throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_SmallCapacity"));
}
if (value > 0)
{
object[] destinationArray = new object[value];
if (this._size > 0)
{
Array.Copy(this._items, 0, destinationArray, 0, this._size);
}
this._items = destinationArray;
}
else
{
this._items = new object[4];
}
}
}
}
if (value > 0)
{
object[] destinationArray = new object[value];
if (this._size > 0)
{
Array.Copy(this._items, 0, destinationArray, 0, this._size);
}
this._items = destinationArray;
}
else
{
this._items = new object[4];
}
如果只靠形象思维呢?
这就是微软的原生代码。
其实很简单。。
一个object数组(看上去像动态数据或普通的链表),增减的时候复制而已。。