같은 이름의 다른 파생 형식으로 기본 클래스의 속성을 재정의하려고합니다. 나는 그것의 공생 또는 generics에 의해 가능하다고 생각하지만 그것을하는 방법을 모르겠다?파생 된 형식 및 같은 이름으로 속성 재정의 C#
다음 코드는 오류 가져옵니다 나는 일의 "데이터"개체를 처리 할 때 최종 결과를 들어
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.
을, 나는 두 개의 데이터 개체가있을 싶지 않아 (& 상속 기본 클래스)하지만 속성을 무시하려고하면 Sun 변수가 기본 클래스와 동일한 유형이어야합니다. 예 :
Sun EarthSun = new Sun()
EarthSun.Analyse() //The OuterSpace Analysis Saves results to Sun Cache:
//Now try use the result:
EarthSun.Cache[0]...
아주 이와 유사한 대신 문자열 배열의 파생 유형
: C# Member variable overrides used by base class method
그리고이 대답이 훨씬 이해가되지 않았다 나에게 : How to override member of base class after inheritance in C++
아니면이 그게 가능하지 않다는 것을 의미합니까? Can I Override with derived types?
도움말! :) 주위에 어떤 작품?
public class OuterSpace<TCacheType> where TCacheType : OuterSpaceCache {
public virtual OuterSpaceData Data {get; set;}
public virtual OuterSpaceAnalysis Analysis {get; set;}
public virtual TCacheType 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<SunCache> {
public override SunData Data {get; set;}
public override SunAnalysis Analysis {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;
}
}
공정 경고, 완전히 컴파일되지 않은 코드를 내가 완전히 잘못 될 수 :)하지만 내가 당신을 어떻게 생각하는지에 찔린 : 당신은 공분산 경로를 찾고 있다면
약간 주제에서 벗어나지 만 Sun은 일종의 OuterSpace라고 말하는 것이 합리적입니까? 여기서 어색함의 일부는 간단한 구조로 충분할 상속을 사용하는 것일 수 있습니다. –
나는 제안을 환영합니까? 이것은 문제의 데모 의사 코드이며 실제 프로젝트는 매우 커서 미래를 계획하고 있습니다. – JaredBroad
당신이 제공 한 샘플 구조만으로는 말하기 어렵습니다. 고려해야 할 주요 사항은 클래스를 실제로 사용하는 방법입니다. 특히 캐시, 분석 및 데이터 클래스는 기본 클래스로 액세스하는 것이 유리합니다. 분석을 조정하는 클래스가 있지만 분석 유형별로 조정이 다른 것처럼 보입니다. 그것은 저에게 더 많은 조사가 필요할 수있는 숨겨진 책임임을 시사합니다. 아직 일반 구조에 대한 유스 케이스가없는 경우에는 사용하지 않는 것이 좋습니다. 야기. –