簡體   English   中英

C#泛型類繼承

[英]C# generic class inheritance

我有其他類擴展的基類BaseRepository。

public class BaseRepository
{
    protected RestClient client;
    protected string url;

    public BaseRepository ()
    {
        client = RestClient.GetInstance ();
    }

    public async Task<T> Find<T> (string id) {
        dynamic response = await client.Find(url, id);

        return DeserializeItem<T> (response);
    }
}

然后我有一個UsersRepository類,它是從基類擴展的。

public class UsersRepository : BaseRepository
{
    string url = "users";
    static UsersRepository instance;

    private UsersRepository ()
    {
    }

    public static UsersRepository GetInstance() {
        if (instance == null) {
            instance = new UsersRepository ();
        }

        return instance;
    }
}

我不知道如何將User作為public async Task<T> Find<T> (string id)方法的響應類型傳遞。 我可以在UsersRepository創建此方法,但是我不想重復代碼。

public override function User Find(string id) {
    return base.Find<User>(id);
}

任何幫助將非常感激。

看起來您實際上想要的是在基類而不是方法上定義的泛型類型。 另外,我認為您想在派生類的構造函數中設置基類中定義的url

public class BaseRepository<T>
{
    protected RestClient client;
    protected string url;

    public BaseRepository ()
    {
        client = RestClient.GetInstance ();
    }

    public async Task<T> Find(string id) {
        dynamic response = await client.Find(url, id);

        return DeserializeItem<T> (response);
    }
}

public class UsersRepository : BaseRepository<User>
{
    static UsersRepository instance;

    private UsersRepository ()
    {
        url = "users";
    }

    public static UsersRepository GetInstance() {
        if (instance == null) {
            instance = new UsersRepository ();
        }

        return instance;
    }
}

暫無
暫無

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

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