的情況是協方差和逆變
public interface IRow
{
int Id { get; set; }
string Name { get; set; }
}
public class ARow : IRow
{ ... }
public class BRow : IRow
{ ... }
public class RowCollection<T> : Collection<T> where T : IRow
{ }
public interface ITable<T> where T : IRow
{
RowCollection<T> DataRows { get; }
int Id { get; set; }
string Name { get; set; }
}
public class ATable : ITable<ARow>
{
public RowCollection<ARow> DataRows
{
get;
set;
}
}
public class BTable : ITable<BRow>
{
public RowCollection<BRow> DataRows
{
get;
set;
}
}
當我做這樣的事情
List<ITable<IRow>> lt = new List<ITable<IRow>>();
ITable<IRow> ads = new ATable();
我得到的錯誤,我知道它是與協方差和逆變,如果有人能幫助我克服這個錯誤將不勝感激。
當然,我需要了解有關此主題的更多信息,但希望能夠首先快速解決此問題。
問候, 聖
另外相關:(http://stackoverflow.com/questions/1724919/understanding-covariance-and-contravariance-in-c-sharp-4-0)[以C#4.0瞭解協變和逆變] [瞭解C#中的協變和逆變接口](http://stackoverflow.com/questions/2719954/understanding-covariant-and-contravariant-interfaces-in-c-sharp),[爲什麼我不能指定一個列表一個列表 ?](http://stackoverflow.com/questions/4652858/why-cant-i-assign-a-listderived-to-a-listbase);還有其他一些。 –
poke
如果你已經知道什麼是造成你的問題(協方差和逆變)的術語,那麼請展示一些努力,並且看看你開始寫這個問題時應該向你提出的許多*現有問題,以及表明你的問題確實是基於你在這些問題的幫助下已經獲得的知識。 – poke
完全讀出我的問題......我已經承認它的協變和逆變。還提到我正在尋找一個快速幫助/解決方案,並會在這個主題上了解更多。 – sanoj