C#:List 的inheritance问题
我们假设这个类在C#中:
public class LimitedList : List { private int _maxitems = 500; public void Add(T value) /* Adding a new Value to the buffer */ { base.Add(value); TrimData(); /* Delete old data if lenght too long */ } private void TrimData() { int num = Math.Max(0, base.Count - _maxitems); base.RemoveRange(0, num); } }
编译器在“public void Add(T value)”行中给出了这个警告:
警告CS0108:’System.LimitedList.Add(T)’隐藏inheritance的成员’System.Collections.Generic.List.Add(T)’。 如果要隐藏,请使用new关键字。
我该怎么做才能避免这种警告?
谢谢你的帮助
不 – 不要在这里使用new
; 这不会给你多态性。 List
不是以这种方式inheritance; 使用Collection
并override
Add
InsertItem
方法。
public class LimitedCollection : Collection { private int _maxitems = 500; protected override void InsertItem(int index, T item) { base.InsertItem(index, item); TrimData(); /* Delete old data if lenght too long */ } private void TrimData() { int num = Math.Max(0, base.Count - _maxitems); while (num > 0) { base.RemoveAt(0); num--; } } }
您可以通过在声明中添加“new”来避免此警告。
public new void Add(T value) { ... }
但是我认为你可能通过使用inheritance来解决这个问题。 从我的角度来看,LimitedList不是List,因为它表达了非常不同的行为,因为它对List中的数据量设置了一个硬约束。 我认为不从Listinheritance而是将List作为成员变量会好得多。
这是一个坏主意的另一个原因是,当它被视为列表时,您将无法满足您的类合同。 以下代码将使用List的Add方法而不是LimitedList。
List list = new LimitedList (10); for ( i = 0; i < 10000; i++ ) { list.Add(i); }
您需要将“添加”方法声明为“新”(替换)方法。 试试这个:
public class LimitedList : List { private int _maxitems = 500; public new void Add(T value) /* Adding a new Value to the buffer */ { base.Add(value); TrimData(); /* Delete old data if length too long */ } private void TrimData() { int num = Math.Max(0, base.Count - _maxitems); base.RemoveRange(0, num); } }
注意’添加(…’声明中的’new’关键字。
虽然,在这种情况下,您应该创建自己的实现IList接口的generics类。 希望有所帮助。
像其他人所说,你需要添加新的关键字。 原因是因为在基类(List