Я пытаюсь переопределить свойство в базовом классе с другим, но производным типом с тем же именем. Я думаю, что это возможно с помощью ковариации или дженериков, но не знаю, как это сделать?
Следующий код получает ошибку:
Ошибка 1 'Sun.Cache': тип должен быть
'OuterSpace.Cache' для соответствия переопределен
член 'OuterSpace.Cache'
public class OuterSpace {
public virtual OuterSpaceData Data {get; set;}
public virtual OuterSpaceAnalysis Analysis {get; set;}
public virtual OuterSpaceCache Cache {get; set;}
public class OuterSpaceData {
//Lots of basic Data Extraction routines eg
public virtual GetData();
}
public class OuterSpaceAnalysis {
//Lots of Generic Analysis on Data routines eg
public virtual GetMean();
}
public class OuterSpaceCache {
//Lots of Caches of Past Analysis Results:
public Dictionary<AnalysisType, List<Result>> ResultCache;
}
}
public class Sun : OuterSpace {
public override SunData Data {get; set;}
public override SunAnalysis Analysis {get; set;}
public override SunCache Cache {get; set;}
public SunData : OuterSpaceData {
//Routines to specific get data from the sun eg
public override GetData();
}
public SunAnalysis : OuterSpaceAnalysis {
//Routines specific to analyse the sun: eg
public double ReadTemperature();
}
public SunCache : OuterSpaceCache {
//Any data cache's specific to Sun's Analysis
public Dictionary<AnalysisType, List<Result>> TempCache;
}
}
public class Moon : OuterSpace {} etc.
Для конечного результата, когда я обращаюсь к объекту «Данные» в Sun, я не хочу, чтобы там было два объекта данных (наследуемый и базовый класс), но когда я пытаюсь переопределить свойство, требуется, чтобы переменные Sun были тот же тип, что и базовый класс. Например:
Sun EarthSun = new Sun()
EarthSun.Analyse() //The OuterSpace Analysis Saves results to Sun Cache:
//Now try use the result:
EarthSun.Cache[0]...
Очень похоже на это, но с производным типом вместо string-array:
C # Переопределения переменных-членов, используемые методом базового класса
И этот ответ не имел для меня особого смысла:
Как переопределить член базового класса после наследования в C ++
Или, возможно, это означает, что это просто невозможно?
Можно ли переопределить с производными типами?
Помощь! :) Любая работа вокруг?