Thursday 20 October 2016

.net - C#: Inheritance Problem with List



Let's assume this class in 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);
}
}


The compiler gives me this warning in the line "public void Add(T value)":





warning CS0108: 'System.LimitedList.Add(T)' hides inherited member 'System.Collections.Generic.List.Add(T)'. Use the new keyword if hiding was intended.




What do I have to do to avoid this warning?



Thx 4 your help


Answer



No - don't use new here; that doesn't give you polymorphism. List isn't intended for inheritance in this way; use Collection and override the Add InsertItem method.




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--;
}
}

}

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...