Реализуйте делегат, который переопределяет абстрактный метод в C # - PullRequest
1 голос
/ 05 июля 2011

Я довольно новичок в .Net, и я явно что-то не так делаю здесь.В моем базовом абстрактном классе у меня есть следующий делегат:

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

... и следующее объявление метода:

public abstract DEnqueue Enqueue();

В моем классе экземпляра у меня есть следующее:

public override DEnqueue Enqueue;

Я указываю Enqueue на применимый локальный метод.Я могу заставить это работать, только если я не использую наследование или не использую делегаты.

Мои точные цели:

  1. Использование базового абстрактного класса для форсирования дизайнашаблон.Экземпляры должны содержать метод Engueue ().
  2. Использовать делегаты в классе экземпляра, чтобы при вызове открытого метода Enqueue () вызывался применимый закрытый метод enqueue ().

Как мне это сделать?Я пытался использовать интерфейсы, но в основном у меня возникла та же проблема.

ПРИМЕЧАНИЕ: я знаю только во время выполнения, какой private enqueue () использовать, поэтому я использую делегаты.

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Похоже, вы ищете Pattern Method Pattern . Нет необходимости использовать делегатов.

1 голос
/ 05 июля 2011

Во-первых, объявление метода в вашем базовом классе, вероятно, не говорит, что вы думаете.Он говорит о том, что метод Enqueue возвращает делегат типа DEnqueue, а не то, что метод имеет тот же тип, что и делегат.

То, что вы могли бы сделать, это получитьсвойство типа DEnqueue в базовом классе:

public abstract DEnqueue Enqueue { get; }

Затем вы можете (или фактически должны) реализовать его с помощью делегата:

private DEnqueue m_enqueue;

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

Вы можете вызватьделегировать в свойстве так же, как вы вызываете метод.

...