本文主要是介绍C#中CollectionBase类中IList接口的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://www.cnblogs.com/hg98/archive/2007/06/12/780950.html
今天看了一下C#中接口的东西,发现对CollectionBase(为强类型集合提供抽象基类)中的具体实现原理不是很了解。经过查看一些资料,分析过后得到以下的初步认识。
CollectionBase主要显示的实现ICollection和IList接口。具体的显示接口实现,可以查看MSDN的相关资料。(注: ICollection主要是实现将自己的项目复制到一个项目中,IList接口主要用于按照索引单独访问的一组对象)。由于IList接口成员很多,在 这里就用Add接口成员来描述,并给出一个《C#入门经典》的例子的阐述。
我们的目的是实现一个强类型集合,并且实现基本的添加,删除,和索引访问。这些实现都是通过继承CollectionBase类和使用IList接口来实现的。首先看CollectionBase的几个主要成员:
List成员定义: protected IList List {get;} //一个List属性
显示接口实现: int IList.Add( object value) //一个显示实现
我们通过List属性调用显示接口来实现元素的添加。同样删除和索引访问都要使用List属性成员来调用显示接口。
下面是代码和阐述:
// 强类型化定制集合类
// ===========================================================
using System;
using System.Collections;
namespace Ch11Ex02
{
/// <summary>
/// Animals 的摘要说明。
/// </summary>
public class Animals:CollectionBase
{
public Animals()
{
}
public void Add(Animal newAnimal)
{
List.Add(newAnimal);//List是IList接口的一个引用变量,调用CollectionBase中的显示接口成员int IList.Add(),实现元素的添加。注: 因为int IList.Add()是显示接口成员,所以必须使用IList类型引用变量才能调用
}
public void Remove(Animal oldAnimal)
{
List.Remove(oldAnimal);//和Add一样,使用List引用变量调用void IList.Remove(object value)
}
public Animal this[int animalIndex] //类中的索引
{
get
{
return (Animal)List[animalIndex]; //返回对应索引值的Animal对象
}
set
{
List[animalIndex]=value;
}
}
}
}
// Animal类,其对象作为Animals集合类的项目
// ===========================================================
using System;
namespace Ch11Ex02
{
/// <summary>
/// Animal 的摘要说明。
/// </summary>
public abstract class Animal
{
protected string name;
public Animal()
{
name="The animal with no name";
}
public Animal(string newName)
{
name=newName;
}
public string Name
{
get
{
return name;
}
set
{
name=value;
}
}
public void Feed()
{
Console.WriteLine("{0} has been fed",name);
}
}
public class Cow:Animal
{
public void Milk()
{
Console.WriteLine("{0} has been milked",name);
}
public Cow(string newName):base(newName)
{
}
}
public class Chicken:Animal
{
public void LayEgg()
{
Console.WriteLine("{0} has laid an egg",name);
}
public Chicken(string newName):base(newName)
{
}
}
}
// 主类,一个应用程序
// ===========================================================
using System;
namespace Ch11Ex02
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Animals animalCollection=new Animals();
animalCollection.Add(new Cow("Jack"));
animalCollection.Add(new Chicken("Vera"));
foreach(Animal myAnimal in animalCollection)
{
myAnimal.Feed();
}
}
}
}
这篇关于C#中CollectionBase类中IList接口的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!