Преимущества super()
в единичном наследовании минимальны - главным образом, у Вас нет к твердому коду названия базового класса в каждый метод, который использует его родительские методы.
Однако почти невозможно использовать множественное наследование без super()
. Это включает общие идиомы как mixins, интерфейсы, абстрактные классы, и т.д. Это расширяется на код, который позже расширяет Ваш. Если бы кто-то позже хотел записать класс, который расширился Child
и смешивание, их код не работал бы правильно.
Как насчет:
var matches =
from fileName in filesToLookIn
from line in File.ReadAllLines(fileName)
from searchString in searchStrings
where line.Contains(searchString)
select new
{
FileName = fileName,
SearchString = searchString
};
foreach(var match in matches)
{
references.AddIfNew(match.SearchString, match.FileName);
}
Изменить:
По сути, запрос превращает каждое имя файла в набор строк, а затем перекрестно объединяет этот набор строк с набором строк поиска ( означает, что каждая строка соединена с каждой строкой поиска). Этот набор фильтруется до совпадающих строк, и для каждой строки выбирается соответствующая информация.
Множественные предложения из
аналогичны вложенным операторам foreach
. Каждый указывает на новую итерацию в рамках предыдущей. Несколько предложений from
преобразуются в метод SelectMany
, который выбирает последовательность из каждого элемента и объединяет результирующие последовательности в одну последовательность.
Весь синтаксис запросов C # транслируется в методы расширения. Однако компилятор использует некоторые уловки. Один из них - использование анонимных типов. Когда 2+ переменных диапазона находятся в одной области видимости, они, вероятно, являются частью анонимного типа за кулисами. Это позволяет произвольному количеству данных с заданной областью проходить через методы расширения, такие как Select
и Where
, которые имеют фиксированное количество аргументов. См. этот пост для получения дополнительной информации.
Вот перевод метода расширения вышеуказанного запроса:
var matches = filesToLookIn
.SelectMany(
fileName => File.ReadAllLines(fileName),
(fileName, line) => new { fileName, line })
.SelectMany(
anon1 => searchStrings,
(anon1, searchString) => new { anon1, searchString })
.Where(anon2 => anon2.anon1.line.Contains(anon2.searchString))
.Select(anon2 => new
{
FileName = anon2.anon1.fileName,
SearchString = anon2.searchString
});
Я обычно не люблю публиковать ссылки на Википедию, но вот ссылка на очень хорошее объяснение в Википедии ...
Вот и вся суть :
У Алисы есть счет в банке http: // unsafe / . К сожалению, Алиса не очень разбирается в вопросах безопасности.
Мэллори пытается получить деньги Алисы из банка.
Алиса имеет разумный уровень доверия к Мэллори и будет посещать ссылки, которые Мэллори отправляет ей.