我有两个问题:接口实现和LinkedList
1接口实现
例如,如果我们使用ArrayList中,我们可以看到的ArrayList实现了许多接口,接口一个是IEnumerable的具有的
IEnumerator GetEnumerator();
一个抽象的方法,如果我们去在VS ArrayList中的定义,我们可以看到是
的方法public virtual IEnumerator GetEnumerator();
但为什么应该有关键字“虚拟”?该方法不应该在IEnumerable中实现该方法吗?所以有方法应该是:
public IEnumerator GetEnumerator();
?
2.链表
我看到链表一些这样的代码:
LinkedList<Data> myDataList = new LinkedList<Data>();
LinkedListNode<Data> lln;
for (int i = 0; i < 10; i++) //Method 1
{
myData = new Data(i);
lln = myDataList.AddLast(myData);
}
for (int i = 10; i < 20; i++) // Method 2
{
lln = new LinkedListNode<Data>(new Data(i));
myDataList.AddLast(lln);
}
我可以理解方法2,其第一数据添加到一个LinkedListNode不是增加一个LinkedListNode到链表。但是它看起来像方法1直接将数据添加到LinkedList中?是否意味着如果直接向LinkedList中添加数据,LinkedList将通过向LinkedListNode添加数据在内部创建LinkedListNode,然后将LinkedListNode添加到LinkedList,与方法2相同?
['virtual'](https://msdn.microsoft.com/en-us/library/9fkccyh4.aspx)所以任何子类都可以“覆盖”它的实现。 –
问一个问题 - 单个问题答案线程*叹气*,那么你问第一个和第二个右侧有什么区别?它也做同样的事情。你读过[LinkedList .AddLast](https://msdn.microsoft.com/en-us/library/ms132177(v = vs.110).aspx),它添加了一个新节点并返回它。 –
@Bagus Tesa我知道任何子类都可以重写该方法,但是由于ArrayList实现了IEnumerable,但它不提供IEnumerable中的方法(GetEnumerator())的实现。 – grooveline