2015-05-18 2 views
4

У меня есть виртуальный метод для базового класса. Каждый раз, когда я переопределяю его, я хочу вернуть разные типы объектов. Я знаю, что это невозможно, но как лучше всего справиться с этой ситуацией?C# Метод переопределения и возврат различных объектов

Пример базового метода:

public virtual void clickContinue() 
{ 
    //click the continue button 
} 

И метод, который переопределяет его:

public override myObject clickContinue() 
{ 
    //click then continue button 
    //return myObject 
} 

мне нужно сделать несколько подобных переопределение, все возвращаются различные объекты. Опять же, я знаю, что это невозможно сделать так, как это было сделано выше - я пытаюсь найти лучший способ справиться с этой ситуацией.

+0

У вас может быть базовый метод, который возвращает 'object', но вам было бы лучше, если бы ваши объекты реализовали общий интерфейс и могли возвращать' IMyObjectType'. Или используйте общий базовый класс, чтобы каждый подкласс мог указать 'T'. Отображение более подробной информации о типах объектов в вопросе поможет вам получить лучший ответ. –

ответ

7

Я знаю, что это невозможно, но какой был бы лучший способ справиться с этой ситуацией?

Если вам не нужна реализация по умолчанию, вы можете потенциально сделать класс общим, и возвращают общий тип:

abstract class YourBase<T> 
{ 
    abstract T ClickContinue(); 
} 

class YourOverride : YourBase<MyObject> 
{ 
    override MyObject ClickContinue() 
    { 
     //... 
+0

Это отличное решение, если у вас есть базовый метод. Конечно, это не сработает, если базовый метод был определен другой библиотекой, так как вы не смогли изменить подпись. – neontapir

0

чуя злоупотребление внахлёст механик. Идея заключается в том, что вы делаете то же самое, но с разными параметрами. Имя метода действительно должно сказать вам, что он делает. Итак, как это возможно, тот же самый метод возвращает void (ничего не возвращает) и иногда что-то возвращает (не void)?

Вы уверены, что у вас не должно быть двух совершенно разных методов? Это, вероятно, также сделает API понятным.

В противном случае, верните всегда object, который всегда будет null в случае (вместо этого) void переопределить.

Очевидно, что общий способ лучше подходит для безопасности типов. Возврат object означает, что вы отказываетесь от ввода текста и выполняете литье вручную.

Смежные вопросы