C# - вызов производного базового метода в производном контексте

Пробовал искать в интернете, но пока ничего не нашел, вот мой вопрос:

Я хочу индексировать информацию о модели через атрибуты на разных членах. Для этого я создал функцию в базовом классе, которая собирает всю необходимую информацию при вызове. Этот метод выводится в различные модели, так что все они могут быть проиндексированы.

Base()
{
    public virtual void Index() {...}
}

В базовом классе я вызываю универсальный метод, который дает мне доступ к серверу индексирования для конкретной модели, которую я хочу сохранить там

using (var indexFacade = IndexFacadeFactory.GetIndexFacade(configuration, this))
{
    indexFacade.Execute(this, operation);
}

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что при вызове фабрики она получает информацию для базового класса.

То, что я хочу сделать, выглядит примерно так:

Derived : Base
{
   [IndexingKey]
   long Id { get; set; }

   [IndexingField]
   string SomeValue { get; set; }
}

var derived = new Derived();
derived.Index();

Мой indexFacade содержит тип

IndexFacadeBase<Base>

Я знаю о полиморфизме здесь и почему это происходит.

Мой вопрос: как я могу позвонить

derived.Index();

так что контекст, из которого он вызывается, не из базового класса, не перезаписав его?

Дальнейшая информация:

Вызываемый метод выглядит следующим образом:

public static IndexFacadeBase<T> GetIndexFacade<T>(IndexInfo.IndexConfiguration config, T model)
        {
            IndexFacadeBase<T> retVal;
            .....
            return retVal;
        }

Т имеет тип базы.

Модель имеет тип Derived.

Может быть, это проясняет некоторые из проблем.

Я вернусь:

  IndexFacadeBase<Base>

Мне нужно было бы вернуться:

   IndexFacadeBase<Derived>

Заранее спасибо за помощь.

2 ответа

Возможно, я не до конца понимаю ваш вопрос, но не хотите ли вы просто переопределить метод в производном классе?

class Base
{
    public virtual void Index() { }
}

class Derived : Base
{
    public override void Index() { } // here is the override.
    long Id { get; set; }
    string SomeValue { get; set; }
}

Затем, когда вы делаете это:

var derived = new Derived();
derived.Index();

Производный класс ' Index метод называется.

Может быть, это будет работать, если ваш IndexFacadeBase<Base> был изменен на IndexFacadeBase<T> where T:Base,

Другие вопросы по тегам