[英]Difference between the classes inherited from ObservableCollection and IList
我創建了兩個不同的類。 一類繼承自 IList,另一類繼承自 ObservableCollection。 當我們為這些類創建實例時,我得到了以下結果。
繼承自 IList
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Cells = new CellCollection();
}
private CellCollection cells;
public CellCollection Cells
{
get { return cells; }
set { cells = value; }
}
}
public class CellCollection : IList<OrderInfo>
{
public CellCollection()
{
}
public OrderInfo this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public bool IsReadOnly => throw new NotImplementedException();
public int Count => throw new NotImplementedException();
public void Clear()
{
throw new NotImplementedException();
}
public bool Contains(OrderInfo item)
{
throw new NotImplementedException();
}
public void CopyTo(OrderInfo[] array, int arrayIndex)
{
throw new NotImplementedException();
}
public IEnumerator<OrderInfo> GetEnumerator()
{
throw new NotImplementedException();
}
public int IndexOf(OrderInfo item)
{
throw new NotImplementedException();
}
public void Insert(int index, OrderInfo item)
{
throw new NotImplementedException();
}
public bool Remove(OrderInfo item)
{
throw new NotImplementedException();
}
public void RemoveAt(int index)
{
throw new NotImplementedException();
}
internal void Add(OrderInfo orderInfo)
{
}
void ICollection<OrderInfo>.Add(OrderInfo item)
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
為 IList 維護的實例。
繼承自 ObservableCollection
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Cells = new CellCollection();
}
private CellCollection cells;
public CellCollection Cells
{
get { return cells; }
set { cells = value; }
}
}
public class CellCollection : ObservableCollection<OrderInfo>
{
public CellCollection()
{
}
}
不為 Observable 集合維護實例,只維護計數
你能解釋一下兩者的區別嗎?
調試器使用類型注釋的調試器屬性。
如果類型不使用這些屬性,則調用該類型的ToString()
方法以獲取文本表示。
ObservableCollection
使用這些方法之一來顯示Count
。 您自己的List
實現不執行這些操作,因此調用基本ToString()
方法,該方法僅返回類型名稱。
因此,要為您自己的類型獲得類似的結果,請實現ToString()
或使用DebuggerDisplayAttribute
注釋您的CellCollection
類。
當光標懸停在變量上時,您可以看到變量名稱和實例的調試標簽。
默認情況下,調試標簽是ToString
的結果。 對於類CellList
,方法ToString
來自基類Object
並返回類的名稱。 此顯示: CellList 。
屬性DebuggerDisplay允許定義實例的調試標簽(不是字符串)。 類CellCollection
繼承自ObservableCollection<T>
不是繼承自Collection<T>
並且類 Collection 是用屬性 DebuggerDisplay 聲明的。
[DebuggerDisplay("Count = {Count}")]
public class Collection<T>: IList<T>, IList, IReadOnlyList<T>
.NET 中的所有集合都是一樣的,比如 List。
如果您在類CellList
上設置此屬性,您將看到相同的調試標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.