У меня есть интерфейс: ISearch<T>
, и у меня есть класс, который реализует этот интерфейс: FileSearch : ISearch<FileSearchResult>
У меня есть класс FileSearchArgs : SearchArgs
, в котором есть метод для возврата объекта поиска:
public override ISearch<SearchResult> getSearchObject ()
{
return ((ISearch<SearchResult>)new FileSearch());
}
Переопределяется с:
public virtual ISearch<SearchResult> getSearchObject () { return null; }
Код будет создаваться только в том случае, если я предоставлю приведение к (ISearch), но он генерирует исключение во время выполнения с невозможностью привести к приведению. Кроме того, предыдущая итерация не применяла универсальные элементы к интерфейсу, поэтому сигнатура метода getSearchObject()
была следующей:
public override ISearch getSearchObject() { return new FileSearch();}
Я знаю, что одним из решений могло бы быть возвращение базового класса «Поиск» вместо реализации интерфейса, но я бы предпочел не делать этого и понять, почему я не могу следовать шаблону, который у меня был ранее.
Любая помощь, будет принята с благодарностью. Я пытаюсь значительно упростить происходящее, поэтому, если требуется какое-либо разъяснение, пожалуйста, дайте мне знать!
Заранее спасибо.