簡體   English   中英

如何在C#中將通用類轉換為通用接口

[英]How to cast a generic class to a generic interface in C#

根據以下定義

interface myin
{
    int id { get; set; }
}
class myclass:myin
{
    public int id { get; set; }
}
[Database]
public sealed class SqlDataContext : DataContext, IDataContext
{
    public SqlDataContext(string connectionString) : base(connectionString){}
    public ITable<IUrl> Urls
    {
        get { return base.GetTable<Url>(); }  //how to cast Table<Url> to ITable<IUrl>?
    }
    ...
}

更新:

public IEnumerable<IUrl> Urls
{
    get { return base.GetTable<Url>(); }
}

因此通過使用上述方法,我沒有與Table類相關的方法和能力。 這是一個好的解決方案嗎? 為什么呢?

在C#3.0和odler中,這不容易實現-另請參見C#4.0中的協方差和協方差

問題在於Table<Url>實現了ITable<Url>接口-這部分的轉換很容易。 棘手的是將ITable<Url>強制ITable<Url>ITable<IUrl> ,因為這兩種類型實際上沒有任何關聯...

在4.0之前的C#中,沒有簡單的方法可以執行此操作-您將明確需要為正確的泛型類型(例如,通過委托)創建ITable<..>的新實現。 在C#4.0中,只要ITable協變接口 ,就可以完成此轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM