2014-10-23 3 views
0

При наследовании метода с общим параметром в C#, как лучше всего обрабатывать случаи, когда в дочернем классе не требуется никакого параметра? Например, я хотел бы сделать что-то вроде этого:C# как наследовать общий метод с различным числом требуемых параметров

public abstract class Parent { 
    protected abstract void Load<T>(T param); 
} 
public class Child : Parent { 
    protected override void Load() {} 
} 

Если что-то, как это не возможно, есть предложил стандартная практика для определения Т в тех случаях, когда это на самом деле не требуется? Я просто устанавливаю что-то вроде bool и игнорирую значение?

child.Load<bool>(false); 
+0

Некоторый дополнительный контекст был бы полезен: «T» является общим параметром класса «Родитель» или только этим методом? Находит ли 'Child' от« Parent »? Does 'Child.Load' повторно использовать любой код из Parent.Load '? –

+3

Если его не требуется ... возникает вопрос, почему его там, в первую очередь; или почему вы извлекаете из него. – BradleyDotNET

+1

Похоже, проблема состоит в том, что эти два метода семантически различны и не должны переопределять друг друга или где-то существует неадекватное использование дженериков. Можете ли вы рассказать о прецеденте? –

ответ

2

При переопределении функции вы должны иметь одинаковые номера (и типы) параметров. Вы можете перегрузки родительского метод, но не переопределения это:

public abstract class Parent { 
    protected abstract void Load<T>(T param); 
} 
public class Child : Parent { 
    protected void Load() {} 
    protected override void Load<T>(T param) { // do nothing? } 
} 

Однако это код запах для меня - сделать Load<T> аннотации по существу говорит внедренцев, что они должны реализовать этот метод, но этот класс чувствует ему это не нужно. Если код в пределах Parent ожидает, что Load<T> будет правильно переопределен; как он узнает, что Child реализует другой вкус Load?

+0

Незначительные нитки: виртуальные члены не могут быть 'private', и вам не разрешается изменять доступность в любом случае (например, от« public »до« protected »или наоборот). Кроме того, в приведенном выше примере 'Child' фактически не наследует' Parent'. Я имею в виду, я думаю, что идея кода достаточно ясна, но было бы лучше, если бы это было законно. –

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