Iasyncresult - почему это не просто объект, а интерфейс?

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


person Thomas    schedule 10.05.2010    source источник


Ответы (3)


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

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

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

person marc_s    schedule 10.05.2010

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

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

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

  • AsyncState (объект)
  • AsyncWaitHandle (WaitHandle)
  • CompletedSynchronously (логическое)
  • IsCompleted (логический)

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

person Rhapsody    schedule 10.05.2010

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

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

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

FooAsync : Foo, IAsyncResult  

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

person Doobi    schedule 10.05.2010