📅  最后修改于: 2023-12-03 15:40:47.965000             🧑  作者: Mango
IList 接口是一个定义了基本操作的集合。这些操作包括:添加、移除、获取和设置元素。IList 接口和其实现类提供了一种方便的方式来存储、访问和操作列表数据。
本篇文章将介绍如何使用 IList 接口来创建一个 C# 程序。该程序将演示如何创建一个 IList 实现类,添加元素、删除元素,并遍历列表。
我们首先需要创建一个 IList 实现类。这个类将继承 IList 接口,并实现其中的方法。下面是代码示例:
using System.Collections;
class MyList : IList
{
private object[] _data = new object[10];
private int _count = 0;
public int Add(object value)
{
if (_count < _data.Length)
{
_data[_count] = value;
_count++;
return _count - 1;
}
else
{
throw new System.InvalidOperationException("List is full");
}
}
public void Clear()
{
_count = 0;
}
public bool Contains(object value)
{
for (int i = 0; i < _count; i++)
{
if (_data[i] == value)
{
return true;
}
}
return false;
}
public int IndexOf(object value)
{
for (int i = 0; i < _count; i++)
{
if (_data[i] == value)
{
return i;
}
}
return -1;
}
public void Insert(int index, object value)
{
if (index >= 0 && index < _count)
{
if (_count < _data.Length)
{
for (int i = _count - 1; i >= index; i--)
{
_data[i + 1] = _data[i];
}
_data[index] = value;
_count++;
}
else
{
throw new System.InvalidOperationException("List is full");
}
}
else if (index == _count)
{
Add(value);
}
else
{
throw new System.ArgumentOutOfRangeException("Index out of range");
}
}
public bool IsFixedSize
{
get { return false; }
}
public bool IsReadOnly
{
get { return false; }
}
public void Remove(object value)
{
int index = IndexOf(value);
if (index != -1)
{
RemoveAt(index);
}
}
public void RemoveAt(int index)
{
if (index >= 0 && index < _count)
{
for (int i = index + 1; i < _count; i++)
{
_data[i - 1] = _data[i];
}
_count--;
_data[_count] = null;
}
else
{
throw new System.ArgumentOutOfRangeException("Index out of range");
}
}
public object this[int index]
{
get
{
if (index >= 0 && index < _count)
{
return _data[index];
}
else
{
throw new System.ArgumentOutOfRangeException("Index out of range");
}
}
set
{
if (index >= 0 && index < _count)
{
_data[index] = value;
}
else
{
throw new System.ArgumentOutOfRangeException("Index out of range");
}
}
}
public void CopyTo(Array array, int index)
{
for (int i = 0; i < _count; i++)
{
array.SetValue(_data[i], index + i);
}
}
public int Count
{
get { return _count; }
}
public bool IsSynchronized
{
get { return false; }
}
public object SyncRoot
{
get { return this; }
}
public IEnumerator GetEnumerator()
{
for (int i = 0; i < _count; i++)
{
yield return _data[i];
}
}
}
该类实现了 IList 接口中的全部方法,并声明了私有的 _data
数组来存储列表数据。
我们可以通过以下代码示例来测试 MyList
类:
using System;
class Program
{
static void Main()
{
MyList list = new MyList();
list.Add("Hello, ");
list.Add("world");
list.Add("!");
Console.Write("List contains:");
foreach (object item in list)
{
Console.Write(" " + item);
}
Console.WriteLine();
list.Insert(1, "C#");
Console.Write("List contains:");
foreach (object item in list)
{
Console.Write(" " + item);
}
Console.WriteLine();
list.Remove("world");
Console.Write("List contains:");
foreach (object item in list)
{
Console.Write(" " + item);
}
Console.WriteLine();
list.Clear();
Console.Write("List contains:");
foreach (object item in list)
{
Console.Write(" " + item);
}
Console.WriteLine();
}
}
输出结果:
List contains: Hello, world !
List contains: Hello, C# world !
List contains: Hello, C# !
List contains:
以上代码创建了一个 MyList
实例,并将字符串添加到列表中,然后在列表中插入一个字符串、删除一个字符串和清空列表,并在每个操作之后遍历列表并输出其内容。
IList 接口和其实现类提供了创建强类型列表的方便方式,以及添加、删除和访问列表元素的方法。通过实现 IList 接口,我们可以轻松地创建自己的列表类。