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
,