如何正确实现类型转发?

时间:2013-05-07 17:18:47

标签: xamarin.ios xamarin.android portable-class-library

我即将为Microsoft.Threading.Tasks.Extensions编写一个shim程序集,以便能够构建Mono项目(我描述了问题here),但有些事情我不确定。< / p>

1)程序集包含以下方法(一些具有多个重载):

  • FromCancellation,
  • HandleEapCompletion
  • ReadAsync
  • WriteAsync
  • FlushAsync
  • CopyToAsync
  • CopyToAsyncInternal
  • ReadBlockAsync
  • ReadLineAsync
  • ReadToEndAsync
  • WriteLineAsync
  • GetResponseAsync
  • GetRequestStreamAsync

如何找出我应该转发哪些类型以及实施哪些方法?那些应该转发的,我应该在哪里重定向它们?在这种情况下,我怀疑我必须提供实现,因为它们在Mono程序集中不存在,但我怎么知道呢?

2)我是否需要实现或者转发所有内容,或者只需要在我的代码中使用的内容?在后一种情况下,如果我跳过一些必需的类型或方法,我怎么知道呢?我注意到我没有为丢失的方法收到编译器错误 - 它只是抱怨缺少程序集而没有提示它正在寻找什么方法。如果我留下未转发的类型或没有实现的方法,我会从编译器得到任何提示吗?

更新即可。这里定义了两种类型:System.Threading.Tasks.TaskServices和AsyncExtensions。 Android / Touch项目都不知道它们。我只能转发程序集引用的类型,而这两种类型不是。这是否意味着我必须实施它们?

1 个答案:

答案 0 :(得分:2)

你不应该真的是类型转发方法 - 而应该是类型转发类型。

我的建议 - 基于我对System.Windows和System.Net所做的 - 是从类型转发参考程序集中的所有类型开始。

执行此操作后 - 构建时 - 您可能会发现一些不会前进的内容。对于那些你可以:

  • 只是错过了它们 - 在这种情况下,某些代码稍后会在运行时因某些Missing异常而失败。
  • 实施存根版本 - 提供NotImplementedException
  • 的自由帮助
  • 实现替换版本(虽然我会回避这样做 - 可能会更好地与Mono人交谈并尝试修补Mono实现)

我相信Async代码的新Mono3实现非常完整 - 所以我认为你不应该遇到太多问题。