为什么Windows Phone 7不完全支持C#规范?

5

为什么Windows Phone 7只支持C#语言,但不完全符合C#规范?我可以理解没有"dynamic"支持,但为什么不支持contra-covariance?为什么我们在服务器和桌面项目中常用的第三方库不能与Phone 7兼容?如果最终还是无法使用,那中间的IL代码有什么意义呢?


1
IL代码可能与桌面.NET兼容,但如果IL代码使用在WM7上不存在的模块,则这并不重要。个人认为,为桌面开发的库在WM7上的用途有限,因为它们可能太大且占用内存。我正在探索使用源引用而不是二进制引用在桌面和Silverlight之间共享代码。通过这种方式,也可以调整大小。 - Just another metaprogrammer
1
FYI,C#不是WP7唯一的语言。VB也得到支持http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/09/23/visual-basic-comes-to-windows-phone-7.aspx,并且已知F#可以工作(即使没有明确支持)。 - ctacke
3个回答

9
请记住它正在运行在Compact Framework CLR上-它不具备桌面CLR的所有功能。
编辑:经过一番搜寻,我发现通用变异不受紧凑框架支持(至少在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开发人员常见问题解答

我可以使用哪些技术和工具来为Windows Phone 7系列编程?
您目前可以使用基于Silverlight的托管语言C#和基于Compact Framework的XNA。

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

(接下来)

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

一个CF团队成员的博客文章

对于从Windows桌面转到Windows Phone 7(WP7)的开发人员,让我首先澄清一点:在WP7上运行的运行时(CLR)与在桌面上运行的不同。WP7运行时被称为.NET Compact Framework(NETCF),其工作方式与“桌面CLR”不同。


现有的库和IL的意义怎么样? - sfedorov1982
3
它是在运行Silverlight for Windows Phone上,它既不是CF也不是Silverlight 3或4。它缺少许多在.NET CF中存在的功能(我主要是指库),因此将其称为基于CF是具有误导性的。 - Eugene Mayevski 'Callback
1
@Eugene:CLR是紧凑框架CLR,而不是Silverlight的普通CoreCLR。我会编辑以澄清。 - Jon Skeet
1
@Christopher:我现在会查证据......我99%确定我在这方面是正确的。(请记住,我谈论的是CLR,而不是库。) - Jon Skeet
1
@Jon Skeet - 你说得对。.NET Compact Framework (NETCF) 是运行在 Windows Phone 7 设备上的。虽然我认为 OP 指的是库调用而不是 CLR 之间的实际差异。 - Justin Niessner
显示剩余7条评论

6

由于Windows Phone 7是基于Silverlight构建的,因此它不完全支持您所熟悉的所有.NET Framework功能。

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


-1

如果您正在使用SL,链接到Web服务,那么您可以(应该)保持移动应用程序的轻便性,并将服务器上的大量数据传输到客户端...

听起来很简单,但许多人试图将所有责任委托给“应用程序”-这是不好的做法。如果您的“网站”符合REST规范,则应将您的应用程序纯粹地调用json/xml以与您的“昂贵”的基于服务器的逻辑相匹配。

无论如何,这就是我们的做法 :)


2
当然,但这与问题是关于WinPhone上的C#实现有什么关系呢? - ctacke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接