C# - 在派生的上下文中调用派生的基本方法

时间:2017-03-08 12:33:50

标签: c# generic-derivation

试图在网上搜索但到目前为止没有找到任何内容,所以我的问题在这里:

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

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>

我知道这里的polimorphism及其发生的原因。

我的问题是: 我怎么称呼

derived.Index();

这样调用它的上下文不是来自基类而没有覆盖它?

更多信息:

调用的方法如下所示:

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

T 的类型为 Base

模型的类型为派生

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

我回来了:

  IndexFacadeBase<Base>

我需要回来:

   IndexFacadeBase<Derived>

提前感谢所有帮助。

2 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:0)

如果您的IndexFacadeBase<Base>更改为IndexFacadeBase<T> where T:Base,可能会有效。