首页 新闻 搜索 专区 学院

IObservable<T>.Subscribe 方法

0
悬赏园豆:10 [已解决问题] 解决于 2010-04-09 17:11

接口定义

IDisposable Subscribe(
IObserver
<T> observer
)

 

然后在看一下实现

代码
public IDisposable Subscribe(IObserver<Location> observer)
{
observers.Add(observer);
// Announce current location to new observer.
observer.OnNext(this.Location);
return observer as IDisposable;
}

 

 

在来看下iobserver

public interface IObserver<in T>

 

 

问题出来了,iobserver没有继承idisposable,为啥可以吧observer类型转换成idisposable??

 

MSDN:http://msdn.microsoft.com/en-us/library/dd783449(VS.100).aspx

看了这篇文章的疑问。

问题补充: 会不会是托管类都自动实现了idisposable接口呢? 如果是这样,那干嘛要返回idisposable类型?反正都已经托管了。
疯流成性的主页 疯流成性 | 初学一级 | 园豆:3
提问于:2010-04-09 10:06
< >
分享
最佳答案
0

看一下C#语言文档里关于 as 的说明吧.

http://msdn.microsoft.com/zh-cn/library/cscsdfbt%28v=VS.71%29.aspx

收获园豆:5
deerchao | 大侠五级 |园豆:8167 | 2010-04-09 16:19
还是文档好,一看就明白。呵呵
疯流成性 | 园豆:3 (初学一级) | 2010-04-09 17:11
其他回答(1)
0

托管的类当然没有自动实现IDisposable,这里也没有说observer一定是一个IDisposable,不是的情况下,就返回null了。

收获园豆:5
麒麟.NET | 园豆:3614 (老鸟四级) | 2010-04-09 13:15
正常情况下,这样转换编译器是会报错的,但问题就是observer类型转换成idisposable没报错,返回的还不是Null
支持(0) 反对(0) 疯流成性 | 园豆:3 (初学一级) | 2010-04-09 15:16
@疯流成性:as是不会引发异常的
支持(0) 反对(0) 麒麟.NET | 园豆:3614 (老鸟四级) | 2010-04-09 16:36
@疯流成性:转换失败的情况下就返回null
支持(0) 反对(0) 麒麟.NET | 园豆:3614 (老鸟四级) | 2010-04-09 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册