实现一个覆盖C#中抽象方法的委托

时间:2011-07-05 14:12:49

标签: .net inheritance c#-4.0 delegates abstract-class

我是.Net的新手,我在这里显然做错了。在我的基础抽象类中,我有以下委托:

public delegate bool DEnqueue(ref IPCPriorityMessage item, byte priority);

...以及以下方法声明:

public abstract DEnqueue Enqueue();

在我的实例课中,我有以下内容:

public override DEnqueue Enqueue;

我将Enqueue指向适用的本地方法。如果我不使用继承或不使用委托,我只能让它工作。

我的确切目标是:

  1. 使用基本抽象类强制设计模式。实例必须包含方法Engueue()。
  2. 在实例类中使用委托,以便在调用公共Enqueue()方法时调用适用的私有enqueue()方法。
  3. 我该怎么做?我尝试使用接口,但基本上存在同样的问题。

    注意:我只在运行时知道要使用哪个私有enqueue(),因此我使用了委托。

2 个答案:

答案 0 :(得分:2)

看起来你正在寻找Template Method Pattern。无需使用代表。

答案 1 :(得分:1)

首先,基类中的方法声明可能没有说出你的想法。它说的是Enqueue方法返回类型为DEnqueue 的委托,而不是该方法与委托具有相同的类型。

您可以做的是在基类中使用DEnqueue类型的属性:

public abstract DEnqueue Enqueue { get; }

您可以(或实际上,必须)然后使用委托实现它:

private DEnqueue m_enqueue;

public override DEnqueue Enqueue
{
    get { return m_enqueue; }
}

您可以使用与调用方法相同的方式调用属性中的委托。