我试图覆盖基类中具有相同名称的属性,但使用不同的派生类型。我认为可以通过协变或泛型实现,但不确定如何做到。以下代码会出错:“错误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对象的“Data”属性时,我不希望有两个数据对象(继承和基类),但是当我尝试覆盖属性时,它要求Sun变量与基类相同类型。例如:
Sun EarthSun = new Sun()
EarthSun.Analyse() //The OuterSpace Analysis Saves results to Sun Cache:
//Now try use the result:
EarthSun.Cache[0]...
与此类似,但使用派生类型而不是字符串数组:
C#成员变量被基类方法覆盖这个答案对我来说没有什么意义:
如何在C++中继承后覆盖基类成员或许这意味着它根本不可能?
我能用派生类型重写吗?帮帮忙!:) 有什么解决办法吗?