C#.NET在方法</t>中传递动态<t>

时间:2012-06-27 02:14:35

标签: c# .net windows-phone-7

这是我想要做的事情。

Class1:baseclass

    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。

2 个答案:

答案 0 :(得分:0)

目前,您的基类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);
    }

答案 1 :(得分:0)

我从您的问题中收集到的是,您想要分享/重复使用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...
    }
}