2010-04-01 12 views
22

Geç saatlerde çok fazla C# 4.0 değişiklik görüyorum. Bazılarını gerçekten çok seviyorum. Yine de, henüz henüz uyumsuzluk nedenleriyle .Net 4.0'a geçmek istemiyorum.C# 4.0 için çalışan ve .NET 3.5'de çalışan bir değişiklik listesi var mı?

Yani, .NET 3.5 veya daha düşük üzerinde çalışacak yeni C# 4.0 dil özelliklerinin kapsamlı listesi var mı? Örnek olarak

yapın varsayılan parametreleri .NET 4.0 CLR gerektirir, ya da bir derleyici özelliğidir? Otomatik özellikler (C# 3.0 özelliği) kullanmak ve hala .NET 2.0'ı hedeflemek mümkündür, çünkü Framework desteği gerektirmez, ancak LINQ ifadelerini kullanmaz, çünkü Framework 3.5 gerektirir. tipi parametreleri -

+3

herhangi olmadığından emin değilim ;-p yeni tarzı erişimcileri alır .NET 4.0, CLR'nin yeni bir sürümünü getirdi. .NET CLR 2.0 CLR (CLR .NET 3.5 kullanır) derlemeleri çalıştıramazsınız. Ve bildiğim kadarıyla, C# 4 derleyicisi 3.5'ü hedeflemenin hiçbir yolunu sunmuyor. –

+3

Örnek olarak, varsayılan parametreler .NET 4.0 CLR gerektirir mi yoksa bir derleyici özelliği mi? Otomatik özellikler (bir C# 3.0 özelliği) kullanmak ve hala .NET 2.0'ı hedeflemek mümkündür, çünkü Framework desteği gerektirmez, ancak LINQ ifadelerini kullanamazsınız, çünkü _does_ Framework 3.5 gerektirir. –

+0

@John, evet bunu soruyorum. Birçok kullanıcının C# ile aynı olduğunu düşündüğünün farkında değildim. Net – Earlz

cevap

31

4.0'da C# derleyicisi yeni bir çoklu veri özelliği ile birlikte gelir. Kısa sürüm, System.Object (genellikle mscorlib.dll) tanımlayan referansta metadata sürümü bulunan bir derleme üretecektir. Bu, 2.0 ve 3.5 için derlemeler ve Silverlight'ın çeşitli sürümlerini derlemek için kullanmanıza olanak tanır. Bu özellik, Visual Studio 2010'daki multetiketlemenin desteğiyle tanıtıldı.

Bu nedenle, C# 4.0 derleyicisini 3.5 derlemelerini derlemek ve istediğiniz herhangi bir C# 4 özelliğini kullanmak için kullanabilirsiniz. 4.0 kütüphanelerine bağımlılık. Örneğin, herhangi bir 4.0 çerçeve özelliğini kullanmadıkları için, adlandırılmış argümanlar ve isteğe bağlı parametreler iyi çalışır. Ancak, dinamik, ancak, kutudan çıkar ve 3.5'den fazla çalışmaz.

Bu konuyla ilgili temel bilgilerden oluşan bir yayın var.

http://blogs.msdn.com/ed_maurer/archive/2010/03/31/multi-targeting-and-the-c-and-vb-compilers.aspx

(Ed görevinden) kısa bir listesi:

  • adlı argümanlar ve opsiyonel parametreler
  • belirli COM dizimi gelişmeler (örneğin, "ref ihmal")
  • jenerik varyans çalışmayacaktır

şeyler o (dinamik ve hiç pia dahil Bunları uygulamak için harcanan zaman açısından iki büyük harcamalar üretin). Birincisi çerçeve desteği gerektirir ve ikincisi çalışma zamanı desteği gerektirir. Varsayılan parametreler zaten VB.NET olduğu bir özelliği göz önüne alındığında bu

+0

Büyük yanıt, ancak bildiğim şeyi tahmin edin C# 4.0'daki hangi özelliklerin .Net 4.0 – Earlz

+0

özelliğine güvenmediği bu harika. Ed'in post re: jenerik varyansından bir önemli nokta, eğer 3.5'ü hedeflerseniz, 'IEnumerable ', varyans özelliğine katılmayacaktır, bu yüzden siz tüm sinir bozucu 'Cast ' çağrılarınızı tamamen ortadan kaldıramazsınız. 4.0 çalışma zamanını hedefleyebilir. –

+0

@Earlz - bu cevaptaki mermi listesinin noktası değil mi? –

2

Ben kovaryans ve contravariance IL ek açıklamalar + ve içinden bir miktar destek olduğunu biliyoruz "elbette C# 4.0 o yaşlı neden .NET 3.5 çalışmaz" deme CLR 2.0'da. Diğer özellikleri hakkında emin değilim.

0

, C# sadece derleyici seviyede uygulanan mümkündür. Ancak CLR ekibi bunu tamamen yeni bir şekilde uygulayabilirdi.

You should hazır

2

Bu bir liste değil, ne de kesin değildir ".NET 3.5 framework için de geçerli olacak derleyici değişikliklerin neler C# 4.0 özellikleri", ancak devlet sorunuzu değiştirmek bir örnek olarak Ben sadece .NET 3.5 targetting yeni bir VS2010 proje kurdu ve başarıyla varsayılan parametreleri ile bir yöntem oluşturdu ve her ikisi de C# 4.0 özellikleri olan adlandırılmış argümanları ile çağırdı.

0

"Eski" özellikteki değişiklikleri düşünüyorum ...lock değişikliği kullanılamaz, çünkü yeni bir aşırı yüklenme gerektirir - ancak the "field-like events" change, çalışmalıdır. derleyici

Ve yeterince emin ;-p yayar ne kontrol etmek gerekir:

using System; 
class Program 
{ 
    public event EventHandler SomeHandler; 
    static void Main() { } 
} 

olarak,

+0

Hangi yeni erişimciler? – Earlz

+0

@Marc: Bahsettiğiniz "kilit değişimi" nedir? –

+0

@Earlz - bağlantıya bakın; alan benzeri etkinlik uygulaması –

İlgili konular