I'm trying to override a property in a base class with a different, but derived type with the same name. I think its possible by covarience or generics but am not sure how to do it?
The following code gets the error:
Error 1 'Sun.Cache': type must be 'OuterSpace.Cache' to match overridden member '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.
For the end result, when I address the "Data" Object of Sun I don't want there to be two Data Objects (Inherited & Base Class) but when I try override the property it requires the Sun variables to be the same type as base class. Eg:
Sun EarthSun = new Sun()
EarthSun.Analyse() //The OuterSpace Analysis Saves results to Sun Cache:
//Now try use the result:
EarthSun.Cache[0]...
Very similar to this but with derived type instead of string-array: http://stackoverflow.com/questions/1112458/c-member-variable-overrides-used-by-base-class-method
And this answer didn't make much sense to me: http://stackoverflow.com/questions/1123975/how-to-override-member-of-base-class-after-inheritance-in-c
Or perhaps this means its just not possible? http://stackoverflow.com/questions/157119/c-can-i-override-with-derived-types
Help! :) Any work around?