У меня есть приложение, написанное на C#. У моего приложения есть класс, который выглядит следующим образом:Использование генериков в интерфейсах в C#
public class FinderA
{
public IEnumerable<FinderA> GetItems()
{
return FinderA.FindAll();
}
}
Я хочу, чтобы другие классы делали что-то подобное. Я не могу использовать базовый класс, потому что моя фактическая реализация уже использует базовый класс. По этой причине я хочу создать интерфейс. В настоящее время я пытаюсь следующее:
public interface IFinder
{
IEnumerable<T> GetItems();
}
Когда я использую этот подход, я получаю ошибку во время компиляции, который говорит: «Тип или пространство имен имя„T“не может быть найдено (вы пропали без вести. .. «чтобы преодолеть это, я добавляю <T>
к концу имени интерфейса, так это выглядит следующим образом:
public interface IFinder<T>
{
IEnumerable<T> GetItems();
}
Это в свою очередь порождает другую ошибку во время компиляции, который говорит:» Использование универсального типа «IFinder «требует 1 аргумент типа». Моя задача: я хочу, чтобы интерфейс был общим. Я не хочу передавать тип. Есть ли способ обойти это? Если да, то что/как?
запрос не имеет никакого смысла ... Вы не хотите передавать тип, но хотите, чтобы интерфейс был общим. Если ваш интерфейс является общим, значит, вам нужно передать тип. –
@TimothyShields Он хочет, чтобы это было выведено; в частности, он хочет, чтобы общий аргумент всегда был типом реализации интерфейса. По крайней мере, так оно и есть. Конечно, такой функции нет в C#. – Servy
Догадка, основанная на том, как вы определили FinderA: 'public interface IFinder {IEnumerable GetItems(); } ' –
ASh