为什么当Windows Phone 7唯一可用的语言是C#时,它不能完全支持C#规范?好吧,我可以理解缺乏“动态”支持,但为什么不支持反协方差?为什么我们不熟悉的第三方库以及我们在与Phone 7不兼容的服务器 - 桌面项目中使用?如果我们仍然在这里,有一个中间的IL代码有什么意义?
答案 0 :(得分: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窗体吗?
不,包含的Compact Framework版本不支持Windows窗体 Windows Phone 7系列。
(及以后)
我可以在Silverlight中使用XNA库调用吗?
Silverlight和XNA在Compact Framework中共享一个公共代码库。如果调用不是基于GUI的,则在大多数情况下,它可以在Silverlight和XNA之间共享。
对于从Windows桌面访问Windows Phone 7(WP7)的开发人员,让我首先澄清一下WP7上运行的运行时(CLR)与桌面上运行的运行时(CLR)不同。 WP7运行时称为.NET Compact Framework(NETCF),它的工作方式与“桌面CLR”不同。
答案 1 :(得分:6)
Windows Phone 7并不完全支持您习惯使用的所有.NET Framework功能,因为它是基于Silverlight构建的。
Silverlight旨在不支持完整的功能集,因为它意味着轻量级运行时(而不是要求每个用户下载整个.NET Framework来运行Silverlight应用程序)。
答案 2 :(得分:-1)
如果您使用SL,链接到网络服务,那么您可以(应该)保持移动应用程序瘦,并在服务器上吸脂...
听起来很简单我知道,但很多人都认为将所有责任委托给'app' - 这是不好的做法。如果你的“网站”符合REST标准,那么你应该将你的应用程序与纯粹的json / xml调用对齐你的“昂贵的”基于服务器的逻辑。
无论如何,我们就是这样做的:)