先举例:
public class User
{
public string mName;
public int mAge;
public User(string name, int age)
{
mName = name;
mAge = age;
}
}
internal class IListTest
{
public static void Go()
{
IList<User> list = new List<User>();
User user1 = new User("jump", 18);
User user2 = new User("chen", 19);
list.Add(user1);
list.Add(user2);
// list.Sort(); // 报错
foreach (var user in list)
{
Console.WriteLine(user.mName + " : " + user.mAge);
Console.WriteLine(list.Count);
}
}
}
IList<User> list = new List<User>();
千万要注意:等式的右边是List<User>
,而不是 IList<User>
,如果在List前面加一个I, 就会出现错误:抽象类或接口无法创建实例
。这样写的优点:当你只想使用IList<T>
接口规定的字段和方法时,IList<T>
这种方式比较好。他不获取实现这个接口的类的其他方法和字段,有效的节省空间。
但IList<T>
仅仅是所有泛型类型的接口,并没有太多方法可以使用,如果仅仅是作为集合数据的承载体,确实,IList<T>
可以胜任。不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序Sort,这个时候IList就爱莫能助了,如上例:无法使用Sort函数,这个时候就只能用List<T>
来声明了。因为List <T>
已经实现了IList <T>
里的那些方法并新加了一些额外的字段和方法,比如Sort函数。