📜  演示 IList 接口的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:40:47.965000             🧑  作者: Mango

IList 接口的演示 C# 程序

介绍

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 接口,我们可以轻松地创建自己的列表类。