2010-09-29 109 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