У меня есть основной вопрос относительно общих интерфейсов.
Случай 1:
public interface IDataProcesser
{
TOut Process<Tin,TOut>(Tin input);
}
Случай 2:
public interface IDataProcesser<Tin,TOut>
{
TOut Process(Tin input);
}
Приводит ли Случай 1 к боксу/распаковке? Является ли он менее производительным по сравнению со случаем 2. Существуют ли какие-либо рекомендации при разработке универсальных интерфейсов?
Спасибо, Рави.
Tin
иTOut
, и независимо от этого просто измерьте с помощью какого-нибудь профилировщика. - person Tigran   schedule 11.09.2018IDataProcessor
имеет более одного метода, случай 2, вероятно, будет более кратким. Если реализацииIDataProcessor
хранят какие-либо данные TIn/TOut, потребуется случай 2. Кроме того, это мудрый дизайн, но случай 2 кажется чище, особенно когда вы добавляете к нему ограничения. - person Ian Mercer   schedule 11.09.2018List<IDataProcessor>
, и каждый процессор будет работать с разными типами, в этом случае будет указан случай 1. - person Damien_The_Unbeliever   schedule 11.09.2018int[]
с миллионом целых чисел. Стек составляет всего миллион байтов, это массив из четырех миллионов байтов; как вы думаете, он попадает в стек, потому что в стек помещаются целые числа? Конечно, нет! То, что типы значений помещаются в стек, просто неверно. Переменные помещаются в стек, когда их время жизни невелико. - person Eric Lippert   schedule 11.09.2018