C#继承IList 接口的实现步骤
作者:wenchm
C#中的IList<T>接口是.NET框架中的一种通用接口,它定义了一组在运行时可以使用类型参数T的元素的集合。IList<T>接口提供了添加、删除和查找元素的方法,以及访问和操作列表中元素的索引的属性。要实现IList<T>接口,可以按照以下步骤进行:
1.声明一个类,并实现IList<T>接口
声明一个类,并实现IList<T>接口。在类的声明中,使用: IList<T>语法来指定接口的实现。例如:
using System.Collections.Generic; public class MyList<T> : IList<T> { // 实现IList<T>接口的方法和属性 }
2.实现IList<T>接口的属性
IList<T>接口有两个属性:Count和IsReadOnly。Count属性返回列表中元素的数量,IsReadOnly属性返回一个值,表示列表是否为只读。例如:
private List<T> list = new List<T>(); public int Count { get { return list.Count; } } public bool IsReadOnly { get { return false; } }
3.实现IList<T>接口的方法
IList<T>接口定义了许多方法,包括添加、删除、查找和替换元素的方法。以下是部分方法的实现示例:
public void Add(T item) { list.Add(item); } public void Clear() { list.Clear(); } public bool Contains(T item) { return list.Contains(item); } public int IndexOf(T item) { return list.IndexOf(item); } public void Insert(int index, T item) { list.Insert(index, item); } public bool Remove(T item) { return list.Remove(item); } public void RemoveAt(int index) { list.RemoveAt(index); }
4.实现IList<T>接口的索引器
IList<T>接口定义了一个索引器,它允许通过索引访问列表中的元素。索引器的实现如下:
public T this[int index] { get { return list[index]; } set { list[index] = value; } }
5.主程序设计
在类的构造函数中,可以初始化列表,并添加一些示例数据。例如:
public MyList() { // 初始化列表,并添加一些示例数据 list.Add(1); list.Add("Hello"); list.Add(3.14); }
完成以上步骤后,就可以创建一个实现了IList<T>接口的类。这个类可以在其他代码中作为列表使用,例如:
MyList<int> myList = new MyList<int>(); myList.Add(4); myList[1] = 2;
6.完整的实例
以下是一个实现了IList<T>接口的完整示例。在这个示例中,将创建一个名为MyList<T>的类,该类实现了IList<T>接口,并使用整数类型作为示例:
// IList<T>接口设计完整例子 using System.Collections; namespace _121_1 { public class MyList<T> : IList<T> { private readonly List<T> list = []; public int Count { get { return list.Count; } } public bool IsReadOnly { get { return false; } } public void Add(T item) { list.Add(item); } public void Clear() { list.Clear(); } public bool Contains(T item) { return list.Contains(item); } public int IndexOf(T item) { return list.IndexOf(item); } public void Insert(int index, T item) { list.Insert(index, item); } public bool Remove(T item) { return list.Remove(item); } public void RemoveAt(int index) { list.RemoveAt(index); } public void CopyTo(T[] array, int arrayIndex) { throw new NotImplementedException(); } //一个类必须实现它派生的接口的所有成员,否则将被声明abstract //注释部分是错误的迭代器设计,不能不设计,注释后警告CS0535 //public IEnumerator<T> GetEnumerator() //{ // throw new NotImplementedException(); //} //IEnumerator IEnumerable.GetEnumerator() //{ // throw new NotImplementedException(); //} /// <summary> /// 最重要的迭代器接口设计 /// </summary> public IEnumerator<T> GetEnumerator() { for (int i = 0; i < list.Count; i++) { yield return list[i]; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public T this[int index] { get { return list[index]; } set { list[index] = value; } } /// <summary> /// list.Add(1),警告警告CS1503无法将int转为T /// 必须经如下换后 /// </summary> public MyList() { // 初始化列表,并添加一些示例数据 list.Add((T)(object)1); // 将1强制转换为T类型 list.Add((T)(object)2); // 将2强制转换为T类型 list.Add((T)(object)3); // 将3强制转换为T类型 } } class Program { static void Main(string[] args) { ArgumentNullException.ThrowIfNull(args); MyList<int> myList = []; Console.WriteLine("初始列表: {0}", string.Join(", ", myList)); myList.Add(4); Console.WriteLine("添加元素4后的列表: {0}", string.Join(", ", myList)); myList[1] = 8; Console.WriteLine("将索引1处的元素替换为2后的列表: {0}", string.Join(", ", myList)); Console.ReadKey(); } } } // 运行结果: /* 初始列表: 1, 2, 3 添加元素4后的列表: 1, 2, 3, 4 将索引1处的元素替换为2后的列表: 1, 8, 3, 4 */
7.继承接口的迭代器设计一般步骤
迭代器由两部分组成:
public IEnumerator<T> GetEnumerator() { // }
和
IEnumerator IEnumerable.GetEnumerator() { // }
要实现这个方法,需要创建一个枚举器类,该类实现IEnumerator<T>接口,并使用IEnumerator<T>接口定义的Current属性和MoveNext()方法。以下是一个简单的示例:
// 迭代器设计,一般方法 using System.Collections; namespace _121_2 { internal class Program { private static void Main(string[] args) { ArgumentNullException.ThrowIfNull(args); List<int> list = [1, 2, 3, 4, 5]; MyEnumerable<int> myEnumerable1 = new(list); MyEnumerable<int> myEnumerable = myEnumerable1; foreach (int item in myEnumerable) { Console.WriteLine(item); } } } /// <summary> /// 迭代器设计 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> public class MyEnumerable<T>(List<T> list) : IEnumerable<T> { private readonly List<T> _list = list; public IEnumerator<T> GetEnumerator() { for (int i = 0; i < _list.Count; i++) { yield return _list[i]; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } } //运行结果: /* 1 2 3 4 5 */
在这个示例中,MyEnumerable类实现了IEnumerable<T>接口,并定义了一个GetEnumerator()方法,该方法返回一个枚举器对象。枚举器对象使用yield关键字返回列表中的每个元素。还有一个非泛型的GetEnumerator()方法,它调用泛型版本的GetEnumerator()方法,以满足IEnumerable接口的要求。
要使用这个类,可以创建一个MyEnumerable<T>对象,并传递一个List<T>对象。再使用foreach循环遍历MyEnumerable对象,并输出列表中的每个元素。如上例主程序设计的那样。
以上就是C#继承IList 接口的实现步骤的详细内容,更多关于C#继承IList 接口的资料请关注脚本之家其它相关文章!