3

试图搜索网络,但到目前为止什么也没找到,所以我的问题是:

我想通过不同成员的属性来索引模型信息。为此,我在基类中创建了一个函数,该函数在调用时收集所有需要的信息。这种方法被派生到不同的模型中,以便它们都可以被索引。

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;
        }

T的类型为Base

模型的类型为Derived

也许这可以解决一些问题。

我回来了:

  IndexFacadeBase<Base>

我需要回来:

   IndexFacadeBase<Derived>

提前感谢所有帮助。

4

2 回答 2

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方法被调用。

于 2017-03-08T12:40:00.167 回答
0

如果将您IndexFacadeBase<Base>的更改为IndexFacadeBase<T> where T:Base.

于 2017-03-08T12:58:13.207 回答