2010-09-29 103 views
5

为什么Windows Phone 7完全支持C#规范,而唯一可用的语言是C#?好吧,我可以理解缺乏“动态”支持,但为什么不支持对称协变?为什么不是我们熟悉的第三方库,并且我们使用的服务器桌面项目与Phone 7不兼容?如果我们仍然在这里结束,有一个中间IL代码有什么意义?为什么Windows Phone 7不完全支持C#规范?

+1

IL代码很可能是与桌面.NET兼容,但如果IL代码使用上不存在WM7模块也没关系。 Personlly我认为为桌面开发的库在WM7上使用有限,因为它们可能太大而且内存很大。我正在探索使用源引用而不是二进制引用来共享桌面和Silverlight之间的代码。这样也可以调整大小。 – FuleSnabel 2010-09-29 19:13:55

+1

仅供参考,C#不是* WP7唯一的语言。 VB支持http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/09/23/visual-basic-comes-to-windows-phone-7.aspx和F#已知工作(即使没有明确支持) – ctacke 2010-09-29 19:54:03

回答

6

Windows Phone 7并不完全支持您习惯的所有.NET Framework功能,因为它基于Silverlight构建。

Silverlight被设计为不支持全套功能,因为它是一个轻量级的运行时(而不是要求每个用户下载整个.NET Framework来运行Silverlight应用程序)。

9

请记住,它在Compact Framework CLR上运行 - 它没有桌面CLR的所有功能。

编辑:经过一番拖网之后,我发现generic variance isn't supported in the Compact Framework(或者至少在2005年还没有回来,我怀疑它还没有实施,因为直到最近几乎没有什么用处):

不支持方差修饰符。虽然方差/协方差是泛型总体ECMA规范的一部分,并且为完整的.NET CLR实现,但它不用于基类库或C#和VB。

好吧,它不会“完全支持”C#4(绝对最新版本),但是您是否知道任何不支持的C#3语言功能?

就图书馆而言,你正在处理的框架大致基于Silverlight 3,但带有一些Silverlight 4位,并删除了“桌面”Silverlight的各个方面。 (编辑:根据评论中的链接,它应该包含所有的Silverlight 3的API。我不确定这是否准确或不......)换句话说,它是它自己的野兽,真的。尽管IL本身可能是可移植的,但当各种API被移除时,很难保证兼容性。但是,在很多情况下,您可以重建库来定位WP7。我同意这样做很烦人,但它比他们根本没有的更好。

编辑:引文我声称它使用CF CLR:

Windows Phone 7 Series Developer General FAQ

我可以使用什么样的技术和工具,以程序为Windows Phone 7系列?
您目前可以使用基于Compact Framework的Silverlight和XNA的托管语言C#。

我可以使用Windows窗体吗?
不,Windows Forms 7不包含在 Windows Phone 7系列中的Compact Framework版本中。

(或更高版本)

我可以使用在Silverlight XNA库调用?
Silverlight和XNA在Compact Framework中共享一个共同的代码库。如果一个调用不是基于GUI的,大多数情况下它可以在Silverlight和XNA之间共享。

一个CF team member's blog post

对于从Windows桌面来的Windows Phone 7(WP7)首先,我要澄清,即在WP7运行的运行时(CLR)是不一样的开发商作为桌面上运行的那个。 WP7运行时被称为.NET Compact Framework(NETCF),它的工作方式与“桌面CLR”不同。

+0

以及IL的现有libriries和sence? – sfedorov1982 2010-09-29 19:04:13

+3

它运行在Silverlight for Windows Phone上,它既不是CF也不是Silverlight 3或4.它缺少许多功能,它存在于.NET CF中(我主要谈论这个库),所以称它为基于CF的是误导性的。 – 2010-09-29 19:05:34

+1

@Eugene:CLR是Compact Framework CLR,而不是Silverlight的普通CoreCLR。我会编辑澄清。 – 2010-09-29 19:16:31

-1

如果你使用SL,连接到Web服务,那么你可以(应该)保持移动应用的骨感与吸服务器上的脂肪...

听起来很简单,我知道,但很多窥视TRY将所有责任委托给“应用” - 这是不好的做法。如果您的'网站'符合REST标准,那么您应该使您的应用程序与您的'昂贵'的基于服务器的逻辑纯粹地进行json/xml调用。

无论如何,这是我们如何做到这一点:)

+2

当然,但是这与WinPhone上C#实现的问题有关吗? – ctacke 2010-09-29 23:07:18