实现IList接口

发布于 2024-07-27 23:16:17 字数 176 浏览 4 评论 0原文

我是泛型新手。 我想通过从 IList 接口派生来实现我自己的集合。

您能否为我提供一些实现 IList 接口的类的链接,或者为我提供至少实现 AddRemove 的代码方法?

I am new to generics. I want to implement my own collection by deriving it from IList<T> interface.

Can you please provide me some link to a class that implements IList<T> interface or provide me a code that at least implements Add and Remove methods?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

清旖 2024-08-03 23:16:30

从 List 继承通常是最快的方法,但如果您需要从另一个类(例如 ContextBoundObject 等)继承,则可能会在以后受到限制。 实现 IList 非常快,并且如上所述,它提供了更多的灵活性。

Inheriting from List is often the quickest approach but can be limiting later on down the line if you need to inherit from another class (e.g. ContextBoundObject etc.). It's pretty quick to implement IList and as pointed out above, it gives a lot more flexibility.

苏璃陌 2024-08-03 23:16:29

在大多数情况下,您可以简单地使用 List 或从 List 派生。 如果您从 List 派生,您将自动获得“添加”和“删除”的实现。

In most cases you can simply use List<T> or derive from List<T>. If you derive from List<T> you will automatically get the implementation for Add and Remove.

回眸一笑 2024-08-03 23:16:28

您可以查看 Mono 项目。 有完整的源代码,您可以看看一些类是如何实现的。 例如“System.Collections.Generics.List”。

You can look at Mono project. There is available complete source codes, sou you can look how are some classes implemented. For example "System.Collections.Generics.List<T>".

不顾 2024-08-03 23:16:26

Visual Studio 提供了 IList 等接口的自动完整工作实现

您只需要编写类似以下代码的代码:(

public class MyCollection<T> : IList<T>
{
    // This line is important. Without it the auto implementation creates only
    // methods with "NotImplemented" exceptions
    readonly IList<T> _list = new List<T>();
}

虽然该行

readonly IList<T> _list = new List<T>(); 

很重要!)

在此处输入图像描述

然后单击灯泡符号将光标放在 IList<> 上 然后按 Strg + "." 您将看到提供的几种实现,例如:

在此处输入图像描述

Visual Studio offers an automatic full working implementation of interfaces like IList<>.

You need only to write something like this code:

public class MyCollection<T> : IList<T>
{
    // This line is important. Without it the auto implementation creates only
    // methods with "NotImplemented" exceptions
    readonly IList<T> _list = new List<T>();
}

(while the line

readonly IList<T> _list = new List<T>(); 

is the important one!)

enter image description here

Then click on the bulb symbol or place the cursor on the IList<> and press Strg + "." You will become several implementations offered, like:

enter image description here

殤城〤 2024-08-03 23:16:25

除非您有非常令人信服的理由这样做,否则最好的选择是从 System.Collections.ObjectModel.Collection继承,因为它拥有您需要的一切。

请注意,尽管 IList 的实现者不需要将 this[int] (索引器)实现为 O(1)(基本上是恒定时间访问) ,强烈建议您这样做。

Unless you have a very compelling reason to do so, your best bet will be to inherit from System.Collections.ObjectModel.Collection<T> since it has everything you need.

Please note that although implementors of IList<T> are not required to implement this[int] (indexer) to be O(1) (basically, constant-time access), it's strongly recommended you do so.

倾城泪 2024-08-03 23:16:24

除了从 List 派生之外,您还可以外观 List 并向外观类添加更多功能。

class MyCollection<T> : IList<T>
{
    private readonly IList<T> _list = new List<T>();

    #region Implementation of IEnumerable

    public IEnumerator<T> GetEnumerator()
    {
        return _list.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }

    #endregion

    #region Implementation of ICollection<T>

    public void Add(T item)
    {
        _list.Add(item);
    }

    public void Clear()
    {
        _list.Clear();
    }

    public bool Contains(T item)
    {
        return _list.Contains(item);
    }

    public void CopyTo(T[] array, int arrayIndex)
    {
        _list.CopyTo(array, arrayIndex);
    }

    public bool Remove(T item)
    {
        return _list.Remove(item);
    }

    public int Count
    {
        get { return _list.Count; }
    }

    public bool IsReadOnly
    {
        get { return _list.IsReadOnly; }
    }

    #endregion

    #region Implementation of IList<T>

    public int IndexOf(T item)
    {
        return _list.IndexOf(item);
    }

    public void Insert(int index, T item)
    {
        _list.Insert(index, item);
    }

    public void RemoveAt(int index)
    {
        _list.RemoveAt(index);
    }

    public T this[int index]
    {
        get { return _list[index]; }
        set { _list[index] = value; }
    }

    #endregion

    #region Your Added Stuff

    // Add new features to your collection.

    #endregion
}

In addition to deriving from List<T>, you can facade List<T> and add more features to your facade class.

class MyCollection<T> : IList<T>
{
    private readonly IList<T> _list = new List<T>();

    #region Implementation of IEnumerable

    public IEnumerator<T> GetEnumerator()
    {
        return _list.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }

    #endregion

    #region Implementation of ICollection<T>

    public void Add(T item)
    {
        _list.Add(item);
    }

    public void Clear()
    {
        _list.Clear();
    }

    public bool Contains(T item)
    {
        return _list.Contains(item);
    }

    public void CopyTo(T[] array, int arrayIndex)
    {
        _list.CopyTo(array, arrayIndex);
    }

    public bool Remove(T item)
    {
        return _list.Remove(item);
    }

    public int Count
    {
        get { return _list.Count; }
    }

    public bool IsReadOnly
    {
        get { return _list.IsReadOnly; }
    }

    #endregion

    #region Implementation of IList<T>

    public int IndexOf(T item)
    {
        return _list.IndexOf(item);
    }

    public void Insert(int index, T item)
    {
        _list.Insert(index, item);
    }

    public void RemoveAt(int index)
    {
        _list.RemoveAt(index);
    }

    public T this[int index]
    {
        get { return _list[index]; }
        set { _list[index] = value; }
    }

    #endregion

    #region Your Added Stuff

    // Add new features to your collection.

    #endregion
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文