Здравствуйте, NTT9, Вы писали:
NTT>Как перекрыть метод
NTT>public void AddRange(IEnumerable<T> collection);
NTT>у класса List<T> ?
Никак, List<> вообще не предназначен для наследования, по хорошему его нужно бы запечатать (sealed)
Как перекрыть метод
public void AddRange(IEnumerable<T> collection);
у класса List<T> ?
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, NTT9, Вы писали:
NTT>>Как перекрыть метод
NTT>>public void AddRange(IEnumerable<T> collection);
NTT>>у класса List<T> ?
J>Никак, List<> вообще не предназначен для наследования, по хорошему его нужно бы запечатать (sealed)
Но если очень хочется, то через ключевое слово new
public sealed class DerivedList<T> : List<T>
{
public new void AddRange(IEnumerable<T> collection) { }
}
public static void Main()
{
DerivedList<int> dl1 = new DerivedList<int>();
dl1.Add(1);
dl1.AddRange(new int[] { 2, 3, 4 });
Console.WriteLine(string.Join(", ", dl1));
List<int> dl2 = new DerivedList<int>();
dl2.Add(1);
dl2.AddRange(new int[] { 2, 3, 4 });
Console.WriteLine(string.Join(", ", dl2));
}
Здравствуйте, Wise_PingWin, Вы писали:
W_P>Но если очень хочется, то через ключевое слово new
Только стоило бы отметить, что во втором случае (List<int> dl2 = new DerivedList<int>()) будет вызван базовый метод.
А значит передать в метод, который принимает List<T>, не получится.
public void Demo(List<int> l)
{
l.AddRange(new int[] { 2, 3, 4 });
}
Тут будет вызван базовый метод, не зависимо от переданного типа List<int> или DerivedList<int>().