В основном моя установка такова:Возможно ли иметь базовый класс с типом возвращаемого значения, который будет соответствовать типу базового класса?
public abstract class BaseObject{
public abstract BaseObject Clone();
}
public class DerivedObject : BaseObject{
public DerivedObject Clone()
{
//Clone logic
}
}
Приведенный выше код не компилируется, потому что это не возможно изменить тип возвращаемого при переопределении метода.
Можно ли достичь того, что метод Clone каждого производного типа возвращает аргумент своего собственного типа (может быть, через generics)?
Не могли бы вы описать некоторые из способов, которыми это решение может быть болью? Я пытаюсь выяснить, стоит ли брать эту боль за меньшую боль, не имея при себе всякого типа, когда я использую метод Clone. – chrischu
@Mehrdad: Исправлено, спасибо. @crischu: Ну, нечего сказать, что другой класс не может быть получен из «BaseObject» для одной вещи, поэтому он не является надежным. Также, если вам нужно взаимодействовать с другим типом, он может получить * действительно * волосатый - в буферах протоколов у меня есть «IMessage , где TMessage: IMessage , где TBuilder: IBuilder 'например. Насти. Это в основном нормально, но вам нужно держать прохладную голову. –