Iasyncresult - почему это не просто объект, а интерфейс? - PullRequest
0 голосов
/ 10 мая 2010

Я просто не могу понять, почему IAsyncResult - это интерфейс, а не простой объект. Как я правильно помню, интерфейс содержит только имена методов без реализации, поэтому я не могу видеть, как он используется здесь, так как я не получаю ни один класс этого, ни переопределяю его методы? Я просто в замешательстве .. Спасибо

Ответы [ 3 ]

2 голосов
/ 10 мая 2010

Если бы это был просто объект, он мог быть чем угодно - и вы могли бы не полагаться на присутствующие определенные свойства и / или методы, как вы можете, когда знаете, что получите объект, который реализует интерфейс IAsyncResult.

Поскольку возвращаемый объект должен реализовывать соответствующий интерфейс, вы можете полагаться на то, что будут присутствовать свойства AsyncState, AsyncWaitHandle, CompletedSynchronously и IsCompleted.

Если у вас был только объект и вы получили int - как бы вы получили те свойства, которые вам нужны ??

1 голос
/ 10 мая 2010

Поскольку «ASyncResult» сам по себе не является чем-то конкретным.

Поскольку C # допускает только одиночное наследование, сделав его интерфейсом, вы сможете реализовать его на любом типе объекта, который вы выберете.

Например, если мой метод возвращает тип Foo, я могу создать асинхронный тип возврата для моего приложения, просто создав подкласс, говорящий

FooAsync : Foo, IAsyncResult  

И просто приведите его в противоположность написанию кода для извлечения значений.

1 голос
/ 10 мая 2010

Подобным образом, результатом может быть любой тип объекта, который реализует интерфейс IAsyncResult.

Вы правы, что интерфейс содержит только методы / свойства без реализации. В этом случае гарантируется, что объект AsyncResult содержит методы, необходимые для Async-framework.

IAsyncResult содержит четыре свойства:

  • AsyncState (Object)
  • AsyncWaitHandle (WaitHandle)
  • Завершено Синхронно (логическое)
  • IsCompleted (Boolean)

Эти свойства просто необходимы при работе с асинхронными методами. Если бы это был объект, я думаю, вы были бы менее гибкими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...