所以,我有5基類項目:發行鑄造排序列表<int, T>其中T是一個派生類
File
FileRecord
FileDetailRecord : FileRecord
FileHeaderRecord : FileRecord
RecordDetail
那些涉及共同喜歡:
文件包含FileRecords,一個FileRecord既可以是FileDetailRecord或FileHeaderRecord,FileRecords包含RecordDetails
然後我有兩個基類的輸出和輸入的子集。所以我有
OutputFile : File
OutputFileDetailRecord : FileDetailRecord
OutputFileHeaderRecord : FileHeaderRecord
OutputRecordDetail : RecordDetail
和輸入相同的東西。我目前遇到的問題是在我的File類(File,OutputFile,InputFile)中的一個成員。
我的文件類是這樣寫這樣:
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; }
}
我想要在我的OUTPUTFILE類做的是:
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>();
}
}
}
隨着我OutputFileDetailRecord類:
public class OutputFileDetailRecord : FileDetailRecord {
public OutputFileDetailRecord()
: base() {
}
public override bool IsValid {
get {
return base.IsValid;
}
}
}
我得到的錯誤是
Error 1 Cannot convert type 'System.Collections.Generic.SortedList<int,MerchBulkLoad.Utils.Base.FileDetailRecord>' to 'System.Collections.Generic.SortedList<int,MerchBulkLoad.Utils.Output.OutputFileDetailRecord>'
我也試過,只是implictly投這樣的:
fileDetailRecords = new SortedList<int, OutputFileDetailRecord>();
但是,這只是告訴我,我不能隱式轉換它。我從事C#工作已經有好幾個月了,所以我現在非常生疏。任何人都可以指出我在這裏做錯了嗎?
請參閱[協變和反變化](http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)) - 默認情況下C#泛型是不變的。另請參閱[創建變體通用接口](http://msdn.microsoft.com/zh-cn/library/dd997386.aspx)(YMMV)。 – user2864740
爲了幫助解釋爲什麼Covaranace是一個問題,如果'SortedList'包含'InputFileDetailRecord'? (我知道你沒有,但如果我拿了你的代碼,並在晚些時候添加該類) –
好的,這很有道理斯科特。 –