So, I have a project with 5 base classes:
File
FileRecord
FileDetailRecord : FileRecord
FileHeaderRecord : FileRecord
RecordDetail
Those relate together like:
A File contains FileRecords, a FileRecord can either be a FileDetailRecord or FileHeaderRecord, and FileRecords contain RecordDetails
I then have two subsets of those base classes, Output and Input. So I have
OutputFile : File
OutputFileDetailRecord : FileDetailRecord
OutputFileHeaderRecord : FileHeaderRecord
OutputRecordDetail : RecordDetail
and the same thing for Input. The issue I'm currently having is with one of the members in my File classes (File, OutputFile, InputFile).
My file class is written like so:
public class File {
public virtual FileHeaderRecord FileHeaderRecord { get { return fileHeaderRecord; } }
protected virtual FileHeaderRecord fileHeaderRecord { get; set; }
public virtual SortedList<int, FileDetailRecord> FileDetailRecords { get { return fileDetailRecords; } }
protected virtual SortedList<int, FileDetailRecord> fileDetailRecords { get; set; }
}
What I'm trying to do in my OutputFile class is:
public class OutputFile : File {
public override FileHeaderRecord FileHeaderRecord {
get {
if (fileHeaderRecord == null)
fileHeaderRecord = new OutputFileHeaderRecord();
return fileHeaderRecord;
}
}
public override SortedList<int, FileDetailRecord> FileDetailRecords {
get {
if (fileDetailRecords == null)
fileDetailRecords = (SortedList<int, OutputFileDetailRecord>)new SortedList<int, FileDetailRecord>();
}
}
}
With my OutputFileDetailRecord class:
public class OutputFileDetailRecord : FileDetailRecord {
public OutputFileDetailRecord()
: base() {
}
public override bool IsValid {
get {
return base.IsValid;
}
}
}
The error I'm getting is
Error 1 Cannot convert type 'System.Collections.Generic.SortedList<int,MerchBulkLoad.Utils.Base.FileDetailRecord>' to 'System.Collections.Generic.SortedList<int,MerchBulkLoad.Utils.Output.OutputFileDetailRecord>'
I also tried to just implictly cast it like this:
fileDetailRecords = new SortedList<int, OutputFileDetailRecord>();
But that just told me I couldn't implicitly cast it. It's been several months since I worked with C# at all so I'm extremely rusty at the moment. Can anyone point out what I'm doing wrong here?