簡體   English   中英

C#.NET動態傳遞 <T> 方法中

[英]C# .NET Passing dynamic <T> in method

這就是我想要做的。

Class1:基類

    private void Update()
    {
       base.Update(Updated);
    }

    private void Updated(IRestResponse<thisClass> response)
    { 
        ....
    }

...

基類:

public void Update(<T> callback)
    {
        RestClient client = new RestClient("https://www.googleapis.com");
        client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(App.AuthenticationResult.access_token);
        var request = new RestRequest(path, Method.GET);
        client.ExecuteAsync<...T...>(request, callback);
    }

本質上,我希望能夠在遵循相同結構的多個類中的基類中重用Update。

當前,您的基類Update方法存在一些語法錯誤。

public void Update<T>(T callback)
{
    RestClient client = new RestClient("https://www.googleapis.com");
    client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(App.AuthenticationResult.access_token);
    var request = new RestRequest(path, Method.GET);
    client.ExecuteAsync<T>(request, callback);
}

如果參數是回調,則不應該是委托嗎?

它不需要是通用的,但您可以執行以下操作:

public delegate T CallbackDelegate<T>();
public void Update<T>(CallbackDelegate<T> callback)
    {
        RestClient client = new RestClient("https://www.googleapis.com");
        client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(App.AuthenticationResult.access_token);
        var request = new RestRequest(path, Method.GET);
        client.ExecuteAsync<T>(request, callback);
    }

我從您的問題中學到的是,您想共享/重用Update()但在擴展類中具有自定義的Updated() ...?

可能最簡單的方法是在擴展類中覆蓋的基類中創建虛擬方法:

public class BaseClass
{
    public virtual void Updated() { }
    public void Update()
    {
        RestClient client = new RestClient("https://www.googleapis.com");
        client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(App.AuthenticationResult.access_token);
        var request = new RestRequest(path, Method.GET);

        //implement whatever logic you want with the response.

        this.Updated(); //include whatever parameters you need to pass.
    }
}

public class Class1 : BaseClass
{
    public override void Updated()
    {
        //implement logic specific to Class1...
    }
}

暫無
暫無

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

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