Re: Как перекрыть метод AddRange(IEnumerable<T> collection)
От: Jack128  
Дата: 25.11.11 09:49
Оценка: +1
Здравствуйте, NTT9, Вы писали:

NTT>Как перекрыть метод


NTT>
public void AddRange(IEnumerable<T> collection);


NTT>у класса List<T> ?


Никак, List<> вообще не предназначен для наследования, по хорошему его нужно бы запечатать (sealed)
Как перекрыть метод AddRange(IEnumerable<T> collection)
От: NTT9  
Дата: 25.11.11 09:45
Оценка:
Как перекрыть метод

public void AddRange(IEnumerable<T> collection);


у класса List<T> ?
перекрытие list addrange
Re[2]: Как перекрыть метод AddRange(IEnumerable<T> collectio
От: Wise_PingWin  
Дата: 25.11.11 11:07
Оценка:
Здравствуйте, 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));
}
Re[3]: Как перекрыть метод AddRange(IEnumerable<T> collectio
От: Doc Россия http://andrey.moveax.ru
Дата: 25.11.11 13:38
Оценка:
Здравствуйте, 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>().
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.