C # Передача делегата в качестве аргумента - PullRequest
1 голос
/ 23 декабря 2010

Я знаю, что могу сделать это:

WebClient client = new WebClient();
client.UploadStringCompleted += delegate(object sender, UploadStringCompletedEventArgs e)
{
    //handle event
};
client.UploadStringAsync(myURI, "POST", "some_data");

Но есть ли способ передать встроенный делегат в качестве аргумента? Примерно так:

DoRequest("some_data",
    delegate(object sender, UploadStringCompletedEventArgs e)
    {
        //handle event
    });

public void DoRequest(string data, UploadStringCompletedEventHandler event)
{
    WebClient client = new WebClient();
    client.UploadStringCompleted += event;
    client.UploadStringAsync(myURI, "POST", data);
}

Ответы [ 2 ]

3 голосов
/ 23 декабря 2010

Да, этот код правильный, за исключением того, что вы не можете вызвать событие вашего параметра.Вместо этого я бы также использовал лямбда-выражение, потому что оно лучше.

DoRequest ("some_data", (o, e) => {/ * обработка события * /});

2 голосов
/ 23 декабря 2010

Да, вы можете написать именно это, за исключением того, что event является ключевым словом и не может использоваться в качестве имени переменной.

...