[英]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.