using (proxy as IDisposable) 求解释,什么意思

jinianjun 2013-09-06 02:04:46
日前在以为大侠的博客上看MFC方面的文章,他上面有一段代码,是这么写的:
using System;
using Artech.DuplexServices.Contracts;
using System.ServiceModel;
namespace Artech.DuplexServices.Clients
{
class Program
{
static void Main(string[] args)
{
InstanceContext instanceContext = new InstanceContext(new CalculateCallback());
using (DuplexChannelFactory<ICalculator> channelFactory = new DuplexChannelFactory<ICalculator>(instanceContext, "CalculatorService"))
{
ICalculator proxy = channelFactory.CreateChannel();
using (proxy as IDisposable)
{
proxy.Add(1, 2);
Console.Read();
}
}
}
}
}


我知道using是什么意思,也知道using里面的对象必须实现idisposable接口。as我理解的是强制转化的意思。我问的重点是:as IDisposable是什么意思呢?难道是把proxy强制转化为一个接口吗?

另附上这位大侠的原文:http://www.cnblogs.com/artech/archive/2007/03/02/661969.html
...全文
208 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ahoo 2013-09-07
  • 打赏
  • 举报
回复
引用 5 楼 jinianjun 的回复:
[quote=引用 3 楼 tsgx_1989 的回复:] 1.因为 using的作用变量必须是继承自IDisposable的,所以必须转换。 2.那么你可能会说,ICalculator 并没有看到它有任何继承自IDisposable接口的痕迹啊,那么你要知道 CreateChannel方法内部返回的是一个实现了 ICalculator 和 IDisposable 的变量
比如说int类型强制转换为long类型我还好理解。这个ICalculator强制转换为IDisposable怎么理解呢?[/quote] 你的这两个类比其实是两个概念,因为ICalculator引用指针其实指向的是实现了IDisposable的对象,这样的转化实际上是为了编译期的需要。
threenewbee 2013-09-07
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/vstudio/cscsdfbt.aspx
jinianjun 2013-09-07
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
[quote=引用 1 楼 hdt 的回复:] 介个是mfc 我很惊奇
他把wcf叫做mfc了。 as运算符的作用不是转换,而是“作为、视作”。英文as的意思你应该知道吧。 比如 Man m = ChineseMan(); //将一个中国人对象传给Man类型的变量m,但是编译器不知道这个m其实是一个ChineseMan类型的。它只知道它是Man m.SpeakChinese(); //编译错误,Man类型没有SpeakChinese的功能 (m As CineseMan)SpeakChinese(); //作为一个中国人,他可以说中文[/quote] 实在忏愧,大侠说的太对了,我把WCF给弄成MFC了! 另:关于as运算符,大侠可以给详细说下吗?
threenewbee 2013-09-07
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
介个是mfc 我很惊奇
他把wcf叫做mfc了。 as运算符的作用不是转换,而是“作为、视作”。英文as的意思你应该知道吧。 比如 Man m = ChineseMan(); //将一个中国人对象传给Man类型的变量m,但是编译器不知道这个m其实是一个ChineseMan类型的。它只知道它是Man m.SpeakChinese(); //编译错误,Man类型没有SpeakChinese的功能 (m As CineseMan)SpeakChinese(); //作为一个中国人,他可以说中文
jinianjun 2013-09-07
  • 打赏
  • 举报
回复
引用 7 楼 tsgx_1989 的回复:
[quote=引用 5 楼 jinianjun 的回复:] [quote=引用 3 楼 tsgx_1989 的回复:] 1.因为 using的作用变量必须是继承自IDisposable的,所以必须转换。 2.那么你可能会说,ICalculator 并没有看到它有任何继承自IDisposable接口的痕迹啊,那么你要知道 CreateChannel方法内部返回的是一个实现了 ICalculator 和 IDisposable 的变量
比如说int类型强制转换为long类型我还好理解。这个ICalculator强制转换为IDisposable怎么理解呢?[/quote] 你的这两个类比其实是两个概念,因为ICalculator引用指针其实指向的是实现了IDisposable的对象,这样的转化实际上是为了编译期的需要。[/quote]
using (proxy as IDisposable)
                {
                    proxy.Add(1, 2);
                    Console.Read();
                }
这样将ICalculator强制转化为IDisposable,但是IDisposable是没有Add这个方法的啊,那下面的语句块里面的proxy.Add(1, 2);会报错吗?
jinianjun 2013-09-06
  • 打赏
  • 举报
回复
引用 3 楼 tsgx_1989 的回复:
1.因为 using的作用变量必须是继承自IDisposable的,所以必须转换。 2.那么你可能会说,ICalculator 并没有看到它有任何继承自IDisposable接口的痕迹啊,那么你要知道 CreateChannel方法内部返回的是一个实现了 ICalculator 和 IDisposable 的变量
比如说int类型强制转换为long类型我还好理解。这个ICalculator强制转换为IDisposable怎么理解呢?
jinianjun 2013-09-06
  • 打赏
  • 举报
回复
引用 3 楼 tsgx_1989 的回复:
1.因为 using的作用变量必须是继承自IDisposable的,所以必须转换。 2.那么你可能会说,ICalculator 并没有看到它有任何继承自IDisposable接口的痕迹啊,那么你要知道 CreateChannel方法内部返回的是一个实现了 ICalculator 和 IDisposable 的变量
嗯,解决我的proxy哪里实现了IDisposable接口的疑问。那么,我还有一个问题可否讲解一下,using里面的那句:proxy as IDisposable 是什么意思呢?难道是把proxy强制转化为一个接口吗?
Ahoo 2013-09-06
  • 打赏
  • 举报
回复
1.因为 using的作用变量必须是继承自IDisposable的,所以必须转换。 2.那么你可能会说,ICalculator 并没有看到它有任何继承自IDisposable接口的痕迹啊,那么你要知道 CreateChannel方法内部返回的是一个实现了 ICalculator 和 IDisposable 的变量
jinianjun 2013-09-06
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
介个是mfc 我很惊奇
我只是在看关于mfc的文章的时候看到这么一句代码,不懂,所以来问问。 下面有原文的链接。
真相重于对错 2013-09-06
  • 打赏
  • 举报
回复
介个是mfc 我很惊奇

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧